Manual R:

Fernanda Cueva del Castillo Campos

Benjamin Perez Zeleny

Josue Manuel Quintero Patino

4 Diciembre 2018

Los archivos necesarios para instalar R, se distribuyen desde el sitio de internet Comprehensive R Archive Network (CRAN), su direccion de internet es la siguiente:

Introducción a R

R es un sistema, con su propio lenguaje de programacion, para realizar analisis estadisticos y graficos creado por Ross Ihaka y Robert Gentleman. Es de acceso abierto, se distribuye gratuitamente y esta disponible en diferentes formas segun el equipo de computo.

R funciona escribiendo comandos en esta ventana -el editor- o en la consola -la ventana justo abajo de ésta. En general, los comandos están compuestos de dos cosas: una función y un objeto.

las funciones son simplemente procesamientos que le pedimos a R, por ejemplo

2 + 2 # o 
## [1] 4
mean(c(1,4,7,3,2)) # o incluso
## [1] 3.4
help(mean)

son ejemplos de funciones. Si están leyendo esto en RStudio, pueden ejecutar cada una de las funciones presionando “ctrl + Enter&rdquo

Normalmente, los resultados de las funciones son asignados a objetos, lo que permite seguir trabajando con esos resultados. Por ejemplo, en vez de 2 + 2, podemos escribir

resultado = 2+2 # (apreten "ctrl + Enter" para crear el objeto)

Esto asigna el resultado de la función “2 + 2” a un objeto llamado “resultado” (¡podríamos haber puesto cualquier nombre!) En la ventana de la derecha (Workspace), RStudio lista los objetos que hemos creado. La gracia es que ahora podemos seguir trabajando con este objeto:

resultado + 1
## [1] 5

es igual a 5, y si lo ejecutan el resultado va a aparecer en la consola. Si ejecutan simplemente “resultado”, R entrega el valor asignado a este objeto.

resultado
## [1] 4

Los objetos pueden ser el resultado de cualquier operación

La función remove() elimina el objeto de su espacio de trabajo. También pueden ocupar ls() para ver una lista de los objetos creados.

ls()
## [1] "resultado"

Librerías de R

Una de las principales virtudes de R es que el código es abierto (open source), lo que permite que sea desarrollado y actualizado permanentemente y que distintas personas puedan extender este programa desarrollando “paquetes” o “librerías” para que R sea capaz de realizar nuevos análisis.

Por ejemplo, una librería que vamos a ocupar bastante es “psych”, que incluye una serie de funciones típicamente utilizadas en investigación en psicología.

Antes de poder utilizar estas funciones en R, es necesario instalar “psych”. Para esto, pueden ir a menú “Packages” en la ventana de abajo a la derecha -al lado de “Help”- presionar el botón “Install Packages” y escribir psych en el cuadro de diálogo. Esto va a descargar la librería e instalarla en su computador. Como siempre, también es posible hacer esto ocupando una función, en este caso:

install.packages("psych") # El progreso de la instalación aparece en la consola.

Luego de que una librería ya está instalada, es necesario abrirla antes de poder ocupar sus funciones. Es una buena idea agregar las librerías utilizadas al comienzo del archivo con los análisis. La función para cargar una librería instalada es

library(psych)

Si abren el archivo de ayuda de esta librería,

help(psych)

pueden ver una descripción de todas las nuevas funciones que ahora están disponibles. Además de funciones, esta librería incluye bases de datos que podemos ocupar como ejemplos. El comando

personalidad = epi.bfi # la librería psych tiene que estar instalada y cargada

crea un nuevo objeto, una base de datos llamada “personalidad”, ocupando los datos disponibles en la librería psych (epi.bfi). La base de datos incluye 13 variables de personalidad medidas en 231 personas. Esta información aparece en la ventana de la derecha (Workspace), donde se listan los objetos que hemos creado en nuestro espacio de trabajo. En RStudio, pueden hacer click en este objeto para ver los datos, o ejecutar

View(personalidad)

Pueden ver más información sobre esta base de datos ejecutando

