Matrices vrs. Data Frames

Matrices

Anteriormente, aprendimos a instalar paquetes y a importar bases de datos. Las matrices por lo general sólo almacenan un tipo de datos mientras que las data frames puede almacenar varios tipos de datos.

m <-matrix(1:20, ncol=2)
m
##       [,1] [,2]
##  [1,]    1   11
##  [2,]    2   12
##  [3,]    3   13
##  [4,]    4   14
##  [5,]    5   15
##  [6,]    6   16
##  [7,]    7   17
##  [8,]    8   18
##  [9,]    9   19
## [10,]   10   20

En general, los datos de una matriz son numéricos. R es muy potente para hacer operaciones con matrices.

Para poder llegar a ver los elementos individuales de una matriz, tenemos que usar los corchetes y revisar por ejemplo el elemento 5 de la columna 1

m[5,1] 
## [1] 5
m[5,2]
## [1] 15
m[, 1] # si queremos todas las filas, no ponemos nada
##  [1]  1  2  3  4  5  6  7  8  9 10
m[1, ] # si queremos todas las columnas no ponemos nada
## [1]  1 11
m[1:2,]
##      [,1] [,2]
## [1,]    1   11
## [2,]    2   12
m[c(1,5, 6),]
##      [,1] [,2]
## [1,]    1   11
## [2,]    5   15
## [3,]    6   16
n<-m[1,]

class(m)
## [1] "matrix"
class(n)
## [1] "integer"

Estos resultados se pueden asignar también a nuevos objetos, lo cual es muy útil cuando estemos filtrando caso.

Dataframes

Vamos a instalar la librería “MASS” que nos da acceso a un grupo amplio de bases de datos que nos ayudaran a revisar y analizar algunas técnicas sencillas.

install.packages("MASS", repos = "http://cran.us.r-project.org", dependencies = TRUE)
## 
## The downloaded binary packages are in
##  /var/folders/fr/mw1x21js54367mjdhqsjfwqm0000gn/T//RtmpbZwqIB/downloaded_packages
library(MASS)
## Warning: package 'MASS' was built under R version 3.3.2

Vamos a llamar a la base “painters” que contiene información sobre pintores del siglo XVIII

data()
data(painters)
class(painters)
## [1] "data.frame"

Para revisar el contenido de un data frame podemos usar, como lo hicimos en el ejercicio de la ENIGH, el formado basededatos$var o usar corchete, checa como estas tres formas tan el mismo resultado

painters$School
##  [1] A A A A A A A A A A B B B B B B C C C C C C D D D D D D D D D D E E E
## [36] E E E E F F F F G G G G G G G H H H H
## Levels: A B C D E F G H
painters[["School"]]  # ¡Ojo con las comillas! 
##  [1] A A A A A A A A A A B B B B B B C C C C C C D D D D D D D D D D E E E
## [36] E E E E F F F F G G G G G G G H H H H
## Levels: A B C D E F G H
painters[,5]  
##  [1] A A A A A A A A A A B B B B B B C C C C C C D D D D D D D D D D E E E
## [36] E E E E F F F F G G G G G G G H H H H
## Levels: A B C D E F G H

Vamos a pedir cosas más especificas y podemos seleccionar observaciones o files

painters[painters$School=="A",]
##                 Composition Drawing Colour Expression School
## Da Udine                 10       8     16          3      A
## Da Vinci                 15      16      4         14      A
## Del Piombo                8      13     16          7      A
## Del Sarto                12      16      9          8      A
## Fr. Penni                 0      15      8          0      A
## Guilio Romano            15      16      4         14      A
## Michelangelo              8      17      4          8      A
## Perino del Vaga          15      16      7          6      A
## Perugino                  4      12     10          4      A
## Raphael                  17      18     12         18      A
painters[(painters$School=="A" & painters$Composition>10 ),]
##                 Composition Drawing Colour Expression School
## Da Vinci                 15      16      4         14      A
## Del Sarto                12      16      9          8      A
## Guilio Romano            15      16      4         14      A
## Perino del Vaga          15      16      7          6      A
## Raphael                  17      18     12         18      A
subset1<- painters[(painters$School=="A" & painters$Composition>10 ),]

También podemos seleccionar columnas

painters[, c("Colour", "Expression")]
##                 Colour Expression
## Da Udine            16          3
## Da Vinci             4         14
## Del Piombo          16          7
## Del Sarto            9          8
## Fr. Penni            8          0
## Guilio Romano        4         14
## Michelangelo         4          8
## Perino del Vaga      7          6
## Perugino            10          4
## Raphael             12         18
## F. Zucarro           8          8
## Fr. Salviata         8          8
## Parmigiano           6          6
## Primaticcio          7         10
## T. Zucarro          10          9
## Volterra             5          8
## Barocci              6         10
## Cortona             12          6
## Josepin              6          2
## L. Jordaens          9          6
## Testa                0          6
## Vanius              12         13
## Bassano             17          0
## Bellini             14          0
## Giorgione           18          4
## Murillo             15          4
## Palma Giovane       14          6
## Palma Vecchio       16          0
## Pordenone           17          5
## Tintoretto          16          4
## Titian              18          6
## Veronese            16          3
## Albani              10          6
## Caravaggio          16          0
## Corregio            15         12
## Domenichino          9         17
## Guercino            10          4
## Lanfranco           10          5
## The Carraci         13         13
## Durer               10          8
## Holbein             16         13
## Pourbus              6          6
## Van Leyden           6          4
## Diepenbeck          14          6
## J. Jordaens         16          6
## Otho Venius         10         10
## Rembrandt           17         12
## Rubens              17         17
## Teniers             13          6
## Van Dyck            17         13
## Bourdon              8          4
## Le Brun              8         16
## Le Suer              4         15
## Poussin              6         15
subset2<- painters[, c("Colour", "Expression")]

