Tutorial R

May 8, 2018 | Author: juanmiguel1000 | Category: Histogram, Computer File, Computer Network, Databases


Comments



Description

Tutorial R: Métodos de Investigación Cuantitativa en Ciencias Sociales Pablo De Tezanos-Pinto C. [email protected] 2012-2014 Para este tutorial vamos a ocupar RStudio (disponbile en http://www.rstudio.com/), porque facilita un poco las cosas. En todo caso, los comandos funcionan exactamente igual en cualquier programa que ocupe R. La idea es que lean esto directamente en RStudio para que puedan ir ejecutando los comandos a medida que avanzamos. Si bien no es necesario, puede ser una buena idea que vayan escribiendo en este mismo archivo sus comentarios, e intentando hacer los análisis por su cuenta con otras variables o con su propia base de datos. Configuración de RStudio. Depediendo de la configuración de su computador, puede que no alcancen a ver bien este texto. En ese caso, les recomiendo ajustar esta ventana con el mouse y cambiar el tamaño de la letra (en Tools -> Options -> Appearance). También pueden aprovechar de cambiar otra configuración importante, en Tools -> Options -> General. “Save workspace to .RData on exit” dice “Ask”. Debería decir “Always”. De esta forma, los objetos que vamos a ir creando van a quedar guardados para la próxima vez que abran el programa. Introducción a R 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” (en Mac, es “Command + Enter”) en la línea correspondiente -por ejemplo en la línea 18 para calcular 2 + 2. El resultado de la función va a aparecer abajo, en la consola, con la excepción de “help()”, que abre el archivo de ayuda de R, en este caso con información sobre la función “mean”. La idea es que a medida que avanzan en este tutorial vayan ejecutando todas las funciones que estamos revisando. 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, incluyendo los resultados de análisis estadísticos, bases de datos, tablas, listas y variables. 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" Un detalle importante… en R las mayúsculas y minúsculas no son lo mismo. Resultado # y ## Error: object 'Resultado' not found Help(mean) ## Error: could not find function "Help" van a generar un mensaje de error en la consola, porque no son lo mismo que “resultado” y “help(mean)”. 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)) 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. Antes de terminar esta sección me gustaría notar la importancia de escribir una sintaxis ordenada. Obviamente, a R le da exactamente lo mismo si la sintaxis está ordenada o no. ¡Pero R no es el único que tiene que leerla! Para los lectores humanos -para ustedes mismos y para las personas con quienes colaboran- es mucho más fácil entender una sintaxis ordenada: a) Escojan nombres amigables para las variables y los objetos. Es decir, nombres que sean cortos pero que sean legibles y describan de qué estamos hablando. Por ejemplo, “bfext” es un nombre relativamente bueno (se refiere al constructo extroversión en el contexto de una medición de personalidad “big five”); bffac3 (factor 3 de la medición big-five), en cambio, es malo. Aunque puedo imaginarme peores nombres. b) Ocupen generosamente la opción de hacer comentarios en la sintaxis. Cualquier texto que sea precedido por un signo # es ignorado por R, pero puede ser tremendamente útil para quien está leyendo y tratando de entender la sintaxis. c) Indenten los comandos de forma que sean más fáciles de entender. El ejemplo del gráfico de dispersión que acabamos de hacer with(personalidad, plot(bfext,bfopen)) 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. Para comandos más complicados, con varias líneas, indentar hace una diferencia mucho más grande. Por consenso, y porque ocupar “Tab” tiene comportamientos diferentes en distintos editores de texto, normalmente se ocupa la barra espacio para indentar. Explorando una base de datos Abrir una base de datos en R puede ser un proceso complicado, pero para eso está este tutorial. 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. En este tutorial incluye una base de datos en Excel llamada alumnos2012.xlsx, que tiene los datos de un estudio hecho con los alumnos del curso durante el año 2012, en que grupos de alumnos generaron varias preguntas para medir distintos constructos. Incluye temas tan diversos como las actitudes hacia el aborto, hacia el Starbucks en la universidad y el horóscopo de cada alumno. El archivo alumnos2012.pdf contiene más información sobre esta base de datos, que vamos a ocupar como ejemplo a lo largo de este tutorial. Abran los datos en Excel, y guardénla como alumnos2012.csv (valores separados por comas) en la misma carpeta donde está este archivo (Tutorial R.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. Dependiendo de la configuración del computador, es posible que el archivo está separado por ; en vez de comas (porque en español se ocupa coma para indicar decimales). En este caso, hay que explicitar el separador. 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. Una buena práctica es tener este archivo (con los comandos) y la base de datos en la misma carpeta. Pueden definir esta misma carpeta como su directorio de trabajo (“working directory”), lo que permite leer y escribir archivos sin tener que poner la dirección completa. 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. Un detalle técnico… Si se fijan, el archivo se llamaba “alumnos2012” pero el objeto que creamos se llama “estudio2012”. Esto es precisamente para que quede claro que el archivo con los datos y la base de datos que creamos en R son cosas distintas. Pueden modificar todo lo que quieran el objeto de R, y eso no va a cambiar el archivo original con los datos. ¡Esto es tremendamente bueno para su paz mental! En caso de cualquier problema, simplemente pueden volver a cargar los datos originales. El comando names(estudio2012) nos entrega los nombres de todas las variables incluidas en la base de datos. Probablemente nadie se va a aprender de memoria todos los nombres de las variables, por lo que names() es un comando tremendamente útil. Una de las primeras cosas que debiéramos hacer cuando abrimos una base de datos es revisar los descriptivos para cada una de las variables. Más allá de ser una primera mirada a los resultados del estudio, esto permite identificar cualquier error en la digitación o en la construcción de 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 aunque sean categóricas. por ejemplo).table(x.441 En este comando. Algunas de las variables tienen un * junto a su nombre. Además de esto. table(estudio2012$sitsent) ## ## En una relacion Es complicado Soltero/a ## 1 54 8 49 El promedio de esta variable no tiene ningún sentido. En la mayoría de las situaciones vamos a querer referirnos a variables específicas. la desviación estándar y el grado de asimetría (skew). y pueden ocupar cualquiera de las dos dependiendo de lo que sea más fácil para cada situación. Como en R podemos tener múltiples bases de datos en nuestro espacio de trabajo. En general. La otra forma. La información descriptiva entregada con el comando describe() es más que suficiente para tener una buena idea del comportamiento de las variables. El promedio. la mediana (median) y la desviación estándar (sd). es con el comando with(). 1) # proporciones por fila prop.base de datos) y el rango de respuesta (min y max).rm=TRUE simplemente le dice a R que ignore a estos participantes para calcular el promedio. claramente habría un error en la base de datos si en alguna pregunta el rango fuera distinto (de 1 a 34. no a la base de datos completa como hicimos con describe(estudio2012). La función prop. na. La función mean() requiere especificar qué hacer con los datos perdidos (la gente que no contesta).rm=TRUE) ## [1] 3. vamos a estar interesados en el promedio (mean). que ya ocupamos más arriba. na. Esto significa que son variables categóricas (porque están codificadas como texto en la base de datos). Es común querer transformar una tabla de frecuencia a porcentajes o proporciones.table(x) # proporciones por celda prop.table() hace esta transformación a partir de los resultados de table(): x = table(estudio2012$sitsent) # asigna la tabla al objeto x prop. la mediana. La primera es ocupar el signo $ para indicar base de datos y el nombre de la variable: mean(estudio2012$insom1. Hay dos formas principales para hacer esto. es necesario indicar tanto el nombre de la variable como la base de datos a la que pertenece. R simplemente asigna un número a cada categoría y la función describe() promedia todas las variables. Las preguntas del cuestionario tenían un rango de 1 a 7. help(with) Esto es especialmente útil cuando queremos ocupar varias variables. describe() entrega una buena cantidad de información descriptiva.table(x. La variable sitsent (situación sentimental) incluía tres opciones. 2) # proporciones por columna Descriptivos. El comando . se pide el promedio de la variable “insom1” en la base de datos “estudio2012”. Todos estos indicadores pueden ser solicitados con su propio comando. 08 - 1.00 Max. :1. que es más o menos equivalente a describe() pero no requiere cargar una librería.85 2.insomnio = with(estudio2012.5 Median :4.00 2.00 Min.:2.97 1 7 6 0.00 ## Median :3.10 2. :1.16 ## insom2 2 111 3.frame(insom1.00 Median :3.5 2.03 3.00 3rd Qu.rm=TRUE) ## [1] 3 y summary().46 ## insom5 5 110 3.88 2.10 2.00 Max.04 - 1.30 2.20 4. Además de indicadores descriptivos básicos como el promedio y la desviación estándar.00 ## Max. :1. insom3.0 3. :1.97 1 7 6 0. muchas veces nos interesa revisar la distribución de una variable.:1.19 ## insom3 0.47 ## se ## insom1 0.19 ## insom2 0. na.00 3.44 Mean :3.frame().21 ## insom5 0. :7.00 ## NA's :1 NA's :1 NA's :2 NA's :2 NA's :2 Tablas y gráficos de frecuencia.00 1st Qu.00 1st Qu.:2.19 ## insom4 4 110 4.0 Max.48 - 1.27 4.0 3.0 1st Qu.08 2.93 2.00 3rd Qu.46 - 1.:2. :7. describe(insomnio) ## vars n mean sd median trimmed mad min max range skew kurtosis ## insom1 1 111 3.:6. :7. :7.:2. insom5)) crea una nueva base de datos -ocupando la función data. data.00 Median :2.00 Median :4.035 median(estudio2012$insom1.00 ## Mean :3.00 Max.27 Mean :3.27 2.:5.0 3rd Qu. A partir de los descriptivos. insom2.97 1 7 6 0.09 ## insom3 3 110 3. describe(estudio2012$insom1) . Esto permite hacer análisis con la escala completa sin tener que volver a escribir cada variable. :1. na.que sólo tiene la información de los ítems de insomnio.0 Min. El item insom1 es un buen indicador general de insomnio: “Generalmente me cuesta conciliar el sueño o despierto muchas veces en la noche”.22 1 7 6 0.22 Otras funciones descriptivas son: sd(estudio2012$insom1.49 - 1.:5.10 2.00 1st Qu.88 ## 3rd Qu.19 ## insom4 0.0 4.:5.:6. summary(insomnio) ## insom1 insom2 insom3 insom4 insom5 ## Min.00 3rd Qu.08 Mean :3.00 Min.0 3. :7.44 2.00 ## 1st Qu.1 Mean :4. insom4.rm=TRUE) ## [1] 2.97 1 7 6 0.00 Min. aunque hay más personas en desacuerdo que de acuerdo. el gráfico se abre en una nueva ventana.44 2. Consideremos por ejemplo el promedio de todos los ítems de insomnio: estudio2012$insom = with(insomnio. 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 = . pdf. Además de los datos para el gráfico. El comando barplot(table(estudio2012$insom1)) dibuja un gráfico de barras con la información de la tabla que pedimos antes. En ese caso hay que hacer click derecho para copiarlo o exportarlo.## vars n mean sd median trimmed mad min max range skew kurtosis se ## 1 1 111 3.51 1. lo que puede ser útil para cambiar sus dimensiones. o simplemente copiarlo en la memoria (para pegarlo en Word.57 1. ver colors() ) Estas opciones están disponibles. pueden guardar el gráfico como imagen. con la misma sintaxis. Si están ocupando RStudio.43 3.16 0.4 3.44).19 podemos observar que los niveles de insomnio están aproximadamente en el punto medio de la escala (M = 3. (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.32 -0. hacer una tabla de frecuencia es poco práctico y no entrega información útil. por ejemplo) seleccionando la opción correspondiente en el botón “Export”. que hay una variación considerable entre los participantes (SD = 2. # datos del gráfico main="Insomnio en estudiantes". para todo tipo de gráficos.14 .46). En vez de mirar un montón de números.03 3 3. # etiqueta eje horizontal ylab="Frecuencia". pero si es necesario cuando quieren mostrar estos resultados en un informe.03). pero agregando opciones para mejorar la presentación: barplot(table(estudio2012$insom1). 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. Cuando las variables son continuas.3 2. podemos agregar un título y otras cosas. # título principal xlab="Grado de acuerdo". para tener una idea de cómo se comportan los datos.46 -1. artículo o presentación. # etiqueta eje vertical col="lightblue" # cambio de color. Esto no es necesario si están revisando el gráfico para ustedes mismos. Abajo vamos a pedir el mismo gráfico. queda claro que hay una importante variación en el grado de acuerdo con este ítem.67 0.97 1 7 6 0. Si apretan el botón “Zoom”.48 1 7 6 0. podemos pedirle a R que nos dibuje un gráfico. 4 3.2 3.4 5.2 4. donde queremos saber cuántas personas tienen puntajes entre 1 y 2. Por este motivo.6 3. y desgraciadamente R se confunde cuando le ponemos una variable discreta. Los histogramas grafican una tabla de intervalos. El punto que hay que recordar es que los histogramas son para variables continuas. etc.6 2. # datos del gráfico main="Histograma escala de Insomnio". hacer una tabla de frecuencia es una mala idea: table(estudio2012$insom) ## ## 1 1.4 6.4 4. # título principal xlab="Grado de acuerdo". hist(estudio2012$insom1) dibuja una situación muy distinta. La función truehist() de la librería MASS no tiene este problema. esto es un error con la función hist().8 4 4.8 3 3. y menos preocupante. como el primer item de la escala.8 5 5.Esta escala sigue siendo de 1 a 7. El comando es simplemente: hist(estudio2012$insom) Al igual que en los gráficos anteriores.2 2.6 ## 1 6 4 4 5 4 4 4 9 3 4 9 1 8 5 5 3 3 ## 4.8 7 ## 1 7 8 2 1 2 1 2 1 1 barplot(table(estudio2012$insom)) La solución es hacer un histograma. 2 y 3.4 1. Espero que lo solucionen pronto.8 6. que está sumando a las personas que marcan 1 y las que marcan 2 en la primera barra. que la situación real: barplot(table(estudio2012$insom1)) De todas formas. Medidas de tendencia central .6 6. # etiqueta eje horizontal ylab="Frecuencia".2 6. no para variables discretas.8 2 2.4 2. podemos agregar opciones para mejorar la presentación. # etiqueta eje vertical col="lightgray" # cambio de color ) ¿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). pero ahora tiene valores relativamente continuos.2 5.6 1. hist(estudio2012$insom. la función barplot() saca los datos de una tabla de promedios en vez de una tabla de frecuencia. alpha = . # la pregunta era de 1 a 7. "Item 4". barplot(colMeans(insomnio. # R incluye también paletas de color. # pueden ejecutar help(rainbow) # para más información ylim=c(1. "Item 2". Como ven.100 4. Una forma simple de hacerlo es con un boxplot. también es bueno incluir más información -dispersión y asimetría.3) ) .882 barplot(colMeans(insomnio. por ejemplo. na.082 3. main="Itemes escala insomnio". indentar y poner comentarios es más útil cuando los comandos son más largos. "Item 5"). "Item 5"). xpd=F) # Es necesario para que las barras no comiencen en el valor 0 Si bien muchas veces basta con graficar los promedios. na. boxplot(insomnio.7).rm=TRUE). colMeans(insomnio. Abajo les copio un comando para el mismo gráfico. "Item 3".rm=TRUE) # imprime una tabla con los promedios de los ítems ## insom1 insom2 insom3 insom4 insom5 ## 3.270 3. R tiene un comando especialmente para este tipo de gráficos: boxplot(insomnio) Simple. na. alpha = . # etiqueta eje vertical names=c("Item 1".Podemos ocupar el mismo comando que ocupamos antes (barplot) para hacer un gráfico con los promedios de múltiples variables. Por ejemplo. # Nombres para las variables col=rainbow(20. # título principal ylab="Grado de acuerdo". "Item 4". ylab="Grado de acuerdo".rm=TRUE)) # grafica esta tabla Simplemente. "Item 3". pero con mejor presentación.441 3. ¿cierto? Abajo lo copio con algunas opciones para mejorar la presentación.6). col=rainbow(5. names=c("Item 1". main="Promedios itemes escala insomnio". "Item 2". . Abajo está hecho para los ítems de ansiedad ante las evaluaciones: with(estudio2012. boxplot(data. barplot(table(estudio2012$sitsent)) Vemos que hay una barra extra con la persona que prefirió no contestar esta pregunta. Por ejemplo. estudio2012$sitsentf = factor(estudio2012$sitsent.3)) ) 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). o su situación sentimental. por lo que vale la pena hacer un procesamiento preliminar de los datos. ansev5). Comparando distintos grupos. "Dolores". col=rainbow(5. main="Ansiedad ante evaluaciones".en la base de datos estudio2012 donde se seleccionan solamente los grupos que nos interesan. Por ejemplo. La base de datos alumnos2012. El siguiente comando crea una nueva variable -sitsentf.frame(ansev1. si son hombres o mujeres. ansev2. alpha = . "Irritable".csv que importamos incluía una serie de variables que identifican distintos grupos a los que pertenecen las personas. Las variables categóricas son importantes y las vamos a ocupar para una serie de análisis.Si no hubiéramos hecho la base de datos con los ítems de insomnio. names=c("Dificultad dormir". "Despertar frecuente". sub="Frecuencia de distintas conductas en periodos de evaluacion". 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. ylab="Frecuencia conductas". Todo esto significa que tenemos que hacer algo de trabajo antes de poder ocupar estas variables para nuestros análisis. ansev4. si hacemos un gráfico de barras para situación sentimental. el comando sería un poco más largo. ansev3. "Incapacidad de desconectarse"). 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. es decir. 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. # considerándola como un factor (una variable categórica) # por eso le puse el nombre sitsentf levels=c("En una relacion". "Soltero/a")) # Esto selecciona los niveles que nos interesan. # sin incluir las personas que no contestaron.]$sitsentf # muestra la situación sentimental del participante 52 (NA) ## [1] <NA> ## Levels: En una relacion Es complicado Soltero/a Cuando pedimos la tabla. # Esto crea una variable nueva a partir de sitsent. "Es complicado". ahora ya no incluye a este participante: table(estudio2012$sitsentf) ## ## En una relacion Es complicado Soltero/a ## 54 8 49 . "Masculino"). 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”. (por supuesto. Todos estos van a # quedar como NA. podemos hacer varias cosas # con esta variable: ordenarlos de izquierda a derecha. para otros análisis # podríamos querer mantener a los independientes y a los . No en el archivo alumnos2012. Vamos a hacer el mismo procesamiento con genero table(estudio2012$genero) ## ## Femenino Masculino ## 3 82 27 estudio2012$generof = factor(estudio2012$genero.csv. # Al seleccionar los niveles.La base de datos."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. # y omitir a los que no contestaron. # omitir los independientes y los que dicen "ninguna". levels=c("Femenino". labels=c("Mujer". Esta variable está en la base de datos estudio2012 que tenemos en nuestro espacio de trabajo. # que no se identifican) levels=c("Izquierda".colors(3. .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.6) ) Para hacer que cada grupo tenga una barra. 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). hay que ocupar el argumento “beside”."Derecha")) table(estudio2012$orienpolf) ## ## Izquierda Centro Izquierda Centro Centro Derecha ## 18 20 8 18 ## Derecha ## 19 Descripción de la muestra."Centro".6)) Si quieren hacer un gráfico de torta. barplot(table(estudio2012$sitsentf. radius = . "Centro Derecha".6).colors(5.6). main="Situacion sentimental estudiantes 2012". alpha = . estudio2012$generof). el comando es pie() pie(table(estudio2012$sitsentf).colors(3. alpha=. alpha=. col=heat. lo que se hace simplemente agregando otra variable al comando table(): table(estudio2012$sitsentf. barplot(table(estudio2012$sitsentf."Centro Izquierda". # agrega automáticamente una leyenda col=heat. alpha=. legend=TRUE.8) También es común querer cruzar dos tablas de frecuencia (crosstabs). col=terrain. legend=TRUE. col=rainbow(30. estudio2012$generof). 6). col=heat.375 3. estudio2012$sitsentf. # la pregunta era de 1 a 7.rm=TRUE) ## En una relacion Es complicado Soltero/a ## 3. na. xpd=F) # Es necesario para que las barras # no comiencen en el valor 0 Finalmente. pero eso va a depender de la configuración de su teclado). Todo lo que hay que hacer es ocupar el comando list() para hacer una lista con los factores a ocupar. tapply(estudio2012$insom1. separando además hombres de mujeres. estudio2012$sitsentf.438 barplot(tapply(estudio2012$insom1.rm=TRUE). boxplot(insom1~sitsentf. (En mi computador. col=heat. na.colors(3. beside=TRUE # esta opción hace que cada grupo tenga una barra ) Por último. después el factor que define los grupos y después la función que se quiere ocupar. tengo que presionar alt+ñ para escribir este tilde.colors(3. ylab="Insomnio". tapply(estudio2012$insom1. El formato de esta función es poner primero la variable dependiente.alpha=. también pueden hacer un gráfico de barras con los promedios. na. estudio2012$sitsentf. barplot(tapply(estudio2012$insom1. list(estudio2012$sitsentf. mean. mean. la función tapply() también permite ocupar dos o más factores para definir los grupos.7).rm=TRUE) ## Mujer Hombre . En general. La función tapply() es ideal para obtener los promedios de distintos grupos. estudio2012$generof). main="Problemas de insomnio en relaciones complicadas". El resultado de tapply() puede ser entregado directamente a barplot().rm=TRUE)) Abajo lo copio mejorando la presentación. na. mean.alpha=.278 4.6)) Aunque creo que comparar grupos a partir de boxplots es mejor. es común querer comparar los grupos en una o más variables continuas. main="Problemas de insomnio en relaciones complicadas". En un boxplot. ylab="Insomnio". como querer ver los niveles de insomnio separado por hombres y mujeres. podemos ocupar el signo ~ para indicar que se quiere separar por grupos. mean. ylim=c(1. El comando de abajo hace una tabla con los promedios de insomnio según situación sentimental. ~ significa “predicho por” en R. data=estudio2012. insom1. col=c("red". list(estudio2012$sitsentf.## En una relacion 3. col=heat. presentaciones.6). etc. interaction."darkgreen"). main="Insomnio según género y situación sentimental". xlab="")) . es común hacer un gráfico de líneas para reportar interacciones entre dos factores. legend=TRUE.000 3. main="Insomnio segun genero y situacion sentimental". barplot(x. variable dependiente). ylim=c(1.750 ## Soltero/a 3. barplot(x.colors(3. xpd=F) Especialmente al reportar experimentos.plot(generof. beside=TRUE. with(estudio2012.7)."blue". na. sitsentf.7). beside=TRUE) Gráfico formateado para documentos. ylim=c(1. R tiene un comando para esto. lty = 1. Como es un objeto temporal. ylab="Insomnio". ylab="Insomnio".515 3.plot(factor eje x. x = tapply(estudio2012$insom1. Si tuviera un uso más permanente sería mejor ponerle un nombre más descriptivo.plot(generof. mean. interaction. insom1)) Nuevamente. sitsentf. interaction.alpha=. podemos mejorar la presentación del gráfico agregando más parámetros: with(estudio2012.000 Esta vez vamos a asignar esta tabla a un objeto para simplificar los comandos siguientes. estudio2012$generof). le vamos a poner “x”.889 ## Es complicado 5.068 3. factor con diferentes líneas.rm=TRUE) Gráfico sin mayores opciones de formato. estudio2012$insom.00 3 Si hacemos el gráfico tal como lo hicimos antes. # agregando el siguiente argumento: fun=function(x) mean(x. col="cadetblue4".plot(generof. interaction. “Si mi pareja reacciona de manera fría. sitsentf. como ya hicimos al comienzo de este tutorial con los niveles de extroversión y de apertura a la experiencia.7))) La solución es explicitar que la fórmula para el promedio tiene que ignorar los datos perdidos. desconf4. Primero tenemos que calcular el promedio de la escala. desconf4.00 5.00 4. NA's ## 1. Median Mean 3rd Qu. summary(estudio2012$desconf4) # ver NA's ## Min. el cuarto ítem de desconfianza en la pareja. Revisemos la relación entre insomnio y ansiedad en periodo de evaluaciones. xlab="Ansiedad ante evaluaciones". nos van a faltar varias líneas with(estudio2012. Max.Desgraciadamente esta función no reacciona bien a NAs en la variable dependiente. sitsentf. main="Relacion entre ansiedad ante evaluaciones e insomnio". na. tiendo a pensar que tiene un problema conmigo” tiene 3 personas que no contestaron. ylim=c(1. estudio2012$generof) ## ## Mujer Hombre ## En una relacion 44 9 ## Es complicado 4 4 ## Soltero/a 33 14 Relaciones entre variables continuas. ylab="Insomnio" . tienden a tener mayor desconfianza o inseguridad en relaciones complicadas (recuerden que hay solo 4 participantes hombres que reportan su situación sentimental como complicada. Es tremendamente común el psicología querer relacionar distintas variables continuas a partir de dispersiogramas. with(estudio2012. Por ejemplo. 1st Qu.00 7. Dado que vamos a relacionarla con los niveles de insomnio. prefiero no ocupar los ítems que se refieren a problemas de dormir en periodos de evaluaciones.rm=TRUE))) Pareciera que los hombres. (ansev3+ansev4+ansev5)/3) Ahora podemos pedir un dispersiograma plot(estudio2012$ansev. pero no las mujeres.61 6. interaction.00 4.plot(generof. ¡no se tomen muy en serio estos resultados!) table(estudio2012$sitsentf. estudio2012$ansev = with(estudio2012. new has not been called yet Para hacer esto más complicado. estudio2012) La librería lattice tiene una gran cantidad de comandos para hacer gráficos. la función lm() ocupa un orden distinto para las variables x e y. Para obtener el coeficiente de correlación entre estas variables pueden ocupar la función cor(). ) Como se observa en el gráfico. # de 0 a 10. . esto es alt+1). En general opté por ocupar librerías solamente cuando facilita substancialmente las cosas. use = "pairwise. pero no forzar que sea una linea recta. estudio2012$insom.new has not been called yet A veces nos interesa revisar la relación de dos variables continuas. pero separando por distintos grupos. install.3182 Este tipo de gráficos permite además agregar más información. estudio2012$insom. bass=2). xyplot(insom~ansev|generof. NaNs and/or Infs deleted ## Error: plot. Por ejemplo. Otra opción es dibujar una linea que se ajuste a los datos. podemos hacer que los círculos en el dispersiograma tengan un color distinto en base al grupo al que pertenece la persona. cor(estudio2012$ansev.packages("lattice") # Una vez que ya lo tienen instalado no es necesario # ejecutar nuevamente este comando.complete. En vez de hacer gráficos por separado.obs" # necesario cuando hay NAs ) ## [1] 0. supsmu() es una buena función para hacer esto. mientras que el comando lm() tiene el formato y~x (y predicho por x). Ahora vamos a ver una opción para visualizar estos datos sin ocupar lattice. Quienes reportan más ansiedad en periodos de evaluaciones reportan también mayores niveles de insomnio. y). El comando plot tiene el formato (x. library(lattice) La función xyplot() de lattice funciona con la misma sintaxis que lm(): y~x. que pueden explorar libremente. lines(supsmu(estudio2012$ansev. hay una correlación positiva entre las dos variables. controla el nivel de "smoothness" de la linea col="royalblue1") ## Warning: 5 observations with NAs. pero además permite separar por grupos ocupando el signo | (en mi computador. Una forma simple de hacer esto es con la librería lattice. poner una línea que indica la relación lineal entre las variables: abline(lm(estudio2012$insom~estudio2012$ansev). col="firebrick") ## Error: plot. no importa por qué funciona. colores ## [1] "red" "blue" En vez de ocupar rainbow() o repetir los colores que se van a ocupar en cada gráfico. Primero tenemos que hacer un objeto con los colores que vamos a ocupar: colores = c("red". pero al explicar cómo incluir ambos en el mismo gráfico vamos a aprovechar de explicar algunas funciones más fundamentales de R y ejemplificar cómo podemos usar las funciones de forma creativa para llegar al resultado que queremos. Los factores (las variables categóricas) también están codificados como una lista. Lo que importa es que podemos hacer el siguiente gráfico de dispersión: . Esto permite además cambiar los colores de todos los gráficos sin tener que modificar cada uno de los comandos. ## [1] "red" "red" "red" "red" "red" "red" "blue" "blue" "red" "red" ## [11] "blue" NA "red" "blue" "red" "red" "blue" "red" "blue" "red" ## [21] "blue" "red" "red" "red" "red" "red" "red" "red" "red" "red" ## [31] "red" "red" "red" "blue" "red" "red" "red" "blue" "red" "blue" ## [41] "red" "red" "blue" "red" "blue" "red" "blue" "blue" "red" "red" ## [51] "red" "red" "red" NA "blue" "red" "red" "red" "red" "blue" ## [61] "red" "red" "red" "blue" "blue" "red" "red" "red" "blue" "red" ## [71] "red" "red" "red" "red" "red" "red" "blue" "red" "blue" "blue" ## [81] "blue" "red" "red" "red" "red" "red" "red" "blue" "red" "red" ## [91] "red" "blue" "red" "red" "red" "blue" "red" "red" "red" "red" ## [101] "red" "blue" "red" NA "red" "red" "red" "red" "red" "red" ## [111] "red" "red" # ocupando los elementos del objeto "colores" Ok."blue") Esto simplemente crea un objeto con una lista de dos colores. cuando están haciendo un informe puede ser útil hacer una paleta de colores personalizada ocupando esta función. simplemente concatena los elementos para que queden en una lista. y el segundo elemento es “Hombre”. La función c(). La función levels(estudio2012$generof) ## [1] "Mujer" "Hombre" muestra los valores que puede tener la variable generof. El primer elemento es “Mujer”. que ya habíamos ocupado más arriba sin explicar.Hacer el gráfico por separado para hombres y mujeres es más que suficiente. Lo que tenemos ahora es una lista en que el elemento 1 es “red” y el elemento 2 es “blue”. La gracia es que ahora podemos reemplazar “Mujer” y “Hombre” por “red” o “blue” tal como aparecen en el objeto “colores”: colores[estudio2012$generof] # obtiene los datos de "generof". Basta reemplazar los colores en el objeto que crearon. Al comienzo de este tutorial. Esto requiere ocupar solamente a los participantes hombres o mujeres según corresponda. # Podríamos haber escrito c("Mujer". # Los colores asociados con el texto pch=19 # El símbolo a ocupar en la leyenda ) También podemos incluir una línea para cada grupo. Si quisiéramos ver los datos de la segunda columna (la situación sentimental). # Ubicación de la leyenda levels(estudio2012$generof). # Texto de la leyenda."Hombre") col = colores.2] ## [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 ## [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 . columnas].plot(estudio2012$ansev. lo que está entre corchetes es un subgrupo de la base de datos. col=colores[estudio2012$generof]. con la forma: datos[filas. main="Relacion entre ansiedad ante evaluaciones e insomnio". vimos los datos del participante 52 con el comando estudio2012[52. ylab="Insomnio" ) También podemos agregar una leyenda con los colores: legend("topleft". estudio2012$insom.] En este caso. # Magia xlab="Ansiedad ante evaluaciones". podemos ejecutar estudio2012[. main="Relacion entre ansiedad ante evaluaciones e insomnio". Esto es para distinguirlo de “=”. col=colores[2])) # Selecciona el segundo color de la lista Matriz de correlaciones. porque se refiere a una columna. En caso de que no la tengan cargada: library(psych) personalidad = epi. Para dibujar las líneas que mejor se ajustan a los datos de mujeres y hombres. # Selecciona únicamente a las mujeres abline(lm(insom~ansev). Por ejemplo. estudio2012$insom.## [109] En una relacion Soltero/a Soltero/a En una relacion ## Levels: En una relacion Es complicado Soltero/a Noten que ahora el número está después de la coma. col=colores[1])) # Selecciona el primer color de la lista with(estudio2012[estudio2012$generof=="Hombre". abline(). lo que nos permite seleccionar parte de la base de datos según alguna condición. Si quisiéramos saber la situación sentimental del participante 86. # Magia xlab="Ansiedad ante evaluaciones". ]. # Selecciona únicamente a los hombres abline(lm(insom~ansev). por ejemplo que los participantes sean hombres: estudio2012[estudio2012$generof=="Hombre". El uso de “==” también es importante. que se ocupa para asignar el resultado de una función a un objeto. . vamos a crear una nueva base de datos solamente con los factores del big-five. tenemos que ejecutar estudio2012[86.] Noten que la condición está puesta antes de la coma. queremos seleccionar las filas donde el valor de generof es “Masculino”. ylab="Insomnio" ) with(estudio2012[estudio2012$generof=="Mujer". col=colores[estudio2012$generof]. podemos ver las correlaciones entre los cinco factores de personalidad del “big five” en la base de datos que viene con la librería psych. podemos correr el mismo comando de antes. Para simplificar los comandos. ].2] ## [1] En una relacion ## Levels: En una relacion Es complicado Soltero/a Pero los números de fila y columna también pueden ser expresiones lógicas. pero ocupando un subset de la base de datos: plot(estudio2012$ansev. queda por mencionar que la función plot() también puede graficar las correlaciones entre múltiples variables. Para terminar con el tema de los gráficos y de la exploración de datos.bfi La función plot hace automáticamente la matriz de dispersiogramas si le entregan más de dos variables. histogramas para ver la distribución de las variables. Cálculo de escalas y psicometría. la función pairs. Pero la librería psych incluye un gráfico que es perfecto para esto.04 0. bfcon.bf = with(personalidad.00 0.46 ## bfneur -0.00000 0.26675 0. bfext. bfopen)) plot(bf) Si quieren ver la tabla de correlaciones en la consola. Este gráfico pone distintos colores dependiendo de qué tan fuerte es la correlación entre dos variables.plot() requiere los datos de una tabla de correlaciones.0445 0. bfneur.frame(bfagree.3052 ## bfext 0. 2) ## bfagree bfcon bfext bfneur bfopen ## bfagree 1.plot(cor(personalidad)) Como ven. .39 0.29 ## bfopen 0.04462 0.4499 0.00 La librería psych también tiene funciones gráficas para esto. round(cor(bf).0000 0.0000 La función round() permite quitar decimales a ésta o cualquier otra tabla.29 1. el gráfico permite identificar de manera rápida cuáles son las variables que correlacionan entre si.00000 0. cor.00 0. En mi opinión estos gráficos son horribles.2935 ## bfopen 0.39415 0.27 0.27 1.31 ## bfext 0.31 0.panels(bf) Obviamente.47848 -0.03713 1.45 1. data.panels(). Ejecutar plot(personalidad) es poco práctico.44990 1.00000 0.03713 0.3942 ## bfcon 0.00 0.panels() entrega dispersiogramas con una línea de ajuste. A diferencia de plot() o de pairs.47848 0. este tipo de gráficos pierde sentido a medida que aumenta el número de variables.04 1.29348 1.2668 1.plot().48 0. Por defecto. pero son útiles para explorar rápidamente las variables.04450 0. con algunas opciones extra.45876 0.04 0.45 0.39 ## bfcon 0.04 0.46 0.00 0.04 0. y que no es horrible: cor.04 0. cor(personalidad) cor.04462 0. pairs. pueden ejecutar: cor(bf) ## bfagree bfcon bfext bfneur bfopen ## bfagree 1.4588 ## bfneur -0.48 -0. y además los coeficientes de correlación.3052 0. alpha(insomnio) # Probablemente tienen que moverse en la consola para ver ## ## Reliability analysis ## Call: alpha(x = insomnio) ## ## raw_alpha std.32 0. o si están midiendo más de un constructo.56 1.05 ## insom4 0.35 0. # Vamos a asignar las correlaciones a un objeto.3 2.0 ## insom3 110 0.alpha G6(smc) average_r S/N alpha se ## insom1 0.35 0.79 0.00 0.53 0.46 3.87 ## ## Reliability if an item is dropped: ## raw_alpha std. y bastante bien con el resto.38 2.29 1.06 0. es analizar la confiabilidad de la escala por medio del alpha de Cronbach.09 1.9).74 0.84 0. La primera.40 2.4 2.27 3.09 0.49 0. El ítem 3 correlaciona algo con el 1 y 2.20 0. pero no correlaciona con los ítems 4 y 5.61 0.30 0.24 0.0 ## insom4 110 0.1 2.09 0.7 0.74 0.75 0.2 ## insom5 110 0.87 0.05 0.61 0.42 3.56 ## insom5 0.090 ## insom2 0. y la más simple.71 0. Por ejemplo. los ítems 1 y 2 correlacionan muy fuertemente entre si (r = . veamos la correlación entre los ítems de insomnio: x = cor(insomnio.78 0.37 0.30 ## insom2 0.09 0.62 0.63 0.31 0.09 0.11 0.09 0.90 0.4 0.drop mean sd ## insom1 111 0.13 0.13 0.18 0.4 0.37 0. al medir constructos psicológicos es preferible ocupar múltiples itemes ya que cada uno de ellos es un indicador imperfecto de los niveles del constructo. uno esperaría que la correlación entre ellos sea alta.00 0.73 0.62 0.14 0.67 0.28 1. Pero si los ítems efectivamente están midiendo el mismo constructo.77 0.01 ## insom2 0.61 0.55 0.079 ## insom5 0.cor r.69 3.071 ## insom4 0.35 1.12 0.0 ## insom2 111 0.14 0.37 0.obs") # necesario cuando hay NAs round(x. Normalmente.74 0.3 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## insom1 0. La librería psych tiene un comando para hacer esto.60 0.36 2.plot() es una excelente introducción al tema de la psicometría ycómo calcular escalas.73 0.22 0.076 ## ## Item statistics ## n r r.090 ## insom3 0.37 0.9 2.plot(x) # Grafica la tabla de correlaciones Claramente.05 0.02 .32 0. que si correlacionan entre si.35 0.22 0.88 0.76 0.00 0.8 0.61 0.31 ## insom3 0.alpha G6(smc) average_r S/N ase mean sd ## 0.6 1.6 0.00 cor.complete.11 0.5 ## ## lower alpha upper 95% confidence boundaries ## 0. x use = "pairwise. Hay dos formas principales de simplificar toda esta información para poder decidir si estos itemes son una medición confiable de los niveles de insomnio.09 0.83 0.48 4.El gráfico de correlaciones que entrega cor.01 ## insom3 0.82 0.1 2.066 3.70 3.19 0.90 1.00 0. 2) # Imprime la tabla de correlaciones en la consola ## insom1 insom2 insom3 insom4 insom5 ## insom1 1.70 0.6 0. 101 ## insom2 0.63 0.3 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## insom1 0.65 3.24 0.0 0.74 0. insom5)) ## ## raw_alpha std.101 ## insom4 0.14 0.13 0.13 0.83 0.07 0.53 4.cor r.5 0. la escala tiene un alpha adecuado (std.08 0. revisemos la confiabilidad de esta nueva escala. insom5))) ## ## Reliability analysis ## Call: alpha(x = cbind(insom1.02 ## insom5 0.46 3. pero que podría ser un poco mejor al eliminar este ítem (. Más adelante vamos a ver por qué.091 ## insom5 0.20 0.01 ## insom2 0.22 0.alpha G6(smc) average_r S/N alpha se ## insom1 0.85 0.15 0.07 0.7 ## ## lower alpha upper 95% confidence boundaries ## 0.08 0.82 0. Ahora que no podemos ocupar el objeto insomnio que habíamos creado antes.14 0.77 0.09 0.47 3.60 0. la decisión es más conceptual que estadística.071 3.65 3.77 0.09 0.24 0.13 0. Antes de calcular el puntaje de insomnio sin el ítem 3.alpha G6(smc) average_r S/N ase mean sd ## 0. Calculo de escalas: .9 2. pero por ahora vamos a calcular la escala de insomnio con estos cuatro ítems.17 0. En estos casos.02 # el output completo de este análisis help(alpha) A pesar de los problemas con el ítem 3.50 3.## insom4 0.11 0.32).4 2. que tiene una correlación con el total relativamente baja (r.0 ## insom4 110 0.24 0.79 0. También podríamos haber ocupado data.60 0. insom4.17 0.11 0.78 0.53 0. y vemos que los ítems 4 y 5 funcionan un poco peor.09 0. que además es menos frecuente en personas jóvenes.11 0.41 2.alpha=. insom2.09 0.22 0.91 ## ## Reliability if an item is dropped: ## raw_alpha std. quizás sea mejor eliminarlo de la escala y ocuparlo por separado.11 0.2 ## insom5 110 0.13 0.80 0.frame().24 0.09 0.74).40 2. La función cbind() combina objetos de R.78.78). ya que se refiere a un tipo de insomnio diferente.7 1.02 Ahora el alpha subió a .13 0.1 2.67 0.11 0.24 0.087 ## ## Item statistics ## n r r.58 0.14 0.15 0.67 0. with(estudio2012.54 3.14 0.4 0. tenemos que escribir cada una de las variables en la base de datos estudio2012.0 ## insom2 111 0.19 0. alpha(cbind(insom1.02 ## insom5 0. insom4.01 ## insom4 0.22 0.75 0.drop mean sd ## insom1 111 0.70 0.0 0.85 0.cor = .67 0.83 0.78 0. Considerando el contenido del ítem 3 “A veces me despierto mucho antes de lo que tenía presupuestado”.13 0.77 0. en este caso columnas en la base de datos estudio2012.73 0.0 0.06 0. insom2.09 0.22 0.13 0.67 0.3 2. 23 1.17 0.40 1. insom5). De otra forma ese participante quedaría con un valor NA en esta escala. Al incluir na.19 0. ansev4.32 0. ## ansev5))) ## . Median Mean 3rd Qu.67 4. cbind(ansev1.17 ## ansev2 0.31 0. ansev3.31 0. rowMeans(cbind(insom1.53 0.00 0. especificamos que si alguien contestá solamente algunos de los cuatro ítems. ansev3. ansev5))) ## ## Reliability analysis ## Call: alpha(x = with(estudio2012.00 0.rm=TRUE)) Para simplificar las cosas.50 3. Max.53 1.75 7. alpha(with(estudio2012. ansev4. ansev5)). ansev2.32 0.40 ## ansev5 0.47 1.47 0.00 cor. 2) ## ansev1 ansev2 ansev3 ansev4 ansev5 ## ansev1 1. ansev2.19 ## ansev3 0. ya que todos los ítems correlacionan entre si. insom2. na. cbind(ansev1. Ocupando esta opción.00 0. cbind(ansev1. un participante quedaría con NA solamente cuando no haya contestado ninguno de los ítems.complete. ansev3. NA's ## 1.31 ## ansev4 0. El principal problema de esto es que no permite especificar qué hacer con los datos perdidos. insom4.23 0. summary(estudio2012$insom) ## Min.31 0. 1st Qu.00 1 Revisemos los ítems de ansiedad ante evaluaciones: names(estudio2012) # ¿Se acuerdan cuál era el nombre de estas variables? ## [1] "n" "sitsent" "desconf1" "desconf2" "desconf3" ## [6] "desconf4" "desconf5" "vidau1" "vidau2" "vidau3" ## [11] "vidau4" "vidau5" "starb1" "starb2" "starb3" ## [16] "starb4" "starb5" "ayude1" "ayude2" "ayude3" ## [21] "ayude4" "ayude5" "abor1" "abor2" "abor3" ## [26] "abor4" "abor5" "tolsex1" "tolsex2" "tolsex3" ## [31] "tolsex4" "tolsex5" "intex1" "intex2" "intex3" ## [36] "intex4" "intex5" "acogex1" "acogex2" "acogex3" ## [41] "acogex4" "acogex5" "ansev1" "ansev2" "ansev3" ## [46] "ansev4" "ansev5" "insom1" "insom2" "insom3" ## [51] "insom4" "insom5" "intui1" "intui2" "intui3" ## [56] "intui4" "intui5" "valma1" "valma2" "valma3" ## [61] "valma4" "valma5" "streu1" "streu2" "streu3" ## [66] "streu4" "streu5" "intay1" "intay2" "intay3" ## [71] "intay4" "intay5" "tprej1" "tprej2" "tprej3" ## [76] "tprej4" "tprej5" "genero" "zodiaco" "orienpol" ## [81] "mencion" "votop" "herman" "lugar" "insom" ## [86] "sitsentf" "generof" "orienpolf" "ansev" x = cor(with(estudio2012.plot(x) Esta escala se ve mucho mejor.00 2. se calcule el promedio con la información que sí está disponible.00 0. ansev4.32 0. antes habíamos calculado la escala sumando las variables y dividiendo por el número de elementos.rm=TRUE en la función rowMeans().50 3.estudio2012$insom = with(estudio2012.obs") round(x. use = "pairwise. ansev2.32 0. 10 0.57 0. ansev4.10 0.cor r.69 0.11 0.03 1.65 0. Eso es exactamente lo que está ocurriendo con los ítems de insomnio.081 ## ## Item statistics ## n r r.45 0.01 ## ansev5 0.08 0.18 0.1 1.74 0.19 0.9 0.12 Análisis factorial Es perfectamente posible que una serie de ítems que fueron desarrollados para medir un constructo están en realidad midiendo dos o tres.8 2. ansev2.06 0.09 0.20 0.54 4.24 0.01 La confiabilidad es adecuada (.7 0. ansev3.16 0.65 0.08 0.15 0.9 0.32 1.48 3. rowMeans(cbind(ansev1.11 0.086 ## ansev4 0.parallel(insomnio) ## Loading required package: parallel ## Loading required package: MASS .15 0.16 0.16 0.07 0.71 0.48 4.13 0.3 0.01 ## ansev2 0.07 4 1.3 ## ## lower alpha upper 95% confidence boundaries ## 0.57 0.71 0. ¿Cuántos factores estamos midiendo con los ítems de insomnio? Una forma de responder a esta pregunta es ejecutar la siguiente función: fa.61 0.29 1. Pero eso no significa que no lo podamos ocupar.drop mean sd ## ansev1 111 0.59 0.8 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## ansev1 0.0 ## ansev2 111 0.67 0.6 1.66 0.alpha G6(smc) average_r S/N alpha se ## ansev1 0. ansev5).66 0.4 0.62 0.32 2.8 ## ansev4 111 0. este proceso debiera integrar también un análisis teórico y conceptual.9 ## ansev3 110 0.59 0.33 2.18 0.63 0. na.27 0.29 4 4 1.08 0.02 ## ansev4 0.62 0. Entender exactamente cómo funciona un análisis factorial es mucho más avanzado de lo que vamos a cubrir en el curso.17 0.13 0.65 0.0 ## ansev5 111 0.32 1.24 0.06 0.37 4.085 ## ansev3 0.56 0.65 0.60 0.087 ## ansev2 0. estudio2012$ansev = with(estudio2012.36 2.45 3.090 ## ansev5 0.14 0.69 0.69 0.rm=TRUE)) describe(estudio2012$ansev) ## vars n mean sd median trimmed mad min max range skew kurtosis se ## 1 1 111 4.69 0.alpha G6(smc) average_r S/N ase mean sd ## 0.23 0.07 0.51 0.48 1 7 6 0.08 0.12 0.71) y no mejora al eliminar ningún ítem.22 0.0 0. Aunque ahora nos vamos a concentrar en el análisis estadístico.85 ## ## Reliability if an item is dropped: ## raw_alpha std.08 0.15 -0.01 ## ansev3 0.5 1.69 0.18 0.23 0.65 0.61 0.71 0.66 0.## raw_alpha std.1 2. 21 with prob < 0.04 with prob < 0.51 .40 0. lo que importa es la línea de FA (análisis factorial).39 1.84 ## The total number of observations was 112 with MLE Chi Square = 0. # las variables a incluir en el análisis 2) # la cantidad de factores ## Loading required package: GPArotation ## Factor Analysis using method = minres ## Call: fa(r = insomnio.y ajuste con los datos -donde tener más factores es mejor.09 0.025 1.1 ## insom4 0.0 ## insom3 0.77 0. probablemente un solo factor también es aceptable en este caso. El gráfico entrega más información de la que realmente necesitamos.23 ## Cumulative Var 0.15 0.235 1.89 0.00 ## ## Mean item complexity = 1 ## Test of the hypothesis that 2 factors are sufficient.## Parallel analysis suggests that the number of factors = 2 and the number of components = 2 fa. De hecho. Agregar un tercer factor es ciertamente poco práctico.37 ## Cumulative Proportion 0.0 ## ## MR1 MR2 ## SS loadings 2.01 0.38 with Chi Square of 258. que a su vez logra explicar más varianza en la escala que el tercer factor.65 ## ## Tucker Lewis Index of factoring reliability = 1.04 0. ## ## The degrees of freedom for the null model are 10 and the objective function was 2.15 0.parallel() es una función de la librería psych nos ayuda a evaluar cuál es la solución más optima en términos de cantidad de factores considerando parsimonia -donde tener menos factores es mejor.01 ## ## The harmonic number of observations is 110 with the empirical chi square 0. El primer factor logra explicar más varianza en la escala que el segundo factor.63 0. podemos hacer un análisis factorial exploratorio con dos factores. Con esta información. nfactors = 2) ## Standardized loadings (pattern matrix) based upon correlation matrix ## MR1 MR2 h2 u2 com ## insom1 0.43 0.99 -0.567 1.1 ## insom5 -0.63 ## Proportion Explained 0.03 0.98 0.15 ## Proportion Var 0.00 1.90 0.032 ## RMSEA index = 0 and the 90 % confidence intervals are NA 0.0 ## insom2 0.41 -0. ya que dos factores pueden explicar la mayor parte de la varianza.59 0.193 ## BIC = -4. ocupando la función fa() de la librería psych.00 0.164 1.2 ## The degrees of freedom for the model are 1 and the objective function was 0 ## ## The root mean square of the residuals (RMSR) is 0 ## The df corrected root mean square of the residuals is 0.63 1.39 ## MR2 0.853 1.40 0. fa(insomnio.00 ## ## With factor correlations of ## MR1 MR2 ## MR1 1.84 0. 2 0. Revisemos la confiabilidad antes de calcular cada escala.085 3. Esto puede verse de forma gráfica con plot(fa(insomnio.35 1. de hecho tienen una correlación de .61 Puede ser que también sea necesario instalar GPArotation.09). install.2)) Los ítems 1 y 2 se relacionan fuertemente con el primer factor (MR1). cbind(insom1. que de hecho son perfectamente comprensibles al leer los ítems: Factor 1: Problemas de insomnio.78 0. Pero no son lo mismo.95 ## ## Reliability if an item is dropped: ## raw_alpha std.packages("GPArotation") library(GPArotation) La información entregada en la primera tabla nos indica cuánto se relaciona cada ítem con cada uno de los factores.5 0.61 0.95 0. dormir siestas o pasar un tiempo excesivo en la cama (insom5) Obviamente estos dos constructos están relacionados. insom2. cbind(insom1.98 0.90 0. Problemas de insomnio: alpha(with(estudio2012.51 0.90 18.8 0. Generalmente me cuesta conciliar el sueño o despierto muchas veces en la noche (insom1) Suelo presentar grandes dificultades para iniciar y mantener el sueño (insom2) A veces me despierto mucho antes de lo que tenía presupuestado (insom3) Factor 2: Conductas problemáticas de higiene del sueño.35 0. ¿Qué significa esto? Significa que la escala mide dos cosas. insom3))) ## ## Reliability analysis ## Call: alpha(x = with(estudio2012. insom3))) ## ## raw_alpha std.54 0. me dan ganas de ver televisión.16 ## insom2 0.alpha G6(smc) average_r S/N ase mean sd ## 0. insom2.7 ## ## lower alpha upper 95% confidence boundaries ## 0.90 ## Multiple R square of scores with factors 0.39 según el análisis factorial.37 1.## Fit based upon off diagonal values = 1 ## Measures of factor score adequacy ## MR1 MR2 ## Correlation of scores with factors 0.78 0.3 1.78 0. si es que no se instaló con psych.96 0.95 0.16 ## insom3 0. El ítem 3 está más relacionado con el primer factor (.54 0. leer o hacer otra cosa (insom4) Suelo tener horarios de sueño desordenados.alpha G6(smc) average_r S/N alpha se ## insom1 0.1 0.10 .99 0.51 0. Cuando es hora de dormir.37 0.54 3.41) que con el segundo (-.81 ## Minimum correlation of possible factor scores 0. y los ítems 4 y 5 se relacionan fuertemente con el segundo factor (MR2).4 0. 13 0.15 0. rowMeans(cbind(insom4.## ## Item statistics ## n r r. insom3).88 0. insom5))) ## ## raw_alpha std.11 0. cbind(insom4.drop mean sd ## insom4 110 0.13 0.01 ## insom2 0.11 0.90 0.88 0.02 ## insom5 0.14 0.71 0.09 0. 1st Qu. aunque con dos ítems normalmente se reporta la correlación (.1 2.69 0.13 0.02 El alpha es .92 0.09 0. Median Mean 3rd Qu. Max. na. na.22 0.22 0.77 3.33 7. 1st Qu.91 0.20 0.18 0.4 2 ## insom2 111 0.12 0.17 0.56 0.cor r. insom2.98 5.56 3.00 4.11 0.02 El alpha es .rm=TRUE)) summary(estudio2012$cinsom) ## Min.66 0.9 2.56 NA NA ## insom5 0.24 0.00 1 .14 0.93 0.19 0.56 0.cor r.71 0. estudio2012$insom = with(estudio2012.31 0.14 0.alpha G6(smc) average_r S/N alpha se ## insom4 0.26 4.00 3. NA's ## 1.09 0.31 0.56 0.56 4. cbind(insom4.09 0.00 3.32 0.05 0.09 0.alpha G6(smc) average_r S/N ase mean sd ## 0.3 2 ## insom3 110 0.06 0.76 3.37 3.09 0.00 2. insom5).11 0.5 0.50 7.drop mean sd ## insom1 111 0.1 2 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## insom1 0.14 4 2 ## ## lower alpha upper 95% confidence boundaries ## 0.08 0.rm=TRUE)) summary(estudio2012$insom) ## Min.3 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## insom4 0.56 0.66 0. insom5))) ## ## Reliability analysis ## Call: alpha(x = with(estudio2012.13 0.00 3.56) estudio2012$cinsom = with(estudio2012.13 0. rowMeans(cbind(insom1. Max.56 NA NA ## ## Item statistics ## n r r.71.24 0.00 1 Conductas problemáticas insomnio: alpha(with(estudio2012.44 0.24 0.56 0. NA's ## 1.71 0.78. Median Mean 3rd Qu.01 ## insom3 0.22 0.56 2.07 0.99 ## ## Reliability if an item is dropped: ## raw_alpha std.2 ## insom5 110 0.38 0.00 2. 0 ## ansev2 0. ansev2.51 1.61 ## The total number of observations was 112 with MLE Chi Square = 0.25 ## Cumulative Var 0. aunque también sería aceptable ocupar uno.03 ## ## The harmonic number of observations is 111 with the empirical chi square 0.32 0.0 ## ansev5 0.31 with prob < 0.09 0.53 -0. ansev3.26 0. cbind(ansev1.parallel(with(estudio2012.¿qué pasa cuando hacemos un análisis factorial para los ítems de ansiedad en periodo de evaluaciones? De acuerdo al scree plot. ansev2. ansev4.51 ## Proportion Explained 0.58 ## ## Tucker Lewis Index of factoring reliability = 1.1 ## Test of the hypothesis that 2 factors are sufficient.4 ## ansev3 0.19 0.05 0.01 ## The df corrected root mean square of the residuals is 0. ansev3.49 ## Cumulative Proportion 0.00 ## ## With factor correlations of ## MR2 MR1 ## MR2 1. ## ## The degrees of freedom for the null model are 10 and the objective function was 0.379 1.0 ## ansev4 0.43 ## MR1 0.45 0. ## ansev5)).205 ## BIC = -4. nfactors = 2) ## Standardized loadings (pattern matrix) based upon correlation matrix ## MR2 MR1 h2 u2 com ## ansev1 -0.00 0.26 ## Proportion Var 0.62 0.00 1.00 0.37 0.26 0. ansev3.2) esta vez asignamos el análisis factorial a un objeto x x ## Factor Analysis using method = minres ## Call: fa(r = with(estudio2012. x = fa(with(estudio2012.26 0.005 1.26 with prob < 0.00 ## ## Mean item complexity = 1. fa.01 0. cbind(ansev1. ansev4.0 ## ## MR2 MR1 ## SS loadings 1.633 1.51 0.96 with Chi Square of 104.075 ## RMSEA index = 0 and the 90 % confidence intervals are NA 0. ansev5)).30 1.01 1. ansev2.79 -0. ansev4.41 . cbind(ansev1.738 1.43 1. ansev5))) ## Parallel analysis suggests that the number of factors = 2 and the number of components = 1 parece que la mejor solución es ocupar dos factores.56 0.685 1.4 ## The degrees of freedom for the model are 1 and the objective function was 0 ## ## The root mean square of the residuals (RMSR) is 0. 22 0.39 1.24 0.69 0.## Fit based upon off diagonal values = 1 ## Measures of factor score adequacy ## MR2 MR1 ## Correlation of scores with factors 0.3 0.53 0.08 0.46 0.6 1.53 2.7 ## ## lower alpha upper 95% confidence boundaries ## 0.53 0.5 1.0 ## ansev5 111 0.11 0.47 4.42 4.66 0.9 0.86 ## ## Reliability if an item is dropped: ## raw_alpha std.8 0.53 0.9 0.drop mean sd ## ansev3 110 0.14 0.1 4. ansev5))) ## ## raw_alpha std.69 0.57 0.81 0.08 0.74 1.66 0.00 ## Minimum correlation of possible factor scores 0.09 0.47 1. cbind(ansev3.02 ## ansev4 0. Al revisar la confiabilidad que tendrían estas escalas.57 0.13 0.01 alpha(with(estudio2012.alpha G6(smc) average_r S/N alpha se ## ansev3 0. y los ítems 1 y 2 cargan en otro (MR1). ansev2))) # normalmente se reporta la correlación cuando hay 2 ítemes ## ## Reliability analysis ## Call: alpha(x = with(estudio2012.64 0.11 0.16 0.16 0.15 ## ## Item statistics ## n r r.64 0.40 0.47 0.54 4. 4 y 5 cargan en un factor (MR2). ansev5))) ## ## Reliability analysis ## Call: alpha(x = with(estudio2012.06 0.28 0.99 plot(x) Los ítems 3.18 0.10 0.53 NA NA ## ansev2 0.50 0.40 1.97 ## ## Reliability if an item is dropped: ## raw_alpha std. cbind(ansev1. dolores e incapacidad de desconectarse).01 ## ansev5 0.77 0.13 0.41 0. cbind(ansev1.alpha G6(smc) average_r S/N ase mean sd ## 0.57 0.86 1.15 0.66 0. ansev4.53 0.53 0.74 0.3 0.17 0.cor r.53 NA NA ## ## Item statistics .00 ## Multiple R square of scores with factors 0.47 0. alpha(with(estudio2012.24 0.16 ## ansev4 0.47 0.58 0. ansev4.66 0.8 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## ansev3 0.18 0.4 1. el segundo factor son los ítems de insomnio durante este periodo.1 2.31 0.48 0. ansev2))) ## ## raw_alpha std.31 0.69 0. cbind(ansev3.4 ## ## lower alpha upper 95% confidence boundaries ## 0.14 3.20 0.4 1.alpha G6(smc) average_r S/N ase mean sd ## 0.17 ## ansev5 0.8 ## ansev4 111 0. El factor MR2 puede ser más propiamente llamado ansiedad en periodo de evaluaciones (irritable.08 0.alpha G6(smc) average_r S/N alpha se ## ansev1 0.28 0. ansev4. Un mayor puntaje en los ítems 1. estudio2012$ansev = with(estudio2012. (tolsex2) Las relaciones de pareja no heterosexuales son “anti naturales”.19 0.cor r. data. creo que lo mejor es ocupar solamente el primer factor sin incluir los ítems de insomnio.07 0. tolsex3.67 7. (tolsex4) Considero que el matrimonio debiera ser sólo entre un hombre y una mujer.23 0.87 0. Es común que las escalas incluyan ítems invertidos. y además ya tenemos otra escala para medir insomnio en general. fa(tolsex) ## Factor Analysis using method = minres ## Call: fa(r = tolsex) ## Standardized loadings (pattern matrix) based upon correlation matrix . (tolsex3) Las parejas del mismo sexo no deberían andar de la mano ni besarse en público. tolsex5)) fa.23 0.0 ## ansev2 111 0. la escala de “tolerancia hacia la diversidad sexual” tiene los siguientes ítems: (tolsex1) Me siento incómodo compartiendo socialmente con personas que son de distinta orientación sexual a la mía. ansev5). NA's ## 1.01 ## ansev2 0. na. estos ítems se agrupan claramente en un factor. Max. En realidad.10 0. Median Mean 3rd Qu.67 4. Veamos que pasa con estos ítems en un análisis factorial.rm=TRUE)) summary(estudio2012$ansev) ## Min.64 0.53 3.9 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## ansev1 0.06 0.16 0. 1st Qu.18 0.64 0.15 0. ¿qué hacer en este caso? La respuesta no está en los análisis estadísticos. 3 o 4 se asocia a una mayor intolerancia. tolsex2.00 1 Itemes invertidos.53 3.## n r r.07 0.parallel(tolsex) ## Parallel analysis suggests that the number of factors = 1 and the number of components = 1 A diferencia de las escalas que revisamos antes. Por ejemplo.frame(tolsex1.27 0. Por lo tanto. pero ciertamente no es buena. sino en un análisis conceptual y de los objetivos de investigación.33 4. donde un mayor puntaje en el item refleja un menor nivel en el constructo que se quiere medir. 2. Pero el quinto ítem está invertido: un mayor puntaje se asocia a una menor intolerancia.01 vemos que es usable.08 0.42 5. esta escala debiera llamarse “intolerancia” a la diversidad sexual. tolsex = with(estudio2012. Los dos ítems de insomnio (ansev1 y ansev2) no correlacionan muy bien.1 1.00 3.drop mean sd ## ansev1 111 0.08 0.12 0. tolsex4. (tolsex5) Me gustaría que cambiaran las leyes para promover un mayor respeto a las minorías sexuales.87 0.8 2. rowMeans(cbind(ansev3. alpha(tolsex) ## Warning: Some items were negatively correlated with total scale and were ## automatically reversed.63 1 ## ## MR1 ## SS loadings 2. ## ## The degrees of freedom for the null model are 10 and the objective function was 1.7 0.79 0.67 0.79 0.078 .38 with prob < 0.79 0.80 0.25 0.774 0.81 0.640 0.4 0.25).71 0.## MR1 h2 u2 com ## tolsex1 0. en la columna MR1 de los loadings estandarizados. Esto está indicado al comienzo de los resultados del análisis factorial.063 ## tolsex2 0.alpha G6(smc) average_r S/N alpha se ## tolsex1 0. su relación con el factor general es claramente menor al resto (0.12 with prob < 0.23 1 ## tolsex5 -0.48 ## ## Mean item complexity = 1 ## Test of the hypothesis that 1 factor is sufficient.2 ## The degrees of freedom for the model are 5 and the objective function was 0. Además.47 ## Fit based upon off diagonal values = 1 ## Measures of factor score adequacy ## MR1 ## Correlation of scores with factors 0.9 ## ## Reliability if an item is dropped: ## raw_alpha std.565 0.71 0.94 1 ## tolsex2 0.81 with Chi Square of 196.03 ## The df corrected root mean square of the residuals is 0.03 ## ## The root mean square of the residuals (RMSR) is 0.063 0.83 0.38 2. el ítem 1 parece no estar funcionando muy bien con el resto de la escala.88 0.alpha G6(smc) average_r S/N ase mean sd ## 0.41 ## Proportion Var 0.02 ## RMSEA index = 0 and the 90 % confidence intervals are NA 0.43 3.05 ## ## The harmonic number of observations is 111 with the empirical chi square 2.059 2.75 0. el ítem 5 tiene una relación negativa con el factor.43 1 ## tolsex4 0.2 1.69 0.61 0.75 plot(fa(tolsex)) Como debiera ser.57 5.102 ## BIC = -20.79 ## The total number of observations was 112 with MLE Chi Square = 3.367 0.36 1 ## tolsex3 0.68 ## ## Tucker Lewis Index of factoring reliability = 1.84 0. ## ## Reliability analysis ## Call: alpha(x = tolsex) ## ## raw_alpha std.94 ## Multiple R square of scores with factors 0. Si hacemos un análisis de confiabilidad.78 0.5 0.4 ## ## lower alpha upper 95% confidence boundaries ## 0.88 ## Minimum correlation of possible factor scores 0. 69 2.49 0. esta decisión tiene que ser conceptual también.75 0.38 2.19 3.43 3.05 0.08 0.0 1. vamos a aprovechar de cambiarle el nombre a “intolsex” (mayor puntaje mayor intolerancia) estudio2012$intolsex = with(estudio2012.junto a su nombre.4 0.01 ## tolsex5 0.10 0.55 2.07 0. 1st Qu.69 0. Max.00 7.04 0. 1st Qu.74 2. Median Mean 3rd Qu.36 2.08 0. ¡tenemos que invertir los valores de tolsex5! Lo más fácil es hacerlo directamente con la fórmula: Puntaje invertido = Máximo + Mínimo .cor r.81 0.00 1.70 0.04 0. A mí me parece adecuado eliminarlo.00 7.081 ## tolsex5.04 0. sino porque está midiendo algo ligeramente distinto -una reacción emocional vs.4 ## tolsex5. na.03 0.06 0.69 1.77 0.76 0.05 0.28 0.01 0. rowMeans(cbind(tolsex2.75 0.00 1.## tolsex3 0.02 0. pero quedaría mejor si se elimina el ítem 1 (.01 ## tolsex2 0.estudio2012$tolsex5 summary(estudio2012$tolsex5i) ## Min.25 2.drop mean sd ## tolsex1 111 0. no porque sea un mal ítem.85 0.08 0.072 ## ## Item statistics ## n r r.13 0.03 0. El alpha de la escala es bueno (.02 0.rm=TRUE)) summary(estudio2012$intolsex) ## Min.66 0.04 0.84 0.80 0. NA's ## 1.25 3.2 1. en todo caso.65 0.59 0.24 1.9 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## tolsex1 0. tolsex5i).01 ## tolsex3 0.Puntaje original. donde un mayor puntaje va a reflejar un menor nivel de tolerancia hacia la diversidad sexual.71 0.75 0.04 0.2 0.61 0.7 ## tolsex3 111 0.65 0. actitudes conservadoras más discursivas. Max. Por lo tanto.00 1 Ahora podemos calcular la escala.84). Median Mean 3rd Qu.58 0.00 1. Nuevamente.20 0.06 0.01 ## tolsex4 0.07 0.10 0.05 0.72 0.05 0.06 0.5 ## tolsex2 111 0.15 0.076 ## tolsex4 0. Antes de promediar los ítems.72 0.9 2.79). tolsex3.00 1.62 0.11 0. tolsex4. e indica que se invirtió el ítem con un signo . NA's ## 1.111 0.01 R automáticamente invierte el ítem 5. estudio2012$tolsex5i = 7 + 1 .9 1.00 2.1 0.5 ## tolsex4 111 0.9 1.04 0.00 1 .04 0. imprime un aviso en la consola. 0.69 0. como por ejemplo comparar la situación sentimental de hombres y mujeres: table(estudio2012$sitsentf. Chi-cuadrado Relaciones entre variables categóricas. Las siguientes secciones tratan en cambio sobre la estimación de lo que está ocurriendo en la población. estudio2012$generof) ## ## Mujer Hombre ## En una relacion 44 9 ## Es complicado 4 4 ## Soltero/a 33 14 ¿Cómo saber si estas dos variables están relacionadas? ¿Es más probable que los hombres tengan relaciones complicadas? El análisis que corresponde ocupar para contestar esta pregunta es un análisis de chi-cuadrado.Contraste de hipótesis y estimación de parámetros poblacionales Hasta ahora. ## ## Chi-squared test for given probabilities ## ## data: table(estudio2012$generof) ## X-squared = 27. df = 1. En las secciones anteriores vimos cómo producir una tabla para ver la cantidad de personas que pertenecen a ciertos grupos o categorías.75. p-value = 1. a partir de los datos muestrales. ## ## Mujer Hombre ## 82 27 chisq. que puede aplicarse a la frecuencia de una sola variable categórica.test(table(estudio2012$generof)) # Hace un análisis de chi-cuadrado con esta tabla. hemos visto una serie de análisis.test(). gráficos y tablas para visualizar la información obtenida en la muestra. table(estudio2012$sitsentf) ## ## En una relacion Es complicado Soltero/a ## 54 8 49 o hacer un cruce entre dos variables categóricas.379e-07 . o a un cruce de varias variables. La función para hacer un análisis de chi-cuadrado es chisq. table(estudio2012$generof) # Obtiene la cantidad de hombres y mujeres en la muestra. y requiere la información de una tabla de frecuencia -que puede obtenerse con table(). Por ejemplo. chisq.64.08). es decir.test(table(estudio2012$sitsentf. la relación entre estas variables no alcanza a ser estadísticamente significativa (x2 = 5.test(table(estudio2012$sitsentf. estudio2012$generof. Además.2003 La probabilidad de que esta muestra venga de una población donde el género no se relaciona con estar soltero(a) o en un una relación es mayor a . R imprime un mensaje advirtiendo que la estimación del chi- cuadrado puede ser incorrecta.75. vamos a asignar el resultado del análisis a un objeto llamado x2 (podríamos haber puesto cualquier nombre) x2 = chisq.64.07971 Como se observa en la consola. quienes además tienen más probabilidades de estar en relaciones complicadas. p = .059. para excluir ciertas categorías del análisis: table(estudio2012$sitsentf. df = 2. p < . Esto se debe a que hay muy pocas mujeres y muy pocos hombres (menos de 5) que tienen una relación complicada.A partir de este análisis de chi-cuadrado vemos que la probabilidad de que nuestra muestra venga de una población donde hay igual cantidad de hombres y mujeres es tremendamente baja (x2 = 27. . estudio2012$generof.05). exclude="Es complicado")) x2 ## ## Pearson's Chi-squared test with Yates' continuity correction ## ## data: table(estudio2012$sitsentf. estudio2012$generof) ## X-squared = 5. table(estudio2012$sitsentf. Esto nos indica que debemos rechazar esta hipótesis nula y concluir que en la carrera de psicología en nuestra universidad hay más mujeres que hombres.05 (x2 = 1. Los hombres y las mujeres que están estudiando psicología tienen la misma probabilidad de estar en una relación. por lo que no corresponde rechazar la hipótesis nula. La función table() tiene un argumento especialmente diseñado para estos casos. p-value = 0. estudio2012$generof) ## ## Mujer Hombre ## En una relacion 44 9 ## Es complicado 4 4 ## Soltero/a 33 14 Veamos si podemos generalizar esto a la población de estudiantes de psicología. exclude="Es complicado") ## ## Mujer Hombre ## En una relacion 44 9 ## Soltero/a 33 14 Esta vez. p-value = 0. estudio2012$generof)) ## Warning: Chi-squared approximation may be incorrect ## ## Pearson's Chi-squared test ## ## data: table(estudio2012$sitsentf. exclude = "Es complicado") ## X-squared = 1.2). df = 1. Al parecer las mujeres tienen menos probabilidades de estar solteras que los hombres. estudio2012$generof.05. p = . 19 ## Soltero/a 36. los valores que pueden obtenerse están listados en la página de ayuda. df = NA. Si bien ejecutar x2 # el nombre del objeto al que asignamos el análisis de chi-cuadrado ## ## Pearson's Chi-squared test with Yates' continuity correction ## ## data: table(estudio2012$sitsentf. podemos ejecutar x2$expected ## ## Mujer Hombre ## En una relacion 40. lo que es más adecuado cuando tenemos poco n. df = 1. Prueba t Prueba t para una muestra: . p-value = 0.059.test) # ver "Value" Estimación del promedio poblacional y relaciones entre variables categóricas y numéricas. estudio2012$generof).19 10.81 12. no hay una relación significativa entre género y situación sentimental. son objetos más complejos que los que hemos visto hasta ahora. p-value = 0. help(chisq.07996 El análisis de chi-cuadrado.También podríamos haber ocupado una simulación para calcular el valor de p. simulate.value=TRUE) ## ## Pearson's Chi-squared test with simulated p-value (based on 2000 ## replicates) ## ## data: table(estudio2012$sitsentf. estudio2012$generof) ## X-squared = 5.81 En cualquier análisis. Para obtener los valores esperados según la hipótesis nula. como la mayoría de los análisis que vamos a ver de ahora en adelante. para obtener la tabla de valores observados. exclude = "Es complicado") ## X-squared = 1. chisq. Por ejemplo. el objeto “x2” tiene más información. estudio2012$generof. podemos ocupar x2$observed ## ## Mujer Hombre ## En una relacion 44 9 ## Soltero/a 33 14 lo que es exactamente lo mismo que la tabla original con que hicimos el análisis. Para acceder a esta información se ocupa el mismo formato con que seleccionamos una variable en una base de datos.2003 nos entrega la información básica.test(table(estudio2012$sitsentf. El resultado es básicamente el mismo.p.64. 950 2.541 ## sample estimates: ## mean of x ## 2. df = 110. ansev4.test(estudio2012$intolsex. data.test(). Son estimaciones independientes del promedio poblacional en cada ítem.2e-16 ## alternative hypothesis: true mean is not equal to 4 ## 95 percent confidence interval: ## 1. La librería psych incluye un comando para hacer gráficos con barras de error ocupando intervalos de confianza. la hipótesis nula de esta prueba es que el promedio poblacional es igual a cero. eso son 16 ceros después de la coma). En caso de querer estimar los niveles poblacionales de una variable numérica. Por ejemplo.Estimación del promedio de la población. Para cambiar la hipótesis nula.541 ## sample estimates: ## mean of x ## 2. los datos de escala de intolerancia a la diversidad sexual t.2e-16.04.7)) Este gráfico puede ser una forma útil de comparar los niveles de diferentes variables considerando información de estadística inferencial. error. el nivel es bastante bajo. algo que por supuesto no tiene sentido en esta escala de 1 a 7.245 indican que el promedio poblacional está entre 1. eyes = FALSE.245 Obviamente. Considerando que la escala es de 1 a 7.bars(with(estudio2012.95 y 2.frame(ansev1.2e-16 ## alternative hypothesis: true mean is not equal to 0 ## 95 percent confidence interval: ## 1. ansev3. la probabilidad es tremendamente baja (p < 2.950 2. df = 110.test(estudio2012$intolsex) ## ## One Sample t-test ## ## data: estudio2012$intolsex ## t = 15.76. por ejemplo para estimar la probabilidad de que esta muestra venga de una población en que el promedio es cuatro (el punto medio de la escala). ylim=c(1. Por defecto. es necesario agregar el parámetro mu: t. mu=4) ## ## One Sample t-test ## ## data: estudio2012$intolsex ## t = -11.54 ocupando un intervalo de confianza de 95%. p-value < 2. ansev5)). pero es importante destacar que no es una prueba de hipótesis estadísticas. p-value < 2. ansev2. Prueba t para muestras independientes: . pueden hacer una prueba t para una muestra en esta variable con la función t. equal=TRUE) .48. t. y R automáticamente realiza el ajuste apropiado. t.2920 ## sample estimates: ## mean in group Mujer mean in group Hombre ## 2. es importante notar un par de aspectos más técnicos. p-value = 0.78. las mujeres muestran mayores niveles de intolerancia que los hombres (t(64)=2. p < . Para forzar una prueba t clásica se puede agregar el argumento t. La misma función que ocupamos en la sección anterior.483.1401 1. Al revisar los resultados de otras variables. pareciera que las mujeres tienden a ser más conservadoras que los hombres en esta población.676 Curiosamente.392 1.test(). var.05). A modo de ejemplo. p-value = 0.test(estudio2012$intolsex~estudio2012$generof) ## ## Welch Two Sample t-test ## ## data: estudio2012$intolsex by estudio2012$generof ## t = 2.test(estudio2012$intolsex~estudio2012$generof. table(estudio2012$orienpolf. lo que podría explicar las diferencias en tolerancia hacia la diversidad sexual. por ejemplo. como opiniones hacia el aborto y orientación política. y evaluar la hipótesis nula de que ambos tienen el mismo promedio en la población. df = 64. y no a los hombres y mujeres de chile. estudio2012$generof) ## ## Mujer Hombre ## Izquierda 10 8 ## Centro Izquierda 16 4 ## Centro 7 1 ## Centro Derecha 15 3 ## Derecha 18 0 Volviendo a la revisión del output de una prueba t de muestras independientes.2920 ## sample estimates: ## mean in group Mujer mean in group Hombre ## 2. estudiantes de psicología de nuestra universidad. Es importante recordar que estos resultados son generalizables a una población particular.1401 1.676 El título de esta prueba indica que se realizó una prueba t de Welch. puede ser ocupada para comparar los promedios de dos grupos de participantes.392 1.Comparación del promedio de dos grupos. podemos evaluar si los niveles de intolerancia a la diversidad sexual son diferentes según el género de los participantes: t.01562 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 0. El formato para hacer este análisis es el mismo que ya hemos visto otras veces: la variable dependiente predicha por la variable independiente (y~x).78.01562 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 0. Esto es porque las varianzas de los grupos no son iguales. df = 64.483.test(estudio2012$intolsex~estudio2012$generof) ## ## Welch Two Sample t-test ## ## data: estudio2012$intolsex by estudio2012$generof ## t = 2. En este estudio. Esto no es recomendado. ¡para eso existe este ajuste! Otro detalle es que esta función realiza por defecto un contraste de hipótesis bilateral. En caso de que se quiera hacer un contraste unilateral.392 1.## ## Two Sample t-test ## ## data: estudio2012$intolsex by estudio2012$generof ## t = 2. ¿Qué tanto puedes empatizar con ella en las siguientes situaciones?” (desde 1 = nada. la escala de empatía frente al aborto parece adecuada.483. abor4 Por razones económicas era incapaz de hacerme cargo de un .test(): paired=TRUE. Las situaciones presentadas fueron las siguientes: abor1 Mi embarazo era un riesgo grave para mi salud. abor3 Fui víctima de violación.test(estudio2012$intolsex~estudio2012$generof. lo que no siempre es cierto. alternative="greater") ## ## Welch Two Sample t-test ## ## data: estudio2012$intolsex by estudio2012$generof ## t = 2. df = 106.392 1. p-value = 0. la probabilidad asociada a la hipótesis nula en un contraste unilateral es simplemente la mitad de la probabilidad obtenida en un contraste bilateral. Prueba t para muestras dependientes Comparar el promedio poblacional de dos variables en un grupo. hasta 7 = mucho). pueden ocupar el argumento: t. p-value = 0. ya que los participantes tenían que contestar la misma pregunta pero referida a distintas situaciones: “Imagina que una mujer recientemente tuvo un aborto y te relata su experiencia.03124 1. df = 64.007811 ## alternative hypothesis: true difference in means is greater than 0 ## 95 percent confidence interval: ## 0.073.40086 ## sample estimates: ## mean in group Mujer mean in group Hombre ## 2. Para realizar una prueba t para muestras dependientes simplemente hay que agregar un argumento a la función t.78. tenerlo hubiera sido un recuerdo constante de mi experiencia traumática.676 que indica que deben asumirse varianzas iguales.676 Pero incluso aunque quieran hacer un contraste unilateral esto no es necesario. Esta prueba asume que las variables efectivamente son comparables.2349 Inf ## sample estimates: ## mean in group Mujer mean in group Hombre ## 2.04059 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 0. abor2 Mi hijo hubiese nacido con una enfermedad genética grave que lo condenaba a sufrir. 19 ## abor5 0. vamos a ocupar la escala de intuición: . Para estos análisis.51 1.test(estudio2012$abor1.81 - 0.83 6 5. estigmatizada por el resto de mi vida. por lo que podemos rechazar la hipótesis nula. al menos en esta población.01 5 4.60 2.0001283 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 0.51 ## abor2 2 111 4. abor4.frame(abor1. La probabilidad de obtener una diferencia mayor o igual a ésta si los promedios fueran iguales en la población es menor a .08 1.75 2. abor5 Hubiera sido una madre soltera.95 3 2.76 0.05 2.01 ## abor3 3 110 4.20 ## abor4 0.13 Dado que es la misma escala para cada situación.26 1.50 - 1.03 ## abor5 5 111 2. abor5))) ## vars n mean sd median trimmed mad min max range skew kurtosis ## abor1 1 111 5. La función para hacer esto en R es aov(). df = 110.03 1.00 1 7 6 1.6577 Sí. describe(data.17 ## abor2 0. ¿Produce más empatía una situación de riesgo grave para la salud de la madre que una situación donde se encuentra una enfermedad genética grave en el hijo(a)? t.97 1 7 6 0. los niveles de empatía reportados disminuyen progresivamente: with(estudio2012.hijo.19 ## abor3 0.40 1 1.48 1 7 6 -0. abor2. podemos comparar dos de ellas con una prueba t de muestras dependientes.38 1.9859 ## sample estimates: ## mean of the differences ## 0.97. p-value = 0.49 - 1.85 2.90 2. no hubiese podido abastecerlo ni en sus necesidades más básicas. En general.14 ## abor4 4 111 3.05.97 1 7 6 -0.07 5 5.97 1 7 6 -0.15 ## se ## abor1 0. estudio2012$abor2. Por ejemplo. ANOVA Simple Comparación de los promedios de múltiples grupos. Para comparar los promedios de más de dos grupos es necesario hacer un análisis de varianza. paired=TRUE) ## ## Paired t-test ## ## data: estudio2012$abor1 and estudio2012$abor2 ## t = 3. abor3.3294 0.51 - 1. 6 0. table(estudio2012$zodiaco) ## ## .67 0.37 0.19 0.57 0. intui3. intui3.65 0.44 3.62 0. como por ejemplo que me llamar? alguien.076 3.01 ## intui2 0.25 0. rowMeans(data.07 0. intui4.7 ## intui2 110 0.71 0. intui4 Si en una prueba o examen de alternativas no me acuerdo de la materia.frame(intui2.drop mean sd ## intui1 111 0.05 0.1 1.59 0.8 1. data.alpha G6(smc) average_r S/N ase mean sd ## 0.24 0.04 0. confío más en mis sentimientos e intuición que en argumentos racionales.21 0. data.07 0. intui2 A veces siento que puedo predecir lo que va a pasar antes de que suceda.28 1.55 0.19 0. porque “algo” me dice que es la respuesta correcta.67 0. intui4.4 1..cor r.094 ## intui3 0.30 1.09 0.12 0. intui5))) ## ## Reliability analysis ## Call: alpha(x = with(estudio2012. ## 2 ## Acuario (21 Enero .46 3.06 0. alpha(with(estudio2012.1 0.1 ## ## lower alpha upper 95% confidence boundaries ## 0.21 0.20 Abril) ## 7 ## Cancer (21 Junio ..68 0.7 1.7 0.08 0.82 ## ## Reliability if an item is dropped: ## raw_alpha std.02 ## intui3 0.67 0.69 0.6 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## intui1 0.14 0.091 ## ## Item statistics ## n r r.??? intui3 Siento que puedo sabercómo es una persona casi inmediatamente.11 0.084 ## intui2 0.092 ## intui5 0.20 0.08 0.55 0.16 0.34 2.21 0.9 1.18 0.19 0.14 0.19 0.60 0.5 0.51 3.05 0. intui2.intui1 Muchas veces tengo muy claro la decisión que voy a tomar.5 ## intui5 111 0.02 ## intui5 0.67 0.29 2.4 0.57 0. intui2.63 0.1 0.30 4.60 0. intui5 Para cosas realmente importantes.frame(intui1.23 0.05 0.54 0.15 0.6 ## intui4 110 0.7 1. intui5).28 1. estudio2012$intui = with(estudio2012.01 ## intui4 0. ## intui4.096 ## intui4 0.42 3.26 1.52 0.58 0. intui3.12 0.52 0. na. intui5))) ## ## raw_alpha std.18 0.22 Julio) .51 0.61 0.alpha G6(smc) average_r S/N alpha se ## intui1 0. aunque no podría explicar por qué.57 0. muchas veces puedo elegir de forma intuitiva.09 0.04 0.rm=TRUE)) ¿Está relacionada la intuición con el signo zodiacal? Primero tenemos que preparar la variable zodiaco.14 0.24 0. incluso antes de conversar con ella.9 ## intui3 111 0.63 0.62 0.01 Parece mejor eliminar el ítem 1.24 0.62 0.19 Febrero) ## 8 ## Aries (21 Marzo .frame(intui1.68 0.61 0. "Escorpion". "Capricornio")) barplot(table(estudio2012$zodiacof)) Ahora podemos hacer un ANOVA para ver si el signo zodiacal está relacionado con los niveles de intuición. "Aries". labels=c("Acuario". "Virgo".20 Junio) ## 9 ## Leo (23 Julio . "Sagitario". "Piscis". "Piscis (20 Febrero .20 Junio)".20 Abril)". "Capricornio (22 Diciembre .23 Octubre)".20 Marzo) ## 12 ## Sagitario (22 Noviembre . "Geminis (21 Mayo . "Libra (23 Septiembre . data = estudio2012) ## ## Terms: .19 Febrero)".20 Marzo)".20 Mayo) ## 12 ## Virgo (23 Agosto .20 Enero)").21 Diciembre)". "Aries (21 Marzo .23 Octubre) ## 11 ## Piscis (20 Febrero . "Libra".21 Noviembre)". "Cancer".22 Julio)".22 Septiembre)". "Leo (23 Julio . "Sagitario (22 Noviembre . "Tauro (21 Abril .21 Diciembre) ## 10 ## Tauro (21 Abril . "Tauro". "Leo". aov(intui~zodiacof.22 Agosto)".22 Septiembre) ## 9 estudio2012$zodiacof = factor(estudio2012$zodiaco.## 10 ## Capricornio (22 Diciembre . "Geminis".20 Mayo)".20 Enero) ## 8 ## Escorpion (24 Octubre . levels=c("Acuario (21 Enero . Ejecutar simplemente.21 Noviembre) ## 7 ## Geminis (21 Mayo . "Escorpion (24 Octubre .22 Agosto) ## 7 ## Libra (23 Septiembre . "Virgo (23 Agosto . "Cancer (21 Junio . data=estudio2012) ## Call: ## aov(formula = intui ~ zodiacof. data=estudio2012) .33). podemos concluir que no existe una relación entre el signo zodiacal y los niveles de intuición (F(11. estudio2012$mencionf = factor(estudio2012$mencion.com/question/index?qid=20080124235717AAdSk0S Esto no parece cumplirse en esta muestra. "Educacional". summary(aov) ## Df Sum Sq Mean Sq F value Pr(>F) ## zodiacof 11 17.59 1.15. data=estudio2012) Ahora podemos ocupar la función summary() para ver el resultado de este análisis. ver http://answers.98) = 1. of Freedom 11 98 ## ## Residual standard error: 1. que vamos a llamar “aov” (podemos poner cualquier nombre). vamos a sacarlos del análisis. "Laboral/Organizacional")) Ahora podemos hacer el ANOVA aov = aov(intui~mencionf. boxplot(intui~zodiacof.178 ## Estimated effects may be unbalanced ## 2 observations deleted due to missingness nos entrega una tabla con la suma de cuadrados y los grados de libertad. Quizás la intuición está relacionada con la mención que quieren elegir los alumnos de psicología… table(estudio2012$mencion) ## ## Clinica Comunitaria ## 4 65 5 ## De la salud Educacional Laboral/Organizacional ## 3 13 22 Dado que desgraciadamente hay muy pocas personas que reportan estar interesados en psicología comunitaria o psicología de la salud. p = .0 1.## zodiacof Residuals ## Sum of Squares 17. data=estudio2012) Los participantes del signo Cáncer son los que reportan mayores niveles de intuición.15 0.54 135. lo que es consistente con la descripción entregada en http://www. Escorpión y Picis son los signos más intuitivos (asociados al agua). Cáncer.htm De acuerdo a Astro Lady.com/cancer.5 1. Para este análisis.yahoo.33 ## Residuals 98 136.astrology-online. en todo caso.39 ## 2 observations deleted due to missingness En base a los resultados del ANOVA. aov = aov(intui~zodiacof. Pero es importante notar que los n de cada grupo son muy pequeños para este análisis.98 ## Deg. lo que no es suficiente información. levels=c("Clinica". Si vemos la información descriptiva. es absolutamente necesario asignar el resultado a un objeto. 0111. data=estudio2012) parece indicar que las personas que quieren tomar psicología organizacional reportan un menor nivel de intuición. Los alumnos interesados en clínica reportan mayores niveles de intuición que los interesados en organizacional (p = .05 '.001 '**' 0.84761 -1. Uno de los supuestos del ANOVA es que las varianzas de los grupos son iguales.9181 0.91 0. que requiere el resultado de un análisis de varianza.0890 0.0228 ## Laboral/Organizacional-Educacional -0.summary(aov) ## Df Sum Sq Mean Sq F value Pr(>F) ## mencionf 2 10.1021 Al hacer las comparaciones entre estos grupos.7771 0.4652 -0.9165 help(levene.2 1. vemos que la única diferencia estadísticamente significativa es la comparación entre los alumnos que quieren especializarse en clínica y los alumnos que quieren especializarse en psicología organizacional.1 ' ' 1 ## 12 observations deleted due to missingness Esta vez. estudio2012$mencionf) ## ## modified robust Brown-Forsythe Levene-type test based on the ## absolute deviations from the median ## ## data: estudio2012$intui ## Test Statistic = 0.test(estudio2012$intui.packages("lawstat") # requiere estar conectado a internet library(lawstat) ## Loading required package: mvtnorm ## Loading required package: VGAM ## Loading required package: splines ## Loading required package: stats4 ## ## Attaching package: 'VGAM' ## ## The following objects are masked from 'package:psych': ## ## fisherz. TukeyHSD(aov) ## Tukey multiple comparisons of means ## 95% family-wise confidence level ## ## Fit: aov(formula = intui ~ mencionf.023 * ## Residuals 97 133. Para evaluar si se cumple este supuesto. Pero qué grupos son diferentes de cuáles? La información descriptiva boxplot(intui~mencionf.test() de la librería lawstat: install.77710 -1. data = estudio2012) ## ## $mencionf ## diff lwr upr p adj ## Educacional-Clinica 0. pueden hacer una prueba de levene ocupando la función levene.test) .' 0. codes: 0 '***' 0.37 3.7 5. los resultados si son estadísticamente significativos.37 ## --- ## Signif. p-value = 0. ocupando la función TukeyHSD().02).1283 0.01 '*' 0.8235 0.07051 -0.9786 ## Laboral/Organizacional-Clinica -0. Para evaluar qué grupos presentan diferencias estadísticamente significativas es necesario hacer un test de Tukey. logit levene. . "Adjusted R-squared": 0.lm() en el objeto que creamos para el análisis.56. corresponde hacer un ANOVA de Welch. p-value = 0. R no incluye por defecto el R2 en el output de ANOVA.06 ## ## Call: ## aov(formula = intui ~ mencionf.01 '*' 0.6218 -0. Nuevamente sería ideal tener más n del que tenemos en este estudio.20 0. Adjusted R-squared: 0.63 <2e-16 *** ## mencionfEducacional 0.0416 help(oneway. por lo que podemos asumir que las varianzas de los grupos en la población efectivamente son iguales.8447 -0. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2. y evaluar la interacción entre estas variables con el formato aov(variable dependiente~factor1*factor2).0234 En este caso.2891 -2.3561 0.1 ' ' 1 ## ## Residual standard error: 1.17 on 97 degrees of freedom ## (12 observations deleted due to missingness) ## Multiple R-squared: 0.8718 0.00.91 on 2 and 97 DF.69 0.test) Estos resultados se reportan así: F de Welch (2. summary. with(estudio2012.0745. num df = 2. para obtenerlo.test(intui~mencionf. denom df = 28. data=estudio2012) ## ## One-way analysis of means (not assuming equal variances) ## ## data: intui and mencionf ## F = 3.8782 2. especialmente para evaluar la interacción entre los dos factores pero vamos a ver un ejemplo de todas formas.lm(aov) # ver al final.7771 0. Desgraciadamente. Si las varianzas fueran diferentes.63.0555 ## F-statistic: 3.0705 0.4053 ## ## Coefficients: ## Estimate Std.En este caso.' 0.561. la prueba no es estadísticamente significativa.0947 0.001 '**' 0. Error t value Pr(>|t|) ## (Intercept) 3. la mención preferida explica aproximadamente un 6% de la varianza en intuición.05.8434 ## mencionfLaboral/Organizacional -0. p-value: 0. que no asume varianzas iguales: oneway. ANOVA Factorial Relación entre una variable numérica y múltiples variables categóricas. podemos ocupar la función summary. codes: 0 '***' 0. p < .63) = 3.0085 ** ## --- ## Signif. Hagamos primero un gráfico para ver los descriptivos. La función aov() también permite agregar más de una variable categórica.1454 26. 28. agregando género al análisis que acabamos de hacer.05 '. 50 ## rep 49.3 5.05).' 0.plot(generof. para mención y también para la interacción entre estos dos factores.942 3.000 22.095 ## rep 64.001 '**' 0.413 ## Residuals 93 122.00 ## rep 12.05). donde las personas interesadas en especializarse en clínica reportan mayores niveles de intuición (F(2. y de mención.01 '*' 0.000 ## ## mencionf:generof ## generof ## mencionf Mujer Hombre ## Clinica 3. donde los hombres reportan menos intuición que las mujeres (F(1.93) = 6.34.000 ## ## generof ## Mujer Hombre ## 3.7 1. hay un efecto principal de género.tables().19 0. aunque típicamente las coparaciones uno a uno entre las combinaciones de factores no se reportan.1 ' ' 1 ## 13 observations deleted due to missingness Si bien al parecer el género tiene un efecto más grande en los estudiantes interesados en psicología educacional.86.00 Ahora el test de Tukey va a incluir comparaciones múltiples para género. aov = aov(intui~mencionf*generof.92 0. p < .000 13.18 0. También pueden pedir los descriptivos para cada factor y sus interacciones con model.17 3.854 3. En cambio.93) = 10. codes: 0 '***' 0.86 5.10 2. p < .00 9. lo que además tiene la ventaja de que incluye el n de cada grupo (rep).89 0.025 * ## mencionf:generof 2 2.00 15.68 ## rep 13.000 25.697 ## ## mencionf ## Clinica Educacional Laboral/Organizacional ## 3.00 ## Laboral/Organizacional 3.tables(aov. la interacción entre estos dos factores no es estadísticamente significativa. Solamente una de las personas que está interesada en psicología educacional es hombre. TukeyHSD(aov) ## Tukey multiple comparisons of means ## 95% family-wise confidence level .00 ## Educacional 4.9 6. intui)) Y ahora el análisis de varianza. mencionf.00 1.05 '.38 2. "means") ## Tables of means ## Grand mean ## ## 3.846 3. interaction.4 1. model.32 ## --- ## Signif. data=estudio2012) summary(aov) ## Df Sum Sq Mean Sq F value Pr(>F) ## mencionf 2 10.023 * ## generof 1 6.96 3.256 ## rep 74. 4990 ## Laboral/Organizacional:Mujer-Educacional:Mujer -0.2336 ## Laboral/Organizacional:Hombre-Educacional:Hombre 0.52389 0.9656 ## Laboral/Organizacional-Clinica -0.9024 ## Clinica:Hombre-Laboral/Organizacional:Mujer 0.7443 0.0238 ## Laboral/Organizacional-Educacional -0.7196 - 2.4966 .7517 ## Educacional:Hombre-Educacional:Mujer 1.08322 0.4282 - 2.41439 0.1154 - 1.46499 0.8989 ## Educacional:Hombre-Educacional:Mujer -2.8241 - 2.0308 ## Laboral/Organizacional:Mujer-Educacional:Mujer 0.5410 ## Laboral/Organizacional:Hombre-Clinica:Mujer -0.6237 ## Clinica:Hombre-Educacional:Mujer 0.1042 - 5.84761 -1.06218 0.0289 ## ## $`mencionf:generof` ## diff lwr ## Educacional:Mujer-Clinica:Mujer 0.9989 ## Laboral/Organizacional:Mujer-Clinica:Mujer 0. data = estudio2012) ## ## $mencionf ## diff lwr upr p adj ## Educacional-Clinica 0.6042 - 1.5837 ## Laboral/Organizacional:Hombre-Educacional:Mujer -1.92056 0.61873 0.4626 - 1.1416 - 0.5899 -1.5924 ## Clinica:Hombre-Clinica:Mujer 0.21834 0.9527 ## Laboral/Organizacional:Hombre-Clinica:Hombre -0.8538 ## Laboral/Organizacional:Hombre-Laboral/Organizacional:Mujer -0.5780 - 1.4491 ## Educacional:Hombre-Clinica:Mujer -1.7479 ## Educacional:Hombre-Clinica:Mujer 1.9352 ## Laboral/Organizacional:Mujer-Clinica:Mujer -0.3846 - 4.0935 ## ## $generof ## diff lwr upr p adj ## Hombre-Mujer -0.07429 0.118 -0.69059 0.1514 ## Educacional:Hombre-Laboral/Organizacional:Mujer -1.1583 ## Educacional:Hombre-Clinica:Hombre -1.4357 -0.2867 - 2.8479 ## upr p adj ## Educacional:Mujer-Clinica:Mujer 1.9626 - 5.8048 0.75947 -1.37538 0.08814 -0.## ## Fit: aov(formula = intui ~ mencionf * generof.5000 - 4.6759 - 2.6209 ## Clinica:Hombre-Clinica:Mujer -0.10960 0.3396 ## Laboral/Organizacional:Hombre-Clinica:Mujer -1.7087 - 2.0578 ## Clinica:Hombre-Educacional:Mujer -0. 27256 -2. basta reemplazar el signo * por un +. Error t value Pr(>|t|) ## (Intercept) 3.128 0. ya que normalmente no nos interesan sus interacciones.26 0.38217 0.026 * ## generofHombre -0.' 0.08462 0.05 '.58547 0.28 0.35173 -0. Adjusted R-squared: 0.65081 0.750 -0. codes: 0 '***' 0.023 * ## generof 1 6.001 '**' 0.8035 ## Laboral/Organizacional:Hombre-Clinica:Hombre 0. .0632 ## Clinica:Hombre-Laboral/Organizacional:Mujer 1.05 '.9998 ## Educacional:Hombre-Laboral/Organizacional:Mujer 2. con +.47 <2e-16 *** ## mencionfEducacional -0.5345 ## Laboral/Organizacional:Hombre-Educacional:Hombre 4.001 '**' 0.978 ## mencionfLaboral/Organizacional -0. p-value: 0.03 0.01 '*' 0.04590 0.025 * ## --- ## Signif. simplemente puede agregarse esta variable como predictor en la función aov().## Laboral/Organizacional:Hombre-Educacional:Mujer 0.17 3.95267 0.372 ## ## Coefficients: ## Estimate Std.3 5.0931 ## F-statistic: 4.1 ' ' 1 ## ## Residual standard error: 1.025 * ## Residuals 95 125.35 on 3 and 95 DF.21 0.1 1.9 6.15 on 95 degrees of freedom ## (13 observations deleted due to missingness) ## Multiple R-squared: 0.00642 ANCOVA Para hacer un ancova y controlar estadísticamente por el efecto de una variable continua.99993 0.1 ' ' 1 ## 13 observations deleted due to missingness El anova simple con mención explicaba un 6% de la varianza en los niveles de intuición.19980 0.93 0. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2.74095 0. Al incluir género el nivel de varianza explicada es ahora un 9%.28757 -2.' 0.8538 ## Laboral/Organizacional:Hombre-Laboral/Organizacional:Mujer 0.121.32 ## --- ## Signif.750 2.745 -0. aov = aov(intui~mencionf+generof.62191 0.7133 ## Educacional:Hombre-Clinica:Hombre 1.lm(aov) ## ## Call: ## aov(formula = intui ~ mencionf + generof. summary. codes: 0 '***' 0.86 5.00978 0.9934 Para hacer un anova con múltiples factores sin incluir sus interacciones.01 '*' 0.15702 25. data=estudio2012) summary(aov) ## Df Sum Sq Mean Sq F value Pr(>F) ## mencionf 2 10. por lo que probablemente es más práctica que cor() para obtener una correlación. Prueba estadística para correlaciones. controlando por z.3545 Correlación parcial Para hacer una correlación parcial entre x e y. p-value = 6.35. p < . Simplemente pueden reportar la mitad de p cuando el contraste es unilateral.0001349 ## alternative hypothesis: true correlation is not equal to 0 ## 95 percent confidence interval: ## 0. df = 109.3545 Para saber si esta correlación es estadísticamente significativa. lo que no es posible con cor. la función que hay que ocupar es cor. Al igual que en una prueba t (de hecho esto es una prueba t) podemos hacer una hipótesis unilateral o bilateral.2092 1. df = 109.obs") ## [1] 0. entre .747e-05 ## alternative hypothesis: true correlation is greater than 0 ## 95 percent confidence interval: ## 0.01). use = "pairwise.test().0000 ## sample estimates: ## cor ## 0. Aún así. En la sección de descriptivos.complete. por lo que vamos a . p-value = 0. simplemente tienen que agregar alternative=“greater” (o “less”) a la función cor. El output de esta prueba nos entrega la significación estadística (r = . y también un intervalo de confianza para la correlación.test(estudio2012$insom. cor.5074 ## sample estimates: ## cor ## 0.1800 0.Relaciones entre variables lineales.18 y . estudio2012$cinsom. y ocupar la función pcor. Esta función simplemente no acepta observaciones con NAs. alternative="greater") ## ## Pearson's product-moment correlation ## ## data: estudio2012$insom and estudio2012$cinsom ## t = 3.test().50. la gracia de cor es que permite hacer una matriz de correlaciones. vimos que era posible obtener el coeficiente de correlación entre dos variables continuas con la función cor(): cor(estudio2012$insom. En caso de que tengan una hipótesis unilateral.958.958. En general esto no es necesario. estudio2012$cinsom. es necesario instalar la librería ppcor. estudio2012$cinsom) ## ## Pearson's product-moment correlation ## ## data: estudio2012$insom and estudio2012$cinsom ## t = 3.test(). En este caso.test(estudio2012$insom.3545 Esta función no requiere especificar que deben omitirse los participantes con NA. tener que procesar un poco nuestra base de datos.packages("ppcor") # Primero tenemos que instalar library(ppcor) # y cargar la librería ppcor La función pcor.:5. corpar$cinsom) ## estimate p. corpar = with(estudio2012.00 Min. náuseas.00 Max.cases(corpar).00 ## 1st Qu.41 Mean :3. para simplificar las cosas.:4.cases”: corpar = corpar[complete.:2. :7. :1. data.:5.97 ## 3rd Qu.test(x.frame(insom. que vamos a llamar corpar. de estómago. z).00 Max. corpar$ansev. :7. streu3 Siento que tengo tantas responsabilidades académicas que no logro . La escala tiene los siguientes ítems: streu1 Siento que no me alcanza el tiempo para cumplir con todas mis responsabilidades académicas.00 ## Median :3.00 ## Mean :3. cinsom)) Una vez hecho esto. ] Ahora que tenemos una base de datos que no tiene ningún NA. y. El formato de esta función es exactamente el mismo: lm(variable dependiente~predictor1+predictor2).33 3rd Qu.25 Mean :4. vamos a crear una nueva base de datos incluyendo Únicamente las variables insom. ansev y cinsom. etc. ansev. summary(corpar) ## insom ansev cinsom ## Min.00 vamos a revisar la correlación entre insomnio y ansiedad ante evaluaciones. que podemos usar para predecir los niveles de insomnio. El procedimiento que vamos a ocupar se aplica a cualquier otra situación en que queramos sacar de una base de datos a las personas que no contestaron algunas de las variables. :1.test(corpar$insom.308 110 1 pearson La correlación se mantiene prácticamente igual al controlar por conductas negativas del sueño.00 1st Qu. install.33 1st Qu. así que vale la pena revisarlo de todas formas. :1.:3. la función aov() ocupa la función básica para hacer modelos de regresión: lm().67 3rd Qu.) debido a la cantidad de actividades que debo realizar.test() ocupa el formato pcor.00 Median :4. pcor. Una de las escalas que no hemos ocupado es la de estrés universitario. lo que nos da cierta indicación de que la relación entre insomnio y ansiedad en periodos de evaluaciones no puede ser explicada por esta variable. streu2 Siento molestias físicas (dolor de cabeza.50 ## Max.67 Median :4.00 Min. :7. De hecho.:2.647e-05 4. controlando por conductas negativas del sueño. donde z es la variable que queremos controlar. podemos seleccionar Únicamente a las personas que efectivamente tienen puntajes en estas tres variables.3845 1. Regresión Hacer regresión en R es exactamente lo mismo que hacer un ANOVA. ocupando el argumento “complete. Primero.value statistic n gp Method ## 1 0. 16 0 ## streu5 0. streu5). ¿Podemos predecir los niveles de insomnio a partir de los niveles de estrés universitario reportados por los participantes? La función lm() funciona igual que aov().09 0.1 2.12 0.070 ## streu5 0.78 0.0 ## streu4 112 0.09 0.83 0. data. y también es necesario asignar el resultado a un objeto.12 0.75 0.5 5 0. lm = lm(insom~streu.79 0. que ahora vamos a llamar lm.94 ## ## Reliability if an item is dropped: ## raw_alpha std.76 0. streu5))) ## ## Reliability analysis ## Call: alpha(x = with(estudio2012.46 5. Max.0 1.21 0.48 3. 1st Qu.15 0. streu2.8 ## ## Non missing response frequency for each item ## 1 2 3 4 5 6 7 miss ## streu1 0.20 0.60 6. La confiabilidad es buena.76 0.19 0.00 Noten que el promedio está claramente por sobre el punto medio de la escala.9 1.7 0.83 0. streu2.76 0.drop mean sd ## streu1 112 0.41 5.17 0. ## streu4. alpha(with(estudio2012.4).86 0. streu3.35 4.19 0.069 ## streu3 0.21 0.47 3.frame(streu1.07 0.7 ## streu2 112 0.05 0.61 0.21 0.77 0. streu2.73 0.78 0. ## 1.cor r.15 0.44 0.8 1.12 0.24 0.8 ## streu5 112 0. por lo que prefiero incluirlo de todas formas.12 0.48 3.12 0.85 0.4 ## ## lower alpha upper 95% confidence boundaries ## 0.6 0.5 1.21 0 y aunque eliminar el primer ítem mejoraría un poco el alpha.13 0 ## streu4 0.40 3.18 0.06 0.50 4.17 0. streu4 Cuando pienso en todas las actividades que tengo que hacer me pongo irritable.alpha G6(smc) average_r S/N alpha se ## streu1 0.069 ## streu4 0.alpha G6(smc) average_r S/N ase mean sd ## 0.79 0.01 0.0 0. estudio2012$streu = with(estudio2012.83 0.80 0.frame(streu1.76 0. rowMeans(data.84 0.12 0 ## streu3 0.81 0.5 1.059 ## streu2 0.86 0. streu3. streu4. Median Mean 3rd Qu.11 0.79 0. streu5))) ## ## raw_alpha std.11 0.80 0.13 0.069 ## ## Item statistics ## n r r.73 4.4 0. data=estudio2012) .76 0.69 4.053 4. la correlación del ítem con el total es adecuada (.frame(streu1.7 0.9 ## streu3 112 0. streu5 Siento mucha presión para cumplir con todas mis responsabilidades en la universidad.79 0.68 4.60 7.rm=TRUE)) summary(estudio2012$streu) ## Min.46 3.“desconectarme” en mi tiempo libre. streu4.77 0.77 0.11 0.27 0 ## streu2 0.08 0. streu3.80 0.83 0.68 3.13 0.19 0. data. na. Error t value Pr(>|t|) ## (Intercept) 1.00160 ** ## --- ## Signif.' 0. El output entrega los coeficientes no estandarizados: un punto en la escala de estrés se asocia (en general) a un aumento de .35 puntos en la escala de insomnio.504 3.0016 ** ## --- ## Signif.24 0.1 ' ' 1 ## ## Residual standard error: 1. data = datosz) ## ## Residuals: ## Min 1Q Median 3Q Max ## -1. Adjusted R-squared: 0.29618 0. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2. Si bien no es complicado hacer esto de forma manual. o definir cualquier otro valor para el promedio y la desviación estándar de una variable.0016 El resultado de este análisis indica que efectivamente los niveles de estrés universitario predicen los niveles de insomnio de forma significativa.05 '.225 0. data=datosz) # La misma regresión que hicimos antes # pero con puntajes z summary(lmz) # Ahora los coeficientes son betas estandarizados ## ## Call: ## lm(formula = insom ~ streu.01 '*' 0.00096 *** ## streu 0. sd = 1)) lmz = lm(insom~streu. La librería psych incluye una función para convertir a puntaje z. plot(estudio2012$streu. streu).00272 0.05 '. probablemente la opción más práctica es ocupar variables estandarizadas (puntajes z) desde un comienzo.001 '**' 0. col="red") lm() no entrega los coeficientes estandarizados.5 on 1 and 109 DF.347 0.09108 -0. rescale(cbind(insom.664 -0.24 0.664 ## ## Coefficients: ## Estimate Std.01 '*' 0.39 0. el resultado de este análisis puede ser ocupado para dibujar la línea de regresión sobre un dispersiograma que muestra la relación entre las variables. codes: 0 '***' 0.001 '**' 0.795 -1. Como vimos en la sección de descriptivos. datosz = with(estudio2012.61 on 109 degrees of freedom ## (1 observation deleted due to missingness) ## Multiple R-squared: 0.378 1.1 ' ' 1 ## . codes: 0 '***' 0.032 3.0793 ## F-statistic: 10.0877.09151 3. p-value: 0.181 ## ## Coefficients: ## Estimate Std.107 3. data=estudio2012).799 -0.614 2.9762 ## streu 0. estudio2012$insom) abline(lm(insom~streu. mean = 0.summary(lm) ## ## Call: ## lm(formula = insom ~ streu. Error t value Pr(>|t|) ## (Intercept) -0.343 -0.' 0.710 0.03 0. 0793 ## F-statistic: 10. Una forma de evaluar mediación es haciendo tres regresiones. data=estudio2012) summary(lm1) ## ## Call: ## lm(formula = insom ~ streu.0675 0.347 0.' 0. p-value: 0.los niveles de intuición no predicen los niveles de insomnio. simplemente hay que agregar otros predictores ocupando + (a no ser que quieran evaluar también la interacción entre dos predictores).032 3.56 on 106 degrees of freedom ## (2 observations deleted due to missingness) ## Multiple R-squared: 0.01 '*' 0.00096 *** ## streu 0.5 on 1 and 109 DF.0877.53 0.24 0.19 0. Adjusted R-squared: 0. lm1 = lm(insom~streu.1355 0.50 0.05 '.4295 0. y esto genera problemas de sueño (insom) justamente porque disminuye la capacidad de enfrentar tranquilamente los periodos de evaluaciones (ansev). p-value: 0.001 '**' 0.1297 ## streu 0.343 -0.6195 ## ansev 0.## Residual standard error: 0. y - como es esperable. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2.986 3.143 ## F-statistic: 7. La variable independiente predice la variable dependiente. Es perfectamente posible entender ansiedad en periodo de evaluaciones como un mediador del efecto de estrés universitario en insomnio. por ejemplo porque tomaron muchos ramos.1271 0.710 0.1347 3.6544 1.378 1.39 0.814 -1. data=estudio2012) summary(lm) ## ## Call: ## lm(formula = insom ~ streu + ansev + intui. Error t value Pr(>|t|) ## (Intercept) 0.0019 ** ## intui 0.9029 ## --- ## Signif.9994 0.96 on 109 degrees of freedom ## (1 observation deleted due to missingness) ## Multiple R-squared: 0. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2.107 3.014 -0.664 ## ## Coefficients: ## Estimate Std.0016 Regesión múltiple Para hacer una regresión múltiple.166.795 -1.1 ' ' 1 ## ## Residual standard error: 1.714 ## ## Coefficients: ## Estimate Std.12 0.257 0.504 3. La idea es que las personas pueden tener más o menos estrés universitario (streu). Adjusted R-squared: 0.0155 0. codes: 0 '***' 0. mostrando que 1.00160 ** ## --- . Error t value Pr(>|t|) ## (Intercept) 1. lm = lm(insom~streu+ansev+intui.06 on 3 and 106 DF.000227 Al incluir ansiedad en periodo de evaluaciones el efecto de estrés universitario deja de ser significativo. 9e-06 *** ## streu 0.' 0.975 3. El efecto de la variable independiente deja de ser significativo al incluir el mediador. La variable independiente predice el mediador.39.01 '*' 0. .5277 1.001 '**' 0.0500 * ## ansev 0.1342 0. p-value: 5.7 on 2 and 107 DF.1 ' ' 1 ## ## Residual standard error: 1.0018 ** ## streu 0.6242 0.5e-13 *** ## --- ## Signif.0793 ## F-statistic: 10.884 2.55 on 107 degrees of freedom ## (2 observations deleted due to missingness) ## Multiple R-squared: 0. p-value: 2.570 ## ## Coefficients: ## Estimate Std.024 -0.98 0.1 ' ' 1 ## ## Residual standard error: 1. Error t value Pr(>|t|) ## (Intercept) 1.6412 0.0463 0.805 -1. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2.05 '.34 2.267 0.6069 ## --- ## Signif.0748 8.001 '**' 0.0692 0.05 '. codes: 0 '***' 0.01 '*' 0. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2. Adjusted R-squared: 0.0877. Adjusted R-squared: 0.61 on 109 degrees of freedom ## (1 observation deleted due to missingness) ## Multiple R-squared: 0.4300 0.' 0.001 '**' 0.91e-05 También es posible que el efecto de la variable independiente siga siendo significativo.05 '.1340 3. lm3 = lm(insom~ansev+streu.805 -0. pero se observe una reducción importante. que incluye funciones para análisis más sofisticados de mediación.' 0. codes: 0 '***' 0.3499 4.178 0.151 ## F-statistic: 10.682 ## ## Coefficients: ## Estimate Std. data=estudio2012) summary(lm3) ## ## Call: ## lm(formula = insom ~ ansev + streu. lm2 = lm(ansev~streu.01 '*' 0.5 on 1 and 109 DF. Adjusted R-squared: 0.13 on 109 degrees of freedom ## (1 observation deleted due to missingness) ## Multiple R-squared: 0.## Signif.52 0.384 ## F-statistic: 69.0016 1.1 ' ' 1 ## ## Residual standard error: 1. p-value: 0.21 0. Error t value Pr(>|t|) ## (Intercept) 1. Más abajo vamos a ocupar la librería QuantPsyc.6 on 1 and 109 DF.638 -0.46e-13 1.69 7. codes: 0 '***' 0. data=estudio2012) summary(lm2) ## ## Call: ## lm(formula = ansev ~ streu.166. na.49390 ## --- ## Signif.mean(estudio2012$streu. Regresiones y ANOVA En R.2695 0. o simplemente estandarizar los puntajes con rescale() como hicimos antes.18. Error t value Pr(>|t|) ## (Intercept) 3.2586 0. Por ejemplo.05 '. De hecho. estudio2012$streuc = estudio2012$streu . A modo de ejemplo.56 0.087 0.mean(estudio2012$cinsom.0349 0. La consecuencia práctica que tiene esto es que pueden agregar tranquilamente predictores categóricos a lm() y predictores continuos a aov().2821 0. tanto aov() como lm() permiten agregar predictores continuos o categóricos. Para hacer esto podemos crear otra variable restando el promedio a la variable original. con la importante excepción de que los predictores tienen que estar centrados.41 0. data=estudio2012) summary(lm) ## ## Call: ## lm(formula = insom ~ streuc * cinsomc.Interacciones entre variables continuas Incluir interacciones en ecuaciones de regresión es prácticamente igual que en ANOVAs. lm = lm(insom~streuc*cinsomc.292 ## ## Coefficients: ## Estimate Std.54 on 107 degrees of freedom ## (1 observation deleted due to missingness) ## Multiple R-squared: 0. el hecho de que las regresiones lineales y los ANOVA son lo mismo es explícito: aov() simplemente hace un modelo ocupando lm() y lo reporta como es tradicional en los análisis de varianza.81 on 3 and 107 DF. las conductas asociadas a baja calidad del sueño predicen los niveles de insomnio.001 '**' 0. p-value: 9.0759 3. Adjusted R-squared: 0. podemos pedir el siguiente modelo. Es decir.1053 2.1497 21. Quizás el estrés universitario afecta menos a las personas que evitan ver televisión hasta tarde. donde se incluyen genero y situación sentimental como predictores de insomnio. En el caso de las variables categóricas R automáticamente crea las variables dicotómicas que sean necesarias. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -3. para incluir la interacción entre los dos predictores ya centrados. vamos a incluir la interacción entre estrés universitario y conductas negativas del sueño.00092 *** ## streuc:cinsomc -0.' 0.92 < 2e-16 *** ## streuc 0.987 -0. na.826 4.rm = TRUE) estudio2012$cinsomc = estudio2012$cinsom .01 '*' 0.01187 * ## cinsomc 0.69 0. Pero la interacción entre estrés universitario y estas conductas no es estadísticamente significativa.157 ## F-statistic: 7.21e-05 Como es esperable. su promedio debe ser 0. codes: 0 '***' 0.rm = TRUE) Ahora el modelo de regresión incluye un * en vez de un +.071 -0.1 ' ' 1 ## ## Residual standard error: 1. .0508 -0. 1312 0.31 on 5 and 102 DF.134 ## F-statistic: 4. pero el efecto no es significativo. Adjusted R-squared: 0.56 on 102 degrees of freedom ## (4 observations deleted due to missingness) ## Multiple R-squared: 0.01 '*' 0. Además estar tener una situación sentimental “complicada” (vs. Los anexos incluyen un poco más de información en caso de que alguna vez la necesiten.37 0.643 ## ## Coefficients: ## Estimate Std.lm = lm(insom~streu+ansev+ # Predictores continuos generof+sitsentf.packages("ggplot2") library(ggplot2) qplot(bfext. ANEXOS La libreria ggplot2 es un excelente recurso para hacer gráficos más sofisticados o con mejores opciones de presentación.3582 0. data = estudio2012) ## ## Residuals: ## Min 1Q Median 3Q Max ## -2.1392 3.1 ' ' 1 ## ## Residual standard error: 1.9648 0. p-value: 0. so using loess.4502 0. Otras funciones útiles: . data=personalidad.7815 ## ansev 0. Lo que hemos revisado debiera ser más que suficiente para la mayoría de los análisis que se realizan típicamente en psicología.' 0.0340 0.9145 ## --- ## Signif. geom = c("point".0907 .28 0.681 -1. Error t value Pr(>|t|) ## (Intercept) 0. Use 'method = x' to change the smoothing method. “En una relación”) predice mayores niveles de insomnio. bfopen.11 0. posiblemente porque hay muy pocos participantes que reportan su situación sentimental como complicada. ## streu 0.5650 1. install.1386 0.070 -0. # Predictores categóricos data=estudio2012) El output de summary(lm) ## ## Call: ## lm(formula = insom ~ streu + ansev + generof + sitsentf.0386 0.7150 ## sitsentfEs complicado 0. "smooth")) ## geom_smooth: method="auto" and size of largest group is <1000.7555 0.3160 0.001 '**' 0.24 0. pero nuevamente el efecto no es estadísticamente significativo.71 0.0016 ** ## generofHombre 0.254 1.00135 muestra que el único predictor significativo de insomnio es ansiedad en periodos de evaluaciones. También se observa ser hombre predice mayores niveles de insomnio.6103 1.174.003 3.2186 ## sitsentfSoltero/a 0.05 '. codes: 0 '***' 0.23 0. hist(estudio2012$intolsex) boxplot(estudio2012$intolsex) par(mfrow=c(1. ??mean ??"mean center" Para combinar bases de datos en base a una variable (identificador) común: help(merge) El lugar donde aparecen los gráficos puede dividirse para incluir varios gráficos en la misma imagen par(mfrow=c(1.org/r/datasets/R. Los gráficos 2 y 3 son menos importantes. Otros análisis estadísticos Evaluación de supuestos estadísticos en modelos de regresión.table(datafilename.header=T) #read the data into a table data. Esto es equivalente a la idea de homogeneidad de varianza en ANOVA.ex3=read. El segundo gráfico evalúa si los residuos tienen una distribución normal.data" data. Los puntos en el gráfico debieran ajustarse a la línea diagonal.1)) # Quita la división del output gráfico.org. El comando plot() entrega cuatro gráficos útiles para evaluar si los datos cumplen los supuestos estadísticos asociados a un modelo de regresión. una por cada medición intra-sujeto. la librería reshape2 tiene excelentes funciones para transformar una base de datos datafilename="http://personality-project. y la línea roja debiera ser horizontal.ex3 #show the data aov. Por ejemplo.ex3) . help(mean) # también puede escribirse como ?mean # y agregar dos ?? permite buscar en la documentación online de R # por palabras clave. tienen que apretar enter para ver el siguiente gráfico.Para buscar información.data. plot(lm) El primer gráfico muestra la distribución de los residuos.2)) # Divide el output gráfico en dos columnas. La distribución de los residuos debiera ser uniforme. Como aparece en la consola. Abajo les copio el ejemplo disponible en http://personality-project. ANOVA de mediciones repetidas Requiere transformar la base de datos de forma que cada participante tenga varias líneas.ex3) summary(aov.appendix3.ex3 = aov(Recall~Valence+Error(Subject/Valence). packages("lme4") ??lmer .ex3) #graphical output Para modelos de ecuaciones estructurales (SEM) pueden ocupar la librería lavaan. específicamente la función lmer(). install.tables(aov.digits=3) # report the means and the number of subjects/cell boxplot(Recall~Valence.ugent.data=data.ex3.packages("lavaan") ??lavaan Para modelos multinivel pueden ocupar la librería lme4."means").be install. Ver más información en http://lavaan.print(model.
Copyright © 2024 DOKUMEN.SITE Inc.