help(epi.bfi)

Simplemente a modo de ejemplo, ahora podemos pedir un dispersiograma que muestra la relación entre extroversión y apertura a la experiencia. Este comando tiene dos líneas (aunque podría haberlo escrito en una), por lo que antes de ejecutarlo tienen que seleccionar ambas.

with(personalidad,
     plot(bfext,bfopen))

plot of chunk unnamed-chunk-12

El gráfico que aparece en “Plots” muestra que en general las personas más extrovertidas tienen también mayores puntajes de apertura a la experiencia.

with(personalidad,
     plot(bfext,bfopen))

plot of chunk unnamed-chunk-13

está indentado porque esto facilita su interpretación. La primera línea indica que el comando será ejecutado usando la base de datos “personalidad”, y la segunda línea indica que se está pidiendo un gráfico que relacione las variables bfext y bfopen.

Explorando una base de datos

Abrir una base de datos en R puede ser un proceso complicado. En verdad no tiene por qué ser complicado. Típicamente se ocupa Excel para digitar los datos de un estudio. Si bien es posible importar directamente los datos desde Excel, lo más fácil es guardar los datos en formato de texto, porque es el formato preferido de R.

Específicamente, les recomiendo guardar los datos en formato .csv (comma separated values). Todo lo que tienen que hacer es abrir el archivo Excel, poner “guardar como” y seleccionar este formato.

Abran los datos en Excel, y guardénla como alumnos2012.csv (valores separados por comas) en la misma carpeta donde está este archivo (ManualR.R). Es posible abrir el archivo sólo con comandos, pero probablemente la opción más fácil es abrirlo ocupando un menú. Pueden hacer esto en la ventana de “Workspace” presionando el botón “Import Dataset”, o pueden ocupar el siguiente comando para abrir un cuadro de diálogo. Les recomiendo esta segunda opción, porque así queda un registro de la necesidad de abrir una base de datos para continuar. El comando

estudio2012 = read.csv(file.choose(),
                       header = TRUE) # abrir archivo alumnos2012.csv

abre un cuadro de diálogo donde pueden seleccionar el archivo alumnos2012.csv. Les recomiendo que siempre pongan un comentario indicando el nombre del archivo que hay que abrir -en beneficio de sus colaboradores y de ustedes mismos.

estudio2012 = read.csv(file.choose(), # abrir archivo alumnos2012.csv
                       header = TRUE,
                       sep=";")       # Ocupar ; como separador

En detalle, este comando hace lo siguiente:

estudio2012 =            # crea un objeto llamado estudio2012
read.csv(                     # lee un archivo .csv
         file.choose(),       # abre un cuadro de diálogo para elegir un archivo
         header = TRUE        # indica que la primera línea del archivo
         )                    # incluye los nombres de las variables.

Si todo salió bien, ahora tienen un objeto llamado “estudio2012” en su espacio de trabajo. Pueden hacer click sobre este objeto para mirar los datos. El estudio incluye 84 variables medidas en 112 alumnos.

getwd() # obtiene su directorio de trabajo

Si estudio2012.csv está en este directorio, pueden ocupar

estudio2012 = read.csv("alumnos2012.csv", header = TRUE) # o agregando sep = ";"

para cargar el archivo.

El comando

names(estudio2012)

nos entrega los nombres de todas las variables incluidas en la base de datos.

describe(estudio2012)
head(describe(estudio2012)) # solo los primeros casos
##          vars   n  mean    sd median trimmed   mad min max range  skew
## n           1 112 56.50 32.48   56.5   56.50 41.51   1 112   111  0.00
## sitsent*    2 112  2.94  0.98    3.0    2.93  1.48   1   4     3  0.07
## desconf1    3 111  4.47  1.66    5.0    4.54  1.48   1   7     6 -0.51
## desconf2    4 111  3.45  1.80    3.0    3.37  2.97   1   7     6  0.19
## desconf3    5 111  2.81  1.66    2.0    2.64  1.48   1   7     6  0.63
## desconf4    6 109  4.61  1.63    5.0    4.69  1.48   1   7     6 -0.46
##          kurtosis   se
## n           -1.23 3.07
## sitsent*    -1.85 0.09
## desconf1    -0.52 0.16
## desconf2    -1.09 0.17
## desconf3    -0.66 0.16
## desconf4    -0.68 0.16

