AlwaysR, Módulo III: Estadística en R.

Lab 01

Giancarlo M. Correa


En esta sección se resume los conceptos más importantes vistos en la parte práctica de cada clase.

Cargamos librerías a utilizar

library(ggplot2)
library(lattice)
library(car)
library(summarytools)
library(moments)

Estadísticos descriptivos

Bases de datos a utilizar:

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

Podemos encontrar estadísticos descriptivos más importante para cada variable:

summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 

Para aplicar una función a una base de datos diferenciado por categorías de una variable:

by(data = iris, INDICES = iris$Species, FUN = summary)
## iris$Species: setosa
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.300   Min.   :1.000   Min.   :0.100  
##  1st Qu.:4.800   1st Qu.:3.200   1st Qu.:1.400   1st Qu.:0.200  
##  Median :5.000   Median :3.400   Median :1.500   Median :0.200  
##  Mean   :5.006   Mean   :3.428   Mean   :1.462   Mean   :0.246  
##  3rd Qu.:5.200   3rd Qu.:3.675   3rd Qu.:1.575   3rd Qu.:0.300  
##  Max.   :5.800   Max.   :4.400   Max.   :1.900   Max.   :0.600  
##        Species  
##  setosa    :50  
##  versicolor: 0  
##  virginica : 0  
##                 
##                 
##                 
## ------------------------------------------------------------ 
## iris$Species: versicolor
##   Sepal.Length    Sepal.Width     Petal.Length   Petal.Width          Species  
##  Min.   :4.900   Min.   :2.000   Min.   :3.00   Min.   :1.000   setosa    : 0  
##  1st Qu.:5.600   1st Qu.:2.525   1st Qu.:4.00   1st Qu.:1.200   versicolor:50  
##  Median :5.900   Median :2.800   Median :4.35   Median :1.300   virginica : 0  
##  Mean   :5.936   Mean   :2.770   Mean   :4.26   Mean   :1.326                  
##  3rd Qu.:6.300   3rd Qu.:3.000   3rd Qu.:4.60   3rd Qu.:1.500                  
##  Max.   :7.000   Max.   :3.400   Max.   :5.10   Max.   :1.800                  
## ------------------------------------------------------------ 
## iris$Species: virginica
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.900   Min.   :2.200   Min.   :4.500   Min.   :1.400  
##  1st Qu.:6.225   1st Qu.:2.800   1st Qu.:5.100   1st Qu.:1.800  
##  Median :6.500   Median :3.000   Median :5.550   Median :2.000  
##  Mean   :6.588   Mean   :2.974   Mean   :5.552   Mean   :2.026  
##  3rd Qu.:6.900   3rd Qu.:3.175   3rd Qu.:5.875   3rd Qu.:2.300  
##  Max.   :7.900   Max.   :3.800   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    : 0  
##  versicolor: 0  
##  virginica :50  
##                 
##                 
## 

Para aplicar una función a una variable diferenciado por categorías de otra variable:

tapply(X = iris$Sepal.Length, INDEX = iris$Species, FUN = mean)
##     setosa versicolor  virginica 
##      5.006      5.936      6.588

Calcular la asimetría de la distribución de una variable:

skewness(x = iris$Petal.Width)
## [1] -0.1019342

Valores cercanos a cero significa una distribución simétrica. Valores positivos significa que la distribución es asimétrica y tirada hacia la izquierda. Valores negativos significa que la distribución es asimétrica y tirada hacia la derecha.

Simetria y sesgo.

Calcular kurtosis de una variable, que nos indica que tan plano es el tope de una distribución:

kurtosis(x = iris$Sepal.Length)
## [1] 2.426432

Kurtosis.

Valores menores a 3 se les conoce como platicurtica, por ejemplo:

Valores cercanos a 3 se les conoce como mesocurtica, por ejemplo:

Valores mayores a 3 se les conoce como leptocurtica, por ejemplo:

Tablas de contingencia

Tabla de contingencia:

table(iris$Species)
## 
##     setosa versicolor  virginica 
##         50         50         50

Podemos crear una nueva variable categórica a partir de una numérica:

