Este ejercicio acompaña a la guía de la sesión 3 sobre pipeline, importación y guardado e integra los contenidos de las sesiones 1 y 2.

El objetivo del ejercicio 3 es obtener el promedio de tiempos de reacción y tasa de aciertos en un conjunto de tareas de un participante (normalmente esto se repitiría para cada participante). Para ello comenzamos con el procesamiento de datos desde los datos crudos y terminamos con el guardado del entorno de trabajo.

El data set proviene de un estudio sobre adquisición de la lectura, con las siguientes tareas:

Cada fila corresponde a un ensayo, y cada columna a una variable. Para cada ensayo se muestra a qué tarea corresponde en la columna task, el tiempo de respuesta en la columna RT (en segundos, el separador decimal es el punto) y el acierto en la columna acierto. Los datos del archivo corresponden a un solo participante.

Completar las siguientes tareas:

Previo: Descargar el archivo datos045177.csv en la carpeta cursoR

  1. Cambiar el path a la carpeta cursoR con la función setwd.

  2. Leer el archivo en R con la función read.table y guardarlo en una variable llamada datosCrudos.

  3. 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)

  4. Calcular el promedio de tiempos de reacción y la tasa de aciertos para cada tarea, una opción es:
  1. separar los datos por tarea
  2. calcular ambos promedios para una tarea
  3. escribir una función que lo haga para cualquier tarea, ver guía y ejercicio 2)
  1. Almacenar las variables del entorno de trabajo en una carpeta “output”" con la función save.image.

  2. Guardar todos los comandos en un script.

# 1) 
setwd("C:/Users/Camila/Dropbox/09 R/curso R psico")
# 2) 
datosCrudos = read.table("datos045177.csv", header = T, dec = ".", sep = ",", encoding = "UTF-8" )
# 3)
media = mean(datosCrudos$RT, na.rm = T)
desv = sd(datosCrudos$RT, na.rm = T)
umbralUp = media+3*desv
umbralDown = 0.200

# uso el operador or (|) para evaluar ambos umbrales al mismo tiempo
temp = datosCrudos$RT > umbralUp | datosCrudos$RT < umbralDown
# veo cuántos ensayos tiraría con estos umbrales
sum(temp, na.rm=T)
## [1] 57
# los tiro
datosCrudos2 = datosCrudos[!temp,]
# 4)

# i) 
# veo los nombres de las tareas
levels(datosCrudos2$task)
## [1] "blendingP"     "blendingS"     "lettersN"      "lettersS"     
## [5] "rhymePW"       "rhymeW"        "segmentationP" "segmentationS"
## [9] "vocabulary"
# empiezo por la primera
tarea = "blendingP"
# o podría evitar errores de escritura haciendo:
tarea = levels(datosCrudos2$task)[1]
datosBlendingP=datosCrudos2[datosCrudos2$task==tarea,]
# corroboro que hayan quedado solo los ensayos de Blending
View(datosBlendingP)

# ii)
mediaBP.RT = mean(datosBlendingP$RT, na.rm = T)
mediaBP.ac = mean(datosBlendingP$acierto, na.rm = T)

# iii)
# La entrada de la función es el nombre de la tarea de la que quiero obtener las medias
mediasTareas = function(x) {
  tarea = x
  datosX=datosCrudos2[datosCrudos2$task==tarea,]
  mediaX.RT = mean(datosX$RT, na.rm = T)
  mediaX.ac = mean(datosX$acierto, na.rm = T)
  return(c(mediaX.RT,mediaX.ac))
}
# 5) #creo a mano la carpeta output primero
save.image("./output/Medias045177.RData")