es una función de la librería “psych” que entrega los descriptivos de cada una de las variables. En cuanto a la calidad de la base de datos lo más importante es revisar el n, que nos indica la cantidad de personas que contestaron cada pregunta (un n de cero en una pregunta probablemente refleja un error en la creación de la base de datos) y el rango de respuesta (min y max). Las preguntas del cuestionario tenían un rango de 1 a 7; claramente habría un error en la base de datos si en alguna pregunta el rango fuera distinto (de 1 a 34, por ejemplo).

Además de esto, describe() entrega una buena cantidad de información descriptiva. El promedio, la mediana, la desviación estándar y el grado de asimetría (skew).

Algunas de las variables tienen un * junto a su nombre. Esto significa que son variables categóricas (porque están codificadas como texto en la base de datos). La variable sitsent (situación sentimental) incluía tres opciones,

table(estudio2012$sitsent)
## 
##                 En una relacion   Es complicado       Soltero/a 
##               1              54               8              49

El promedio de esta variable no tiene ningún sentido. R simplemente asigna un número a cada categoría y la función describe() promedia todas las variables, aunque sean categóricas.

Es común querer transformar una tabla de frecuencia a porcentajes o proporciones. La función prop.table() hace esta transformación a partir de los resultados de table():

x = table(estudio2012$sitsent) # asigna la tabla al objeto x

prop.table(x)   # proporciones por celda
prop.table(x, 1) # proporciones por fila
prop.table(x, 2) # proporciones por columna

Descriptivos.

La información descriptiva entregada con el comando describe() es más que suficiente para tener una buena idea del comportamiento de las variables. En general, vamos a estar interesados en el promedio (mean), la mediana (median) y la desviación estándar (sd). Todos estos indicadores pueden ser solicitados con su propio comando.

En la mayoría de las situaciones vamos a querer referirnos a variables específicas, no a la base de datos completa como hicimos con describe(estudio2012). Como en R podemos tener múltiples bases de datos en nuestro espacio de trabajo, es necesario indicar tanto el nombre de la variable como la base de datos a la que pertenece. Hay dos formas principales para hacer esto, y pueden ocupar cualquiera de las dos dependiendo de lo que sea más fácil para cada situación.

La primera es ocupar el signo $ para indicar base de datos y el nombre de la variable:

mean(estudio2012$insom1, na.rm=TRUE)
## [1] 3.441

En este comando, se pide el promedio de la variable “insom1” en la base de datos “estudio2012”. La función mean() requiere especificar qué hacer con los datos perdidos (la gente que no contesta). na.rm=TRUE simplemente le dice a R que ignore a estos participantes para calcular el promedio.

La otra forma, que ya ocupamos más arriba, es con el comando with().

help(with)

Esto es especialmente útil cuando queremos ocupar varias variables. El comando

insomnio = with(estudio2012,
                data.frame(insom1, insom2, insom3, insom4, insom5))

crea una nueva base de datos -ocupando la función data.frame()- que sólo tiene la información de los ítems de insomnio. Esto permite hacer análisis con la escala completa sin tener que volver a escribir cada variable.

describe(insomnio)
##        vars   n mean   sd median trimmed  mad min max range skew kurtosis
## insom1    1 111 3.44 2.03    3.0    3.30 2.97   1   7     6 0.46    -1.16
## insom2    2 111 3.27 2.00    3.0    3.10 2.97   1   7     6 0.49    -1.09
## insom3    3 110 3.10 2.00    2.5    2.93 2.22   1   7     6 0.48    -1.19
## insom4    4 110 4.08 2.20    4.0    4.10 2.97   1   7     6 0.04    -1.46
## insom5    5 110 3.88 2.27    4.0    3.85 2.97   1   7     6 0.08    -1.47
##          se
## insom1 0.19
## insom2 0.19
## insom3 0.19
## insom4 0.21
## insom5 0.22