iris$Size = NA
iris$Size = ifelse(test = iris$Sepal.Length > 6, yes = 'Big', no = 'Small')
iris$Size = as.factor(iris$Size)

Y podemos crear una tabla de contingencia de doble entrada:

table(iris$Species, iris$Size)
##             
##              Big Small
##   setosa       0    50
##   versicolor  20    30
##   virginica   41     9

También lo podemos hacer usando la función xtabs:

xtabs(~ iris$Species + iris$Size)
##             iris$Size
## iris$Species Big Small
##   setosa       0    50
##   versicolor  20    30
##   virginica   41     9

Podemos obtener esta tabla con valores de proporciones:

prop.table(table(iris$Species, iris$Size))
##             
##                    Big     Small
##   setosa     0.0000000 0.3333333
##   versicolor 0.1333333 0.2000000
##   virginica  0.2733333 0.0600000

Estas tablas pueden ser obtenidas en un formato más ordenado:

freq(x = iris$Species)
## Frequencies  
## iris$Species  
## Type: Factor  
## 
##                    Freq   % Valid   % Valid Cum.   % Total   % Total Cum.
## ---------------- ------ --------- -------------- --------- --------------
##           setosa     50     33.33          33.33     33.33          33.33
##       versicolor     50     33.33          66.67     33.33          66.67
##        virginica     50     33.33         100.00     33.33         100.00
##             <NA>      0                               0.00         100.00
##            Total    150    100.00         100.00    100.00         100.00

Podemos remover información no importante:

freq(iris$Species,
     report.nas = FALSE, # remove NA information
     totals = FALSE, # remove totals
     cumul = FALSE, # remove cumuls
     headings = FALSE # remove headings
)
## 
##                    Freq       %
## ---------------- ------ -------
##           setosa     50   33.33
##       versicolor     50   33.33
##        virginica     50   33.33

Otra forma de obtener tablas similares:

ctable(
  x = iris$Species,
  y = iris$Size,
  prop = "n", # remove proportions
  totals = FALSE, # remove totals
  headings = FALSE # remove headings
)
## 
## ------------ ------ ----- -------
##                Size   Big   Small
##      Species                     
##       setosa            0      50
##   versicolor           20      30
##    virginica           41       9
## ------------ ------ ----- -------

Gráficos

Usaremos la librería ggplot para hacer los gráficos a lo largo del curso.

Podemos hacer un gráfico de barras:

ggplot(data = iris, aes(x = Size, fill = Size)) +
  geom_bar()

Donde tenemos que especificar la base de datos a utilizar data = iris, la variable categórica x=Size dentro de aes, y el color de cada barra (opcional) fill = Size.

Igualmente, podemos hacer un histograma:

ggplot(data = iris, aes(x = Sepal.Length)) +
  geom_histogram(bins = 20)

Un diagrama de cajas:

ggplot(data = iris, aes(x = Sepal.Length)) +
  geom_boxplot()

Un diagrama de puntos nos puede dar información similar:

dotplot(iris$Sepal.Length ~ iris$Species)

En este caso, se ha diferenciado por la variable Species.

Podemos hacer un scatterplot para explorar la relación entre dos variable:

ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Length)) +
  geom_point()

Y los puntos pueden ser diferenciados por una variable categórica:

ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
  geom_point()

Ahora hagamos un gráfico donde añadimos barras de errores. Usemos la base de datos ToothGrowth:

head(ToothGrowth)
##    len supp dose
## 1  4.2   VC  0.5
## 2 11.5   VC  0.5
## 3  7.3   VC  0.5
## 4  5.8   VC  0.5
## 5  6.4   VC  0.5
## 6 10.0   VC  0.5

Obtenemos la media, desviación estándar y error estándar utilizando la función summarySE implementada aquí:

my_resumen = summarySE(ToothGrowth, measurevar="len", groupvars=c("supp","dose"))

Ploteamos:

ggplot(my_resumen, aes(x=dose, y=len, colour=supp)) + 
    geom_errorbar(aes(ymin=len-se, ymax=len+se), width=.1) +
    geom_line() +
    geom_point()