Ejercicio 4: data-massage

El objetivo del ejercicio 4 es hacer las mismas cosas que en el ejercicio 3, de manera más compacta, y con más datos. También la idea es refinar un poco el análisis de los datos. Vamos a trabajar con el mismo tipo de datos que la vez anterior: puede repasar si quieren de qué se trataban los datos

Empezamos

Vamos a trabajar con 4 archivos de datos; descárguenlos aquí: archivo 1, archivo 2, archivo 3 y archivo 4.

Una vez descargados, tenemos que cargarlos con read.csv (o read.table). Como tienen detalles de formato, aquí va el código para levantarlos:

archivo1=read.table('input/080416_094310_094045_1_CCF.csv',sep=",",skip = 2,header = T)
archivo2=read.table('input/080516_093900_094045_2_CCF.csv',sep=",",skip = 2,header = T)
archivo3=read.table('input/080916_094942_094045_3_CCF.csv',sep=",",skip = 2,header = T)
archivo4=read.table('input/081116_094922_094045_4_CCF.csv',sep=",",skip = 2,header = T)

y así para cada archivo. Tip: usar la tecla TAB para autocompletar el nombre del archivo. Evita errores y ahorra tiempo y frustraciones.

Atentti: ¿dónde descargaron los archivos? Los dejaron en una carpeta que se llama “input”? Repasen el uso de archivos y directorios del sesión anterior.

Ahora unimos todo en un solo data.frame, usando la función rbind():

datos=rbind(archivo1, archivo2, archivo3, archivo4)

Factores

El data frame obtenido presenta varios detalles de formato. Para dejarlo a punto hay que:

  1. Convertir la variable ID en un factor. datos$ID=factor(datos$ID)
  2. Convertir la variable trialType en un factor con 3 niveles: “ejemplo”, “ensayo”, y “test”. datos$trialType=factor(datos$trialType,labels=c("ejemplo","ensayo","test"))
  3. Cambiar las etiquetas de los niveles del factor acierto en “No” y “Si”. labels(datos$acierto)=c("No","Si")

Paquetes

  1. Instalar plyr, ggplot2 y reshape2. install.packages(c("plyr","ggplot2","reshape2"))
  2. Cargar plyr y ggplot2 en memoria.
library(plyr)
library(ggplot2)
  1. ¿Qué hace la función aaply()? ¿A qué paquete pertenece? Lo mismo que ddply, sólo que opera sobre arrays, y devuelve arrays. Es del paquete plyr igual que ddply
  2. ¿Qué hace la función qplot()? ¿A qué paquete pertenece? Permite graficar. Es del paquete “ggplot2”
  3. ¿Y la función aes()? Tiene algo que ver con plotear, es de ggplot2

ddply

Con los datos obtenidos, y usando ddply:

  1. Calcular el promedio de tiempos de reacción y la tasa de aciertos para cada tarea. Ojo, ¡que no aparezcan NAs! ddply(datos,"task",summarize,media=mean(RT,na.rm=T))
  2. Hacer lo mismo, pero para cada tarea y para cada tipo de ensayo (variable trialType). ¿Aparecen NaNs? ¿Qué son los NaNs? ddply(datos,c("task","trialType"),summarize,media=mean(RT,na.rm=T))
  3. Crear un data frame que no tenga ensayos de tipo “ejemplo”. Trabajar sobre ese data frame a continuación. datosNoEjemplo=datos[!datos$trialType=="ejemplo",] Es equivalente a: datosNoEjemplo=datos[datos$trialType!="ejemplo",], dado que != significa no es igual.

  4. Limpiar outliers de tiempo de reacción en los datos, esto es, quitar aquellos ensayos en que el tiempo de reacción es mayor a la media de todos los ensayos más 3 desvíos estándar, o menor a 200 ms (ver ejercicio 1), evaluando cada tarea por separado. Sugerencia: usar z-scores y mutate.

Agreguemos una columna de z-scores al data frame. Luego, usamos esa columna y la columna de RT para quedarme los outliers en un índice lógico. Luego, usando ese índice, me quedo con los que no son outliers.

datosNoEjemplo=ddply(datosNoEjemplo,c("task"),mutate,medRT=mean(RT),sdRT=sd(RT),zRT=(RT-medRT)/sdRT)
outliers=datosNoEjemplo$zRT>3 | datosNoEjemplo$RT<0.2
datosNoEjemplo_Sinout=datosNoEjemplo[!outliers,]

Tip Nótese que un outlier “por arriba”, equivale a un z-score mayor de 3.


Encuentre el error

Las siguientes líneas de código dan error, o no hacen lo que se supone que tienen que hacer. Copialas, pegalas, ejecutalas, y corregilas.

  1. library(lmerTest) Si no instalé antes la libería lmerTest, no la voy a poder cargar funcionar.
  2. ddply(datos,"task",mean(RT)) Falta el “summarize”, o “mutate”. Se puede llamar a la función sin esas palabras, pero la sintaxis es algo diferente, y no la hemos visto en clase.
  3. factor(datos$session, labels="1,2,3,4") #suponemos que los datos están en el data frame llamado "datos" En vez de “labels”, habría que indicarle con “levels”. Además, hay que usar la función c(). Sería levels=c(1,2,3,4)
  4. ddply(datos,"task","trialType",summarize,media=mean(RT)) Falta la función c(): c(“task”,“trialType”)
  5. levels(datos$struct)=c("ccv","cv")

  6. ddply(datos,c("task","trialType"),summarize,media=mean(RT),sd(RT),zscore=(RT-media)/desv) __ ***

En este link se pueden encontrar las soluciones