f.- AnovaF1F2.fnc

OBJETIVO

En aquellos experimentos en los que un número determinado de sujetos pasan por J o JxK condiciones experimentales de medidas repetidas y en cada condición los sujetos reciben un número i de items o reactivos es precectivo estimar los efectos del diseño utilizando como unidad de análisis los sujetos (análisis por sujetos), los items (análisis por items) y la simultaneidad de sujetos e items (minF). La función Anova.F1F2.fnc realiza de forma secuencial y automática el análisis por item, por sujetos y minF.

  1. Debemos recordar que el análisis F1 (por sujetos) permite la generalización de los resultados asumiendo otra muestra aleatoria de sujetos a los que se les pasa exactamente los mismos items que a la muestra originaria.

  2. El análisis F2 (por items, hace lo propio pero asumiendo otra muestra aleatoria de la población de items que se pasa a exactamente a los mismo sujetos de la muestra originaria.

  3. El análisis minF (límite inferior del estadístico F' (F prima) permite la generalización simultánea de los efectos fijos encontrados a los sujetos e items. Sin embargo esta ampliación en el poder de generalización se lleva a cabo con una pérdida importante de la potencia del contraste.

El usuario puede consultar mixed.model.fnc para otra alternativa mas potente para el análisis de este tipo de datos.

F1, F2 y minF

Partiremos de las bases de datos simuladas (puedes descargarlas al final de esta página)

  1. experimento_F1F2.Rdata

  2. experimento_F1F2_errores.Rdata

Que contienen las respuestas (tiempo de reacción) y aciertos y errores cometidos (1 y 0) repectivamente de 30 sujetos a 172 items correspondientes al anidamiento de dos factores de medidas repetidas mrA y mrB 2 x 2 (43 items por condición).

datos=lee.archivo.fnc('experimento_F1F2.Rdata')

*** Se ha leído correctamente el archivo externo experimento_F1F2.Rdata ***

*** El nuevo objeto leido es: lexde .Esta es la cabecera: ***

El objeto es una matriz que pertenece a la clase data.frame

y tiene 30 filas y 172 columnas (variables)

Dado que tenemos medidas repetidas, en múltiples items debemos obligatóriamente apilar los datos. Si pides un head(datos) verás que los nombres de las 172 variables son desde X1 hasta X172.

Ahora leeremos la base de datos con los aciertos y errores cometidos por los 30 sujetos en los 172 items.

errores=lee.archivo.fnc('experimento_F1F2_errores.Rdata')

*** Se ha leido correctamente el archivo externo experimento_F1F2_errores.Rdata ***

*** El nuevo objeto leido es: errores .Esta es la cabecera: ***

El objeto es una matriz que pertenece a la clase data.frame

y tiene 30 filas y 172 columnas (variables)

item1 item2 item3 item4 item5 item6 item7 item8 item9 item10

1 1 1 0 0 1 1 1 1 1 1

2 1 1 1 1 1 1 0 1 1 1

3 1 0 1 1 1 1 1 1 1 0

4 1 1 1 1 1 1 1 1 1 1

5 1 1 1 1 1 0 1 1 1 1

6 1 1 1 1 1 1 1 1 1 0

Como puedes ver la matriz de errores leída (se muestran nuevamente solo los 10 primeros items).

Es muy importante recordar que los tiempos de reacción correspondientes a los errores deben eliminarse (hacerlos NA) ya que solo deben analizarse los correspondientes a aciertos en la tarea. Esto lo conseguiremos primero multiplicando la matriz de tiempos (datos) por la matriz de errores. Con ello conseguiremos que los tiempos correspondientes a los errores sean cero (0). En segundo lugar una vez apilados los datos recodificaremos la variable vd que contendrá a los 30x172 tiempos de reacción haciendo que los valores iguales a cero sean NA.

datos= datos*errores

Antes de apilar debemos definir las características de nuestro diseño a partir de los factores intragrupo que lo conforman.

fac.intra= list(mrA=c('low','hig'), mrB=c('short','long'))

Ya podemos apilar los datos y obtener así una matriz manipulable ya que las 172 medidas e los 30 sujetos estarán ahora en una sola columna de nombre vd.

datos.ap = apila.los.datos.fnc(datos, fac.intra=fac.intra,

col.empieza.mr=1, n.item=172)

#------------------------------------------------------------------

# APILADO DE LOS DATOS

#------------------------------------------------------------------

*** Esta es la cabecera de los datos apilados: ***

vd item sujeto mrA mrB condicion

1 631.94 item1 suj1 low short low.short

2 573.98 item1 suj2 low short low.short

3 553.66 item1 suj3 low short low.short

4 532.54 item1 suj4 low short low.short

5 624.92 item1 suj5 low short low.short

6 716.63 item1 suj6 low short low.short

Es el momento de recodificar la variable vd para hacer que los valores de tiempo iguales a 0 sean perdidos por el sistema (NA) mediante la función recode.

datos.ap$vd= recode(datos.ap$vd, " 0=NA ")

Con los datos apilados y con los tiempos de los errores "eliminados" (no participaran en ningún análisis que realicemos) debemos en primer lugar llevar a cabo un análisis exploratorio previo de la "conducta" de nuestra variable dependiente vd (tiempo de reacción) a través de las 4 condiciones experimentales. Como sabemos un instrumento de gran utilidad para cubrir este cometido es el histograma.

El apilado de los datos ha creado de forma automática una nueva variable de nombre condicion que podemos utilizar para observar la distribución del tiempo de reacción (vd) en cada una de las 4 condiciones.

histograma.fnc(datos.ap, que.factor='condicion')

Ambos histogramas nos están indicando una importante cantidad de valores de tiempo de reacción incorrectos (inferiores a los 200 ms). En los experimentos donde cada condición está formada por un número determinados de items o reactivos es práctica obligada realizar la "limpieza" de la variable medida (tiempo de reacción, amplitud de EEG, etc) intra sujeto y condición (4 limpiezas por sujeto en nuestro ejemplo).

La función limpia.vd.fnc realiza precisamente esta labor.

datos.limpios=limpia.vd.fnc(datos.ap, vd='vd',

que.factor='condicion', que.min=200)

histograma.fnc(datos.limpios, que.factor='condicion')

Solicitamos que se limpie la variable dependiente vd por cada sujeto en los cuatro niveles del factor condicion. Solicitamos además que antes de limpiar haga NA (missing) todo valor inferior a los 200 ms. Por defecto se asume una limpieza por +-2 desviaciones típicas alrededor de la media.

Veamos el resultado de aplicar dicha limpieza.

descriptivos de limpieza

tiempos sin limpiar

tiempos limpios

Como puedes observar la función te indica que se ha hecho una limpieza utilizando +- 2 desviaciones sobre la media. Además te indica que antes de realizar esta limpieza había valores perdidos en la matriz de datos (previous.NA) correspondientes a los tiempos con origen en un error del sujeto. Ha hecho missing (NA) al 7.% de los valores y te indica además la frecuencia de valor transformado a NA para condición experimental.

En la figura de la derecha puedes ver claramente si la comparas con la de los tiempos sin limpiar, en que ha consistido esa labor. Obviamente han desaparecido todos los tiempos menores a 200 ms y se percibe con claridad que la media de la condición low.short y hig.short presentan los tiempos mayores. Se percibe con claridad la forma asimétrica positiva característica de los tiempos de reacción (los valores se acumulan en los valores mas bajos de la variable).

Ya estamos listos para llevar a cabo la estimación simultánea de nuestro modelo de Anova por sujetos, items y minF con Anova.F1F2.fnc.

Anova.F1F2.fnc(datos.limpios, fac.intra=fac.intra)

res.F1F2.minF

Puedes ver que la interacción es significativa (p < 0.05) tanto por sujetos como por items, pero no por la minF, lo cual nos impide la generalización simultánea del efecto AxB a ambas poblaciones (sujetos e items). A modo de ejemplo vamos a asumir que dicha interacción ha superado también el criterio minF y solicitaremos "por tanto" los contrastes de efectos simples que haremos de forma muy simple añadiendo el argumento poshoc con el nombre del efecto a estimar.

Anova.F1F2.fnc(datos.limpios, fac.intra=fac.intra, poshoc='mrA:mrB')

res.poshoc.f1f2

Puedes ver una estimación alternativa y mas potente para este mismo experimento en los modelos mix.model donde si se logra la significación deseada para la interacción.

Apilado de datos (Diseños con items REPETIDOS)

Puedes consultar un ejemplo de Análisis de la varianza por sujetos e items en el contexto de items que se repiten en niveles de un factor de medidas repetidas en la página de apilado de datos en el epígrafe Apilado de datos (Diseños con items REPETIDOS)

Subir->