Otras funciones descriptivas son:

sd(estudio2012$insom1, na.rm=TRUE)
## [1] 2.035
median(estudio2012$insom1, na.rm=TRUE)
## [1] 3

y summary(), que es más o menos equivalente a describe() pero no requiere cargar una librería.

summary(insomnio)
##      insom1         insom2         insom3        insom4         insom5    
##  Min.   :1.00   Min.   :1.00   Min.   :1.0   Min.   :1.00   Min.   :1.00  
##  1st Qu.:2.00   1st Qu.:2.00   1st Qu.:1.0   1st Qu.:2.00   1st Qu.:2.00  
##  Median :3.00   Median :3.00   Median :2.5   Median :4.00   Median :4.00  
##  Mean   :3.44   Mean   :3.27   Mean   :3.1   Mean   :4.08   Mean   :3.88  
##  3rd Qu.:5.00   3rd Qu.:5.00   3rd Qu.:5.0   3rd Qu.:6.00   3rd Qu.:6.00  
##  Max.   :7.00   Max.   :7.00   Max.   :7.0   Max.   :7.00   Max.   :7.00  
##  NA's   :1      NA's   :1      NA's   :2     NA's   :2      NA's   :2

Tablas y gráficos de frecuencia.

Además de indicadores descriptivos básicos como el promedio y la desviación estándar, muchas veces nos interesa revisar la distribución de una variable. El item insom1 es un buen indicador general de insomnio: “Generalmente me cuesta conciliar el sueño o despierto muchas veces en la noche”. A partir de los descriptivos,

describe(estudio2012$insom1)
##   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
## 1    1 111 3.44 2.03      3     3.3 2.97   1   7     6 0.46    -1.16 0.19

podemos observar que los niveles de insomnio están aproximadamente en el punto medio de la escala (M = 3.44), que hay una variación considerable entre los participantes (SD = 2.03), y que la distribución es algo asimétrica: la mayoría de los participantes están a la izquierda de la distribución (Skew = .46). Esto es visible también a partir de una simple tabla de frecuencia:

table(estudio2012$insom1)
## 
##  1  2  3  4  5  6  7 
## 22 24 21 10  7 15 12

En esta tabla, queda claro que hay una importante variación en el grado de acuerdo con este ítem, aunque hay más personas en desacuerdo que de acuerdo. En vez de mirar un montón de números, podemos pedirle a R que nos dibuje un gráfico. El comando

barplot(table(estudio2012$insom1))

plot of chunk unnamed-chunk-25

dibuja un gráfico de barras con la información de la tabla que pedimos antes. Además de los datos para el gráfico, podemos agregar un título y otras cosas.

Abajo vamos a pedir el mismo gráfico, pero agregando opciones para mejorar la presentación:

barplot(table(estudio2012$insom1),      # datos del gráfico
        main="Insomnio en estudiantes", # título principal
        xlab="Grado de acuerdo",        # etiqueta eje horizontal
        ylab="Frecuencia",              # etiqueta eje vertical
        col="lightblue"                 # cambio de color. ver colors() 
        )

plot of chunk unnamed-chunk-26

Estas opciones están disponibles, con la misma sintaxis, para todo tipo de gráficos. Si están ocupando RStudio, pueden guardar el gráfico como imagen, pdf, o simplemente copiarlo en la memoria (para pegarlo en Word, por ejemplo) seleccionando la opción correspondiente en el botón “Export”. Si apretan el botón “Zoom”, el gráfico se abre en una nueva ventana, lo que puede ser útil para cambiar sus dimensiones. En ese caso hay que hacer click derecho para copiarlo o exportarlo.

Cuando las variables son continuas, hacer una tabla de frecuencia es poco práctico y no entrega información útil. Consideremos por ejemplo el promedio de todos los ítems de insomnio:

estudio2012$insom = with(insomnio,
                         (insom1 + insom2 + insom3 + insom4 + insom5)/5)

