solucionesJul
- Define una función llamada "r2larga" que tome como argumento un
dataframe y devuelva el coeficiente de determinación (R2) de la
regresión lineal siguiente:
- variable respuesta = la variable con el nombre más largo del dataframe
- variables regresoras = todas las demás del dataframe
(Aclaración: Por ejemplo, en "mtcars", las variables con nombre más largo son "disp", "drat", "qsec", "gear" y "carb". En casos así, donde hay varios máximos, podría tomarse como variable respuesta cualquiera de esas cinco.)
r2larga <- function (d) { ilarga <- which.max (nchar (names (d))) regre <- lm (d[,ilarga] ~ as.matrix(d[,-ilarga])) ## otra forma, que permite regresores cualitativos y cuantitativos: regre <- lm (paste(names(d)[ilarga],"~."), d) summary(regre)$r.squared }
- Describe el fichero de datos
ssh://carleos2.epv.uniovi.es:/home/manadine/dat/jovenes.csv
(Aclaración: Di cuántos datos hay, qué variables y de qué tipo son,
para cada cualitativas indica las dos categorías más frecuentes,
para cada cuantitativa da mínimo y máximo.)
system ("scp alumno@carleos2.epv.uniovi.es:/home/manadine/dat/jovenes.csv .") j <- read.csv("jovenes.csv", stringsAsFactors=TRUE, fileEncoding="ISO-8859-1") summary(j) # con esto pueden verse cualitativas y cuantitativas ## para hacerlo automAticamente: for (i in 1:ncol(j)) { v <- j[[i]] cat ("#########################\n") cat ("Variable", names(j)[i]) if (is.factor (v)) { cat(" es cualitativa.\nModas:\n") print (rev (sort (table (v))) [1:2]) } else { cat(" es cuantitativa.\nExtremos:", range(v, na.rm=TRUE), "\n") } }
- Los rownames(mtcars) son cadenas que contienen marca y modelo de
coches. ¿Cómo podrías obtener un vector de cadenas que contenga
sólo la marca de cada coche, por ejemplo para hacer una tabla de
frecuencias de las marcas?
marcas <- gsub(" .*", "", rownames(mtcars)) # eliminando todo tras el espacio ## dividiendo por espacios y tomando el primer trozo: marcas <- sapply (strsplit(rownames(mtcars)," "), function(x) x[1]) sort (table (marcas)) # tabla de frecuencias ordenada
- Dado un data frame, llamaremos "i-ésima regresión cruzada" a una
regresión hecha con los datos del dataframe excepto con los de la
fila número "i". Dado el dataframe "mtcars", que tiene 32 filas,
obtén un vector con las 32 pendientes de las
i-ésimas regresiones cruzadas, para i desde 1 hasta 32, de la
variable "mpg" frente a "wt".
(Aclaración: Si no sabes lo que es la pendiente, usa el
coeficiente de determinación u otra cosa.)
resultado <- sapply (1:32, function (i) { regre <- lm (mpg ~ wt, mtcars[-i,]) coef(regre)["wt"] })
- Explica qué efecto tiene la función "abbreviate", por ejemplo
aplicada a rownames(mtcars). Úsala para hacer una nube de puntos
de "mpg" sobre "wt" de "mtcars" donde en vez de puntos aparezcan
los rownames abreviados.
## uso: x <- mtcars$wt y <- mtcars$mpg plot (x, y, type="n") text (x, y, abbreviate (rownames (mtcars)))
La función "abbreviate" reduce cada cadena de un vector de cadenas a una cadena más corta. Es útil para generar tablas y gráficos con etiquetas cortas.
Sus argumentos más importantes son:
- el primero (names.arg) que es el vector de cadenas que va a abreviarse.
- minlength = longitud mínima de las abreviaturas. Por omisión, éstas deben
ser únicas, por lo que la abreviatura podría ser más larga que minlength.
Si minlength=4 (valor por omisión) entonces
abbreviate(c("Carlos","Carleos"))
produce
"Carlos" "Carles"
es decir, cadenas de longitud 6.
Según la ayuda de R, "abbreviate" sigue los siguientes pasos:
- Eliminar espacios al final de la cadena.
- Si hace falta, eliminar resto de espacios en blanco.
- Eliminar vocales minúsculas.
- Eliminar consonantes mayúsculas.
- Seguir eliminando mayúsculas y símbolos si más larga que minlength.
Siempre se empieza eliminando por el final. Se conserva al menos una letra de cada palabra.
Por ejemplo:
> abbreviate (rownames(mtcars)) Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive "MRX4" "MRXW" "D710" "Hr4D" Hornet Sportabout Valiant Duster 360 Merc 240D "HrnS" "Vlnt" "D360" "M240" Merc 230 Merc 280 Merc 280C Merc 450SE "M230" "Mr280" "M280C" "M450SE" Merc 450SL Merc 450SLC Cadillac Fleetwood Lincoln Continental "Mr450SL" "M450SLC" "CdlF" "LncC" Chrysler Imperial Fiat 128 Honda Civic Toyota Corolla "ChrI" "F128" "HndC" "TytCrl" Toyota Corona Dodge Challenger AMC Javelin Camaro Z28 "TytCrn" "DdgC" "AMCJ" "CZ28" Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa "PntF" "FX1-" "P914" "LtsE" Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E "FrPL" "FrrD" "MsrB" "V142"
Se aprecia que
- Las abreviaturas tienen al menos cuatro letras (el valor de minlength por omisión), aunque el "Dodge Challenger" podría haberse abreviado a "Ddg" si no se conservase al menos una letra de cada palabra.
- Desaparecen todas las vocales salvo la I mayúscula de Imperial, conservada por mantener una letra de la palabra.
- TytCrn y TytCrl conservan consonantes "yt" porque se elimina por el final hasta encontrar ambigüedad.
- Las cifras y los símbolos como el guion «-» tienen prioridad sobre las minúsculas pero no sobre las mayúsculas.