El objetivo del ejercicio 5 es familiarizarse con una de las partes más aburridas del data-massage, el llevar los datos de un formato a otro, sólo para poder hacer tal o cual análisis.
Vamos a trabajar con unos datos en formao SPSS, en formato ancho, y la ideas es convertilos a formato largo, ya verán para qué.
En un segundo caso, tomaremos unos datos en formato largo, y los convertiremos en formato ancho para poder calcular correlaciones.
Vamos a trabajar con 2 archivos de datos; descárguenlos aquí: archivo participantes1.sav, animales.csv.
Los datos provienen de un estudio enmarcado en el programa de investigación estudiantil PAIE, liderado por Valentina Paz y un grupo de estudiantes de grado e investigadores del CIBPsi, bajo la supervisión de Victoria Gradin. El estudio consistía en un hacer jugar a los participantes al juego del ultimátum. En este juego, una persona le ofrece al participante para compartir una determinada suma de dinero. La clave del asunto es que las ofertas pueden ser “justas” (del estilo $5 para ti, $5 para mi), “injustas” ($9 para mi, $1 para ti), o “medias” ($7 para mi, $3 para ti). Para trabajar en este ejemplo, vamos a ver las respuestas emocionales de los participantes ante cada tipo de oferta. Trabajaremos con la emoción “enojo”, es decir, con las respuestas de los participantes, en una escala del 0 al 10, de qué tan enojados se sintieron ante ofertas justas, medias, e injustas.
parts.#si el paquete foreign no está instalado, instalarlo con install.package("foreign")
library(foreign) #por las dudas si no está cargado
datosSPSS=read.spss("participante1.sav"") #tengan cuidado con la ruta al archivoEl data frame obtenido es muy grande, por eso nos vamos a detener en algunas pocas variables. A saber:
parts2=parts[,c("codigo","sexo","edad","Beck","Feedback_Justas_Enojo","Feedback_Injustas_Enojo","Feedback_Medias_Enojo")]
str(parts2)#si el paquete reshape2 no está instalado, instalarlo con install.package("reshape2")
library(reshape2) #por las dudas si no está cargado
parts3=melt(parts2,id=c("codigo","sexo","edad","Beck"),variable.name = "tipo_oferta",value.name="enojo")
#Truquito: se pueden escribir las variables sin las comillas, si en vez de usar la función "c" (combine), usamos la función "." del paquete plyr
library(plyr)
parts3=melt(parts2,id=.(codigo,sexo,edad,Beck),variable.name = "tipo_oferta",value.name="enojo")
#Truquito 2: si hay muchas variables en el grupo de las id (las que no voy a fundir/derretir), se pueden especificar las que sí voy a derretir, mediante el argumento "measure.vars". En este caso no se gana nada, pero en una situación de la videa real puede ahorrarte MUCHO tecleo (o sea, sólo querés fundir 3 de las 159 variables, escribís 3 nombres, en vez de 156).
parts3=melt(parts2,measure.vars=.(Feedback_Justas_Enojo,Feedback_Injustas_Enojo,Feedback_Medias_Enojo),variable.name = "tipo_oferta",value.name="enojo")levels(parts3$tipo_oferta)=c("justas","injustas","medias")~.# aquí se ajusta un modelo lineal, don de la variable de respuesta (dependiente) es el enojo, y la predictora (independiente) es el tipo de oferta.
modelo1=lm(enojo~tipo_oferta,data=parts3)
# aquí se resume información variada relevante al modelo, como los valores de los parámetros, pruebas de significancia sobre ellos, etc. Mirar estadístico t y p-valor ( columna Pr(>|t|) )
summary(modelo1)
# y aquí se hace un ANOVA con el modelo. En este caso, es de un factor (tipo de oferta), con 3 niveles. Miren qué lindos el F y el p :)
anova(modelo1)Estos datos están tomados de la Norma de Producción de Rasgos Semánticos para el español rioplatense, de Vivas et al., 2016. A un buen número de hablantes nativos del español rioplatense, se les pidió que indicaran qué rasgos semánticos tiene cada palabra, para un total de 400 palabras. Aquí tenemos un resumen de palabras, todos nombres de animales, y algunos de los rasgos semánticos más relevantes.
animales=read.csv('input/animales.csv') #ojo con las carpetasanimales=animales[,-1] #hay varias formas de hacer esto, ésta es una de las más compactas. Al poner un signo de menos delante de la columna, se quiere decir "todas las columnas MENOS ésta". También se puede usar delante de c(). Por ejemplo [,-c(3,5)] selecciona todas las columnas MENOS la 3 y la 5. También, [-c(8,9),2] saca las filas 8 y 9 (enteras) y la columna 2 (entera).colnames(animales)[1] = "nombre"
# WOOOOOW wow wow wow, qué pasó acá? Veamos,
# Primero, le pido los nombre de columna con colnames(animales). Es me devuelve una lista:
colnames(animales)## [1] "nombre" "rasgo" "frecuencia"
#Como es una lista, puede acceder al primer elemento, con [1]
colnames(animales)[1]## [1] "nombre"
# Entonces, a este primer elemento, le puedo asignar lo que yo quiera, p.ej: animales2=dcast(animales,nombre~rasgo)animales3=dcast(animales,rasgo~nombre)cor(animales2[,-1]) # Correlaciones entre todos los rasgos semánticos
cor(animales3[,-1]) # Correlaciones entre todos los animales