describe(estudio2012$insom)
##   vars   n mean   sd median trimmed  mad min max range skew kurtosis   se
## 1    1 108 3.57 1.43    3.4    3.51 1.48   1   7     6 0.32    -0.67 0.14

Esta escala sigue siendo de 1 a 7, pero ahora tiene valores relativamente continuos. Por este motivo, hacer una tabla de frecuencia es una mala idea:

table(estudio2012$insom)
## 
##   1 1.4 1.6 1.8   2 2.2 2.4 2.6 2.8   3 3.2 3.4 3.6 3.8   4 4.2 4.4 4.6 
##   1   6   4   4   5   4   4   4   9   3   4   9   1   8   5   5   3   3 
## 4.8   5 5.2 5.4 5.8 6.2 6.4 6.6 6.8   7 
##   1   7   8   2   1   2   1   2   1   1
barplot(table(estudio2012$insom))

plot of chunk unnamed-chunk-28

La solución es hacer un histograma. Los histogramas grafican una tabla de intervalos, donde queremos saber cuántas personas tienen puntajes entre 1 y 2, 2 y 3, etc. El comando es simplemente:

hist(estudio2012$insom)

plot of chunk unnamed-chunk-29

Al igual que en los gráficos anteriores, podemos agregar opciones para mejorar la presentación.

hist(estudio2012$insom,                         # datos del gráfico
     main="Histograma escala de Insomnio",      # título principal
     xlab="Grado de acuerdo",                   # etiqueta eje horizontal
     ylab="Frecuencia",                         # etiqueta eje vertical
     col="lightgray"                            # cambio de color
     )

plot of chunk unnamed-chunk-30

¿Por qué no ocupamos desde un comienzo hist() para hacer el gráfico de frecuencias? Los histogramas están diseñados para variables continuas (por eso las barras están juntas), y desgraciadamente R se confunde cuando le ponemos una variable discreta, como el primer item de la escala.

hist(estudio2012$insom1)

plot of chunk unnamed-chunk-31

dibuja una situación muy distinta, y menos preocupante, que la situación real:

barplot(table(estudio2012$insom1))

plot of chunk unnamed-chunk-32

De todas formas, esto es un error con la función hist(), que está sumando a las personas que marcan 1 y las que marcan 2 en la primera barra. Espero que lo solucionen pronto. La función truehist() de la librería MASS no tiene este problema.

El punto que hay que recordar es que los histogramas son para variables continuas, no para variables discretas.

Medidas de tendencia central

Podemos ocupar el mismo comando que ocupamos antes (barplot) para hacer un gráfico con los promedios de múltiples variables. Por ejemplo,

colMeans(insomnio, na.rm=TRUE) # imprime una tabla con los promedios de los ítems
## insom1 insom2 insom3 insom4 insom5 
##  3.441  3.270  3.100  4.082  3.882
barplot(colMeans(insomnio, na.rm=TRUE)) # grafica esta tabla

plot of chunk unnamed-chunk-33

Simplemente, la función barplot() saca los datos de una tabla de promedios en vez de una tabla de frecuencia.

Abajo les copio un comando para el mismo gráfico, pero con mejor presentación. Como ven, indentar y poner comentarios es más útil cuando los comandos son más largos.

barplot(colMeans(insomnio, na.rm=TRUE),
        main="Promedios itemes escala insomnio", # título principal

        ylab="Grado de acuerdo",                 # etiqueta eje vertical

        names=c("Item 1", "Item 2", 
                "Item 3", "Item 4", "Item 5"),   # Nombres para las variables

        col=rainbow(20, alpha = .6),             # R incluye también paletas de color. 
                                                 # pueden ejecutar help(rainbow)
                                                 # para más información

        ylim=c(1,7),                             # la pregunta era de 1 a 7.
        xpd=F)                                   # Es necesario para que las barras no comiencen en el valor 0

plot of chunk unnamed-chunk-34

