solucionesJul

  1. 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
        }
    
  2. 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")
        }
    }
    
  3. 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
    
  4. 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"]
                         })
    
  5. 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.

Author: Carlos Enrique Carleos Artime

Created: 2021-06-26 sáb 00:25

Emacs 25.2.2 (Org mode 8.2.10)

Validate