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)
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.
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
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:
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:
$Size = NA
iris$Size = ifelse(test = iris$Sepal.Length > 6, yes = 'Big', no = 'Small')
iris$Size = as.factor(iris$Size) iris
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
## ------------ ------ ----- -------
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í:
= summarySE(ToothGrowth, measurevar="len", groupvars=c("supp","dose")) my_resumen
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()