Si bien muchas veces basta con graficar los promedios, también es bueno incluir más información -dispersión y asimetría, por ejemplo. Una forma simple de hacerlo es con un boxplot. R tiene un comando especialmente para este tipo de gráficos:

boxplot(insomnio)

plot of chunk unnamed-chunk-35

Simple, ¿cierto? Abajo lo copio con algunas opciones para mejorar la presentación.

boxplot(insomnio, 
        main="Itemes escala insomnio",
        ylab="Grado de acuerdo",
        names=c("Item 1", "Item 2", "Item 3", "Item 4", "Item 5"),
        col=rainbow(5, alpha = .3)
        )

plot of chunk unnamed-chunk-36

Si no hubiéramos hecho la base de datos con los ítems de insomnio, el comando sería un poco más largo. Abajo está hecho para los ítems de ansiedad ante las evaluaciones:

with(estudio2012, 
     boxplot(data.frame(ansev1, ansev2, ansev3, ansev4, ansev5),
             main="Ansiedad ante evaluaciones",
             sub="Frecuencia de distintas conductas en periodos de evaluacion",
             ylab="Frecuencia conductas",
             names=c("Dificultad dormir", "Despertar frecuente", 
                     "Irritable", "Dolores", "Incapacidad de desconectarse"),
             col=rainbow(5, alpha = .3))
     )

plot of chunk unnamed-chunk-37

Esta vez pusimos nombres descriptivos a los distintos ítems, por lo que probablemente es necesario abrir el gráfico en una nueva ventana para verlos bien (apretando Zoom).

Comparando distintos grupos.

La base de datos alumnos2012.csv que importamos incluía una serie de variables que identifican distintos grupos a los que pertenecen las personas. Por ejemplo, si son hombres o mujeres, o su situación sentimental.

table(estudio2012$genero)
## 
##            Femenino Masculino 
##         3        82        27
table(estudio2012$sitsent)
## 
##                 En una relacion   Es complicado       Soltero/a 
##               1              54               8              49

Estas variables están codificadas como texto, y en los casos en que alguien no contestó estas preguntas (3 personas no indicaron su género y 1 persona no indicó su situación sentimental) los datos tienen simplemente una celda vacía.

Todo esto significa que tenemos que hacer algo de trabajo antes de poder ocupar estas variables para nuestros análisis. Por ejemplo, si hacemos un gráfico de barras para situación sentimental,

barplot(table(estudio2012$sitsent))

plot of chunk unnamed-chunk-39

Vemos que hay una barra extra con la persona que prefirió no contestar esta pregunta.

Las variables categóricas son importantes y las vamos a ocupar para una serie de análisis, por lo que vale la pena hacer un procesamiento preliminar de los datos.

El siguiente comando crea una nueva variable -sitsentf- en la base de datos estudio2012 donde se seleccionan solamente los grupos que nos interesan.

estudio2012$sitsentf = factor(estudio2012$sitsent,

                              # Esto crea una variable nueva a partir de sitsent,
                              # considerándola como un factor (una variable categórica)
                              # por eso le puse el nombre sitsentf

                              levels=c("En una relacion",
                                       "Es complicado", "Soltero/a"))

                              # Esto selecciona los niveles que nos interesan, es decir,
                              # sin incluir las personas que no contestaron.

El comando