podemos combinar los dos tipos de selección

painters[painters$School=="A", c("Colour", "Expression")]
##                 Colour Expression
## Da Udine            16          3
## Da Vinci             4         14
## Del Piombo          16          7
## Del Sarto            9          8
## Fr. Penni            8          0
## Guilio Romano        4         14
## Michelangelo         4          8
## Perino del Vaga      7          6
## Perugino            10          4
## Raphael             12         18
subset4<- painters[, c("Colour", "Expression")]

Vamos a revisar cuántos pintores estudiaron en cada escuela. Si recuerdas, eso se puede hacer con el comando table. Como estamos trabajando

table(painters$School)
## 
##  A  B  C  D  E  F  G  H 
## 10  6  6 10  7  4  7  4

Este resultado lo podemos asignar a un objeto nuevo

freq.school<-table(painters$School)

El tenerlo como un objeto nos sirve sobre todo porque podemos aplicarle funciones a esta tabla de frecuencias, las funciones m´ás importantes que podemos aplicar son las gráficas

plot(freq.school) # el gráfico más sencillo 

barplot(freq.school) # gráficos de barra

pie(freq.school) # gráfico de pastel

Vamos a modificar ligeramente los colores

barplot(freq.school, col=gray(0:8/8)) # gráficos de barra con escala de grises de oscuro a claros, (8 categorías)

barplot(freq.school, col=gray(8:0/8)) # gráficos de barra con escala de grises de claro a oscuros

barplot(freq.school, col=rainbow(8)) # gráfico de barras () ponemos el número de categorías

barplot(freq.school, col=heat.colors(8)) # gráfico de barras () ponemos el número de categorías

También podemos hacer nuestro propio vector de colores, para la paleta de nombres de colores que usa R, revisar http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf

my_colors1<-c("lightblue","lightblue1", "lightblue2", "lightblue3", "lightblue4", "lightcyan4", "lightcyan3", "lightcyan2")

my_colors2<-c("mediumorchid","mediumorchid1", "mediumorchid2", "mediumorchid3", "mediumorchid4", "mediumpurple4", "mediumpurple3", "mediumpurple2")

barplot(freq.school, col=my_colors1) # gráficos de barra con colores personalizados 1

barplot(freq.school, col=my_colors2) # gráficos de barra con colores personalizados 2

Para poner título

barplot(freq.school, col=gray.colors(8)) 
title(main = list("Escuelas de pintores", font = 4))

# border :
barplot(freq.school, border = "dark blue", col=my_colors2,  legend = rownames(freq.school))

Para hacer las barras horizontales le ponemos la opción “horiz=TRUE”

barplot(freq.school, border = "dark blue", col=my_colors2,  legend = rownames(freq.school), horiz=TRUE )

Gráficos bivariados

Igual hacemos un objeto con las frecuencias de una tabla, pero en este caso será una tabla bivariada. Vamos a cargar otra base de datos. Nuestra base de pintores sólo tenía una sóla variable categórica.

data()
data("Cars93")
freq.cars<-table(Cars93$AirBags, Cars93$Type)
freq.cars
##                     
##                      Compact Large Midsize Small Sporty Van
##   Driver & Passenger       2     4       7     0      3   0
##   Driver only              9     7      11     5      8   3
##   None                     5     0       4    16      3   6

Con este objeto vamos a graficar.

Para barras apiladas

barplot(freq.cars, main="Carros según bolsas de aire y tipo",
                   col=heat.colors(3),
                      legend = rownames(freq.cars))

Para barras agrupadas Para estos gráficos usamos el mismo código, pero le activamos la opción “beside”

barplot(freq.cars, main="Carros según bolsas de aire y tipo",
                   col=heat.colors(3),
                     legend = rownames(freq.cars),
                   beside=TRUE )

Para las barras apiladas es útil que lo veamos en términos de proporciones.

Para eso usabmos “prop.table” la opción 1, es para que nos dé las proporciones por fila la opción 2, es para que nos dé las proporciones por columna Sin opción, da la proporción para el total de observaciones

prop.cars<-prop.table(freq.cars,2)
prop.cars
##                     
##                        Compact     Large   Midsize     Small    Sporty
##   Driver & Passenger 0.1250000 0.3636364 0.3181818 0.0000000 0.2142857
##   Driver only        0.5625000 0.6363636 0.5000000 0.2380952 0.5714286
##   None               0.3125000 0.0000000 0.1818182 0.7619048 0.2142857
##                     
##                            Van
##   Driver & Passenger 0.0000000
##   Driver only        0.3333333
##   None               0.6666667
barplot(prop.cars, main="Carros según bolsas de aire y tipo",
                   col=heat.colors(3),
                      legend = rownames(prop.cars))