estudio2012$sitsentf
##   [1] En una relacion En una relacion Soltero/a       Soltero/a      
##   [5] Soltero/a       Soltero/a       Es complicado   Soltero/a      
##   [9] Soltero/a       En una relacion Soltero/a       En una relacion
##  [13] En una relacion Soltero/a       En una relacion En una relacion
##  [17] Soltero/a       En una relacion En una relacion Soltero/a      
##  [21] Es complicado   Soltero/a       Soltero/a       Soltero/a      
##  [25] En una relacion En una relacion Es complicado   En una relacion
##  [29] En una relacion En una relacion En una relacion Soltero/a      
##  [33] Es complicado   Soltero/a       En una relacion En una relacion
##  [37] En una relacion Soltero/a       En una relacion En una relacion
##  [41] En una relacion Soltero/a       Es complicado   Es complicado  
##  [45] Soltero/a       Soltero/a       Es complicado   En una relacion
##  [49] Soltero/a       Soltero/a       Soltero/a       <NA>           
##  [53] Soltero/a       Soltero/a       Soltero/a       Soltero/a      
##  [57] En una relacion En una relacion Soltero/a       Soltero/a      
##  [61] En una relacion En una relacion En una relacion Soltero/a      
##  [65] En una relacion Soltero/a       Soltero/a       En una relacion
##  [69] Soltero/a       En una relacion Soltero/a       En una relacion
##  [73] Soltero/a       Soltero/a       En una relacion En una relacion
##  [77] Soltero/a       En una relacion En una relacion Soltero/a      
##  [81] En una relacion En una relacion En una relacion Soltero/a      
##  [85] En una relacion En una relacion Soltero/a       En una relacion
##  [89] En una relacion Soltero/a       En una relacion Soltero/a      
##  [93] En una relacion Soltero/a       En una relacion En una relacion
##  [97] En una relacion En una relacion Soltero/a       En una relacion
## [101] Soltero/a       En una relacion Es complicado   Soltero/a      
## [105] En una relacion Soltero/a       En una relacion Soltero/a      
## [109] En una relacion Soltero/a       Soltero/a       En una relacion
## Levels: En una relacion Es complicado Soltero/a

imprime todos los datos de esta variable en la consola. El participante 52 ahora tiene en vez de “”.

estudio2012[52,]$sitsentf # muestra la situación sentimental del participante 52 (NA)
## [1] <NA>
## Levels: En una relacion Es complicado Soltero/a

Cuando pedimos la tabla, ahora ya no incluye a este participante:

table(estudio2012$sitsentf)
## 
## En una relacion   Es complicado       Soltero/a 
##              54               8              49

La base de datos,

names(estudio2012)
##  [1] "n"        "sitsent"  "desconf1" "desconf2" "desconf3" "desconf4"
##  [7] "desconf5" "vidau1"   "vidau2"   "vidau3"   "vidau4"   "vidau5"  
## [13] "starb1"   "starb2"   "starb3"   "starb4"   "starb5"   "ayude1"  
## [19] "ayude2"   "ayude3"   "ayude4"   "ayude5"   "abor1"    "abor2"   
## [25] "abor3"    "abor4"    "abor5"    "tolsex1"  "tolsex2"  "tolsex3" 
## [31] "tolsex4"  "tolsex5"  "intex1"   "intex2"   "intex3"   "intex4"  
## [37] "intex5"   "acogex1"  "acogex2"  "acogex3"  "acogex4"  "acogex5" 
## [43] "ansev1"   "ansev2"   "ansev3"   "ansev4"   "ansev5"   "insom1"  
## [49] "insom2"   "insom3"   "insom4"   "insom5"   "intui1"   "intui2"  
## [55] "intui3"   "intui4"   "intui5"   "valma1"   "valma2"   "valma3"  
## [61] "valma4"   "valma5"   "streu1"   "streu2"   "streu3"   "streu4"  
## [67] "streu5"   "intay1"   "intay2"   "intay3"   "intay4"   "intay5"  
## [73] "tprej1"   "tprej2"   "tprej3"   "tprej4"   "tprej5"   "genero"  
## [79] "zodiaco"  "orienpol" "mencion"  "votop"    "herman"   "lugar"   
## [85] "insom"    "sitsentf"

ahora incluye al final una nueva variable “sitsentf”. Esta variable está en la base de datos estudio2012 que tenemos en nuestro espacio de trabajo. No en el archivo alumnos2012.csv.

Vamos a hacer el mismo procesamiento con genero

table(estudio2012$genero)
## 
##            Femenino Masculino 
##         3        82        27
estudio2012$generof = factor(estudio2012$genero,
                             levels=c("Femenino","Masculino"),
                             labels=c("Mujer","Hombre"))
                             # con "labels" podemos cambiar los nombres de las 
                             # categorías

table(estudio2012$generof)
## 
##  Mujer Hombre 
##     82     27

y con orientación política

table(estudio2012$orienpol)
## 
##                            Centro   Centro Derecha Centro Izquierda 
##                2                8               18               20 
##          Derecha    Independiente        Izquierda          Ninguna 
##               19                8               18               19
estudio2012$orienpolf = factor(estudio2012$orienpol,

                               # Al seleccionar los niveles, podemos hacer varias cosas
                               # con esta variable: ordenarlos de izquierda a derecha,
                               # omitir los independientes y los que dicen "ninguna",
                               # y omitir a los que no contestaron. Todos estos van a 
                               # quedar como NA. (por supuesto, para otros análisis
                               # podríamos querer mantener a los independientes y a los
                               # que no se identifican)

                               levels=c("Izquierda","Centro Izquierda","Centro",
                                        "Centro Derecha","Derecha"))

table(estudio2012$orienpolf)
## 
##        Izquierda Centro Izquierda           Centro   Centro Derecha 
##               18               20                8               18 
##          Derecha 
##               19

Descripción de la muestra.

Una de las cosas más simples que podemos querer hacer con este tipo de variables es describir la cantidad de personas que pertenecen a cada grupo, por ejemplo a través de gráficos de barra

barplot(table(estudio2012$orienpolf),
        col=rainbow(30, alpha=.6))

plot of chunk unnamed-chunk-47

Si quieren hacer un gráfico de torta, el comando es pie()

pie(table(estudio2012$sitsentf),
    main="Situacion sentimental estudiantes 2012",
    col=terrain.colors(5, alpha = .6),
    radius = .8)

plot of chunk unnamed-chunk-48

También es común querer cruzar dos tablas de frecuencia (crosstabs), lo que se hace simplemente agregando otra variable al comando table():

table(estudio2012$sitsentf,estudio2012$generof)
##                  
##                   Mujer Hombre
##   En una relacion    44      9
##   Es complicado       4      4
##   Soltero/a          33     14

¿Cómo podemos graficar esto? Una buena opción es ocupar nuevamente un gráfico de barras.

barplot(table(estudio2012$sitsentf, estudio2012$generof),
        legend=TRUE, # agrega automáticamente una leyenda
        col=heat.colors(3, alpha=.6)
        )

plot of chunk unnamed-chunk-50

Para hacer que cada grupo tenga una barra, hay que ocupar el argumento “beside”.

barplot(table(estudio2012$sitsentf, estudio2012$generof),
        legend=TRUE, 
        col=heat.colors(3, alpha=.6),
        beside=TRUE  # esta opción hace que cada grupo tenga una barra
        )

plot of chunk unnamed-chunk-51

Por último, es común querer comparar los grupos en una o más variables continuas, como querer ver los niveles de insomnio separado por hombres y mujeres. En un boxplot, podemos ocupar el signo ~ para indicar que se quiere separar por grupos. En general, ~ significa “predicho por” en R. (En mi computador, tengo que presionar alt+ñ para escribir este tilde, pero eso va a depender de la configuración de su teclado).

boxplot(insom1~sitsentf, data=estudio2012,
        main="Problemas de insomnio en relaciones complicadas",
        ylab="Insomnio",
        col=heat.colors(3,alpha=.6))

plot of chunk unnamed-chunk-52

Conclusiones

R es una excelente y poderosa herramienta para el procesamiento de datos, que nos puede ayudar el ambito academico, de investigacion y profesional sin necesidad de pagar costososas licencias, ademas de que siempre se est desarrollando y esta actualiado.

Bibliografia

R para Principiantes; Emmanuel Paradis; Institut des Sciencies de'l Evolution, Universit Montpellier II; France.

Josef Cohen and Jeremiah Y. Cohen, Statistics and Data with R, an applied approach through examples.

RMichael Crawley, The R book.

https://es.wikipedia.org/Xwiki/RStudio (https://es.wikipedia.org/Xwiki/RStudio)

https://sites.google.com/site/mab405investigacion/documentos

https://cran.rproject.org/ (https://cran.rproject.org/)