apila.los.datos.fnc

Copia, Pega y Adapta

apilados = apila.los.datos.fnc(datos, fac.inter=fac.inter,

fac.intra=fac.intra, col.empieza.mr=3)


apilados = apila.los.datos.fnc(datos, fac.inter=fac.inter,

fac.intra=fac.intra, col.empieza.mr=3, n.item=80)

Objetivo

En los diseños de medidas repetidas, es de gran utilidad que todas las medidas realizadas a través de las JxK.. condiciones MR se encuentren apiladas en una sola columna de nombre vd. La condición experimental de pertenencia de cada valor de esta columna está controlada por otras variables que la función genera automáticamente (sujeto, item, factores). Con los datos así apilados el usuario puede solicitar gráficos y estadísticos exploratorios sobre cualquier combinación de los factores de su diseño sin importar el tipo de manipulación implicada (intra o intergrupo).

El apilado de los datos es obligatorio para los análisis mixed así como para los Anova F1F2 y minF.

  1. Apilado de datos diseños sin items.

  2. Apilado de datos diseños con items (items no repetidos)

  3. Apilado de datos diseños con items (item repetidos)

  4. Datos ya apilados en origen.

Apilado de datos (Diseños sin items)

Partiremos de la base de datos OBrienKaiser generada a partir de un diseño split-plot 3 x 2 x 3 x 5 tratamiento x genero x fase x hora. Los factores tratamiento y genero son intergrupo los cuales declararemos con el objeto fac.inter y fase y hora los dos factores de medidas repetidas (intragrupo) que definiremos con la lista fac.intra.

Declaramos la estructura del diseño con los objetos fac.inter y fac.intra. De la figura anterior vemos que las medidas repetidas comienzan con la variable pre.1 en la tercera columna (3).

fac.inter= c('treatment','gender')

fac.intra= list(

fase = c('antes','despues','seguimiento'),

hora= 1:5 )

Apilamos los datos y lo asignamos al objeto datos.ap (de apilados):

datos.ap=apila.los.datos.fnc(OBrienKaiser, fac.inter=fac.inter,

fac.intra=fac.intra, col.empieza.mr=3)

Como nuestro experimento no contiene items dentro de cada condición experimental, nos basta con indicar como argumentos fac.inter, fac.intra y la columna de comienzo de las medidas repetidas (col.empieza.mr)

Una vez apilados los datos, la función nos muestra la cabecera de los mismos (6 primeros registros). Podemos ver que la primera columna de nombre vd, contiene los 250 valores de las 15 medidas repetidas (3x5) obtenidas en los 16 sujetos de la investigación. Se han creado automáticamente 6 variables mas para esta base de datos. Estas 6 variables nos permitirán controlar la pertenencia de cada valor de la columna vd. En este sentido podemos ver que el primer valor de vd (1) pertenece al sujeto 1 en el nivel antes del factor de medida repetida fase y hora 1 en el otro factor. Asimismo ese valor es de un sujeto del grupo control de tratamiento y mujer. Por último la función crea la variable condicion donde el valor control.M.antes.1 nos indica claramente la condición experimental de pertenencia de la medida.

Con los datos apilados podemos por ejemplo ahora explorar gráficamente los histogramas de las 15 condiciones experimentales de medidas repetidas de una forma muy sencilla.

histograma.fnc(datos.ap, que.factor='fase:hora')

O solicitar un gráfico de panel donde podemos ver la evolución de los 16 sujetos de la investigación en las 15 condiciones de medidas repetidas.

grafica.panel.fnc(datos.ap, que.factor='fase:hora', x.panel='sujeto')

Podemos solicitar la tabla de medias, dt y n para todo el experimento así como la gráfica correspondiente:

descriptivos.fnc(datos.ap, vd='vd', grafica=T, que.factor='treatment:gender:fase:hora')

Apilado de datos (Diseños con items NO REPETIDOS)

Leeremos el archivo externo longitud.txt correspondiente a un sencillo experimento que pretende probar que las palabras de longitud mayor se leen mas lentamente que las palabras de longitud menor. Las columnas en dicho archivo están separadas por tabuladores. Disponemos de un factor intragrupo de nombre longitud con dos niveles: short y long y 60 item (30 por condición).


longitud = lee.archivo.fnc("longitud.txt", hay.nombres=F, miss='NA')


*** El archivo longitud.txt contiene 14 sujetos y 60 variables ***

*** Si la estructura original es de variables x sujetos, incluye en ***

*** la funcion el argumento traspuesta=T. ***

V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18

1 548 323 327 380 NA 326 838 333 NA 295 796 322 350 392 335 332 274 216

2 306 470 406 422 339 317 324 304 419 499 358 646 346 292 277 636 564 321

3 676 394 538 563 452 486 318 374 476 507 431 462 710 546 450 393 505 481

4 263 263 502 207 242 234 605 228 135 336 109 238 176 309 190 337 284 378

5 246 444 326 390 454 321 547 461 12565 466 431 299 599 350 357 1694 634 381

6 334 471 430 502 450 521 387 524 563 721 432 411 568 302 401 349 317 538

Vemos los tiempos de reacción de los 6 primeros sujetos en los 18 primeros items. Ahora vamos a apilar esta matriz, aunque previamente debemos definir el objeto fac.intra que caracteriza a este diseño.

fac.intra=list(longitud=c('short','long'))

Asignaremos a long.ap (abreviación de apilado) los datos apilados mediante la función. Observa que incluímos el argumento n.item. Si no lo hiciéramos obviamente se asumiría incorrectamente solo dos columnas (una por cada condición).

long.ap=apila.los.datos.fnc(longitud, fac.intra=fac.intra, n.item=60)

Si no incluimos el argumento col.empieza.mr obtendremos error.

long.ap=apila.los.datos.fnc(longitud, fac.intra=fac.intra, n.item=60,

col.empieza.mr=1)

Ahora podríamos por ejemplo solicitar el histograma del tiempo de reacción (vd) en cada condición intragrupo o el gráfico de panel para cada sujeto.

histograma.fnc(long.ap, que.factor='longitud')

grafica.panel.fnc(long.ap, que.factor='longitud', x.panel='sujeto')

histograma

gráfica de panel

Podemos observar en el histograma que hay un valor extremo claro para un item en la condición short y 2 valores en la otra condición. El 99% de los tiempos se encuentran claramente por debajo de los 2000 ms.

En la segunda figura vemos claramente que los tiempos de reacción de lectura son mayores para las palabras largas para todos los sujetos menos para el número 5 que habremos de estudiar en profundidad porque podría ser un sujeto extremo desde el punto de vista de las medidas repetidas.

Apilado de datos (Diseños con items REPETIDOS)

La mayoría de los diseños que se implementan en el ámbito de la psicolinguística utilizan grupos de items diferentes para cada una de las JxK condiciones experimentales. En ocasiones sin embargo el investigador puede requerir que ciertos tipos de items pasen por todos los niveles de un determinado factor anidado en otro.

La figura siguiente muestra el anidamiento de un diseño completamente repetido A x B 2 x 2 ficticio donde simulamos que un conjunto de 20 items (10 A1 y 10 A2) pasan cada uno de ellos por las dos condiciones de B (SOA corto y SOA largo) en un experimento de priming realizado en 30 sujetos.

Veamos el procedimiento para apilar la matriz de orden 30 x 40 (20 items que se repiten en cada nivel del factor B). Utilizaremos nuevamente la función crea.nombre.item.fnc. Sin embargo en esta ocasión debemos ser explícitos definiendo la secuencia exacta en que los items pasan por las condiciones.

Creamos los datos simulados mediante esta instrucción:

datos=data.frame(mvrnorm(30,rep(0,40),Sigma=diag(1,40)))

Asignamos los nombres de los items, siguiendo la estructura del diseño de la figura anterior:

datos=crea.nombre.item.fnc(datos, n.item=c(1:10,1:10,11:20,11:20),

col.empieza.item=1)

head(datos) #Se muestran solo las primeras 24 columnas


item1 item2 item3 item4 item5 item6 item7 item8 item9 item10 item1 item2

1 -1.22 -1.20 -0.46 1.73 0.08 -0.78 0.40 0.72 -1.39 -0.01 -1.02 0.71

2 1.31 0.98 -1.61 -0.23 1.15 0.02 0.04 0.59 -0.18 -0.13 0.06 -0.32

3 1.69 -1.54 -0.37 -0.42 1.28 -0.05 -0.45 0.06 -0.52 -0.83 -1.58 -1.47

4 -0.32 -1.26 -1.02 1.44 0.92 1.64 -0.16 -1.38 -0.09 -0.45 1.39 -1.26

5 0.15 0.24 -1.32 -0.35 0.07 -1.54 2.64 0.35 0.88 0.94 0.63 -2.04

6 0.69 -0.73 -0.06 -1.76 0.29 0.56 -1.91 -0.48 0.35 1.15 -0.19 0.22

item3 item4 item5 item6 item7 item8 item9 item10 item11 item12 item13 item14

1 -0.21 -1.18 -1.55 0.36 -0.54 -0.87 0.85 -0.61 0.78 0.53 -1.59 1.45

2 0.10 0.75 1.08 -0.41 -0.32 -1.12 -1.50 0.27 0.05 0.08 0.40 0.00

3 0.32 1.80 -0.34 0.24 -1.35 -1.18 -0.24 1.61 -0.24 -0.50 0.63 0.10

4 0.82 0.14 -0.62 0.29 0.29 -0.85 -0.66 -0.70 0.03 1.18 -0.09 -0.54

5 0.08 0.83 -0.46 -0.45 0.37 0.59 2.15 -1.34 -0.03 -0.34 -1.71 -0.24

6 -1.50 0.39 1.35 1.59 0.91 -3.20 -0.27 1.12 -1.46 0.58 0.24 1.18

Puedes ver como se repiten los nombres de los items según la secuencia indicada.


fac.intra=list(mrA=c('a1','a2'), mrB=c('b1','b2'))


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

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

Observa que a pesar de tener 20 items en el argumento n.item indicamos 40 porque son 40 las columnas que definen todo el diseño.

head(datos.ap)

vd item sujeto mrA mrB condicion

1 -1.2179374 item1 suj1 a1 b1 a1.b1

2 1.3071421 item1 suj2 a1 b1 a1.b1

3 1.6935768 item1 suj3 a1 b1 a1.b1

4 -0.3217553 item1 suj4 a1 b1 a1.b1

5 0.1494065 item1 suj5 a1 b1 a1.b1

6 0.6922287 item1 suj6 a1 b1 a1.b1


tail(datos.ap) # tail nos permite acceder a los últimos valores de la base de datos

vd item sujeto mrA mrB condicion

1195 1.0356814 item20 suj25 a2 b2 a2.b2

1196 2.1248818 item20 suj26 a2 b2 a2.b2

1197 0.7438226 item20 suj27 a2 b2 a2.b2

1198 1.7708118 item20 suj28 a2 b2 a2.b2

1199 0.3146449 item20 suj29 a2 b2 a2.b2

1200 0.6525984 item20 suj30 a2 b2 a2.b2

Ya podemos solicitar el anova por sujetos e items utilizando la función Anova.F1F2.fnc con el argumento fac.intra.item incluyendo el nombre del factor de medidas repetidas por el que pasan todos los items (mrB).

Anova.F1F2.fnc(datos.ap, fac.intra=fac.intra, fac.intra.item='mrB')

Subir->

Datos originalmente ya apilados

En muchas ocasiones los datos están ya apilados aunque no preparados todavía para ser utilizados por diferentes funciones del toolbox como Anova.F1F2.fnc y mixed.model.fnc. Para que dicha matriz pueda ser usada debe contener obligatoriamente las siguientes variables: sujeto, item (si tienes item en la investigación), vd (nombre de la variable dependiente a analizar) y condicion (variable creada exclusivamente por la función crea.condicion.fnc siguiendo los valores de los factores y niveles declarados en fac.inter y fac.intra).

Es además muy importante que los factores que al anidarse generan las condiciones experimentales estén como tales en la base de datos apilada. En ocasiones el investigador extrae esta información de los valores de la variable condi o condición y crea dichos factores mediante un recode.

Seguidamente leeremos una base de datos ya apilada que transformaremos adecuadamente para que pueda ser procesada por la función Anova.F1F2.fnc. Los datos provienen de un diseño split-plot con 3 factores grupo (experimental y control) y 2 factores de medidas repetidas: frecuencia léxica y silábica cada uno con dos niveles: baja y alta frecuencia. Tenemos por tanto un diseño factorial grupo x frecuencia lexica x frecuencia silábica 2 x 2 x 2. 28 sujetos (17 controles y 11 experimentales) ven 88 palabras (22 por condición experimental de medidas repetidas).


datos= lee.archivo.fnc('datos_ya.apilados.xls')


*** El archivo excel datos_ya.apilados.xls contiene 2464 registros y 6 variables. ***

rt word id group condi accuracy

1 1063.0 item1 suj1 control ShLh 1

2 1109.1 item1 suj2 control ShLh 1

3 3330.8 item1 suj3 control ShLh 1

4 1468.4 item1 suj4 control ShLh 1

5 722.7 item1 suj5 control ShLh 1

6 691.1 item1 suj6 control ShLh 1


Tenemos 2464 registros apilados correspondientes a 28 sujetos a los que se le ha medido el tiempo de reacción (rt) en 88 items pertenecientes a 4 condiciones experimentales de frecuencia léxica y silábica. Tal y como puedes observar no disponemos de los factores de medidas repetidas en la base de datos leída. Esta información sin embargo puede obtenerse fácilmente desde la variable condi.

frecuencias.fnc(datos, 'condi')


$condi

$condi$n.total

[1] 2464

$condi$tabla

ShLh ShLl SlLh SlLl

616 616 616 616


Seguidamente crearemos los dos factores de medidas repetidas necesarios a partir de la información de frecuencias anterior.


datos$Sila='Sbaja'

datos$Sila[datos$condi=='ShLh' | datos$condi=='ShLl']='Salta'

datos$Lexi='Lbaja'

datos$Lexi[datos$condi=='ShLh' | datos$condi=='SlLh']='Lalta'


Observa como utilizamos el operador lógico | para determinar los niveles de frecuencia silábica y léxica alta y baja. Definimos primero el valor baja para todos los registros y luego modificamos a alta los que cumplan la condición. La tabla de contingencia de los factores creados nos indicará si hemos realizado correctamente la operación o no.


frecuencias.fnc(datos, 'Sila:Lexi')


$variables

[1] "Sila:Lexi"


$tabla

Lexi Lalta Lbaja

Sila

Salta 616 616

Sbaja 616 616


head(datos)

rt word id group condi accuracy Sila Lexi

1 1063.0 item1 suj1 control ShLh 1 Salta Lalta

2 1109.1 item1 suj2 control ShLh 1 Salta Lalta

3 3330.8 item1 suj3 control ShLh 1 Salta Lalta

4 1468.4 item1 suj4 control ShLh 1 Salta Lalta

5 722.7 item1 suj5 control ShLh 1 Salta Lalta

6 691.1 item1 suj6 control ShLh 1 Salta Lalta


Es el momento de modificar el nombre de ciertas variables al nuevo nombre obligatorio de vd, sujeto e item.


datos=cambia.nombre.var.fnc(datos, antiguo=c('rt','id','word'),

nuevo=c('vd','sujeto','item'))


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

# RENOMBRA VARIABLES

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


*** Se ha cambiado el nombre de las variables rt id word

*** a los nuevos nombres: vd sujeto item


vd item sujeto group condi accuracy Sila Lexi

1 1063.0 item1 suj1 control ShLh 1 Salta Lalta

2 1109.1 item1 suj2 control ShLh 1 Salta Lalta

3 3330.8 item1 suj3 control ShLh 1 Salta Lalta

4 1468.4 item1 suj4 control ShLh 1 Salta Lalta

5 722.7 item1 suj5 control ShLh 1 Salta Lalta

6 691.1 item1 suj6 control ShLh 1 Salta Lalta


Ya podemos definir la esctructura intra de nuestro diseño mediante el objeto fac.intra que crearemos a tal efecto.


fac.intra=list(Sila=c('Sbaja','Salta'), Lexi=c('Lbaja','Lalta'))

fac.inter='group'


Ahora debemos crear la variable condicion, mediante la función crea.condicion.fnc utilizando para ello los objetos de definición del diseño recién creados.


datos=crea.condicion.fnc(datos, fac.inter=fac.inter, fac.intra=fac.intra)


head(datos)

vd item sujeto group condi accuracy Sila Lexi condicion

1 1063.0 item1 suj1 control ShLh 1 Salta Lalta control.Salta.Lalta

2 1109.1 item1 suj2 control ShLh 1 Salta Lalta control.Salta.Lalta

3 3330.8 item1 suj3 control ShLh 1 Salta Lalta control.Salta.Lalta

4 1468.4 item1 suj4 control ShLh 1 Salta Lalta control.Salta.Lalta

5 722.7 item1 suj5 control ShLh 1 Salta Lalta control.Salta.Lalta

6 691.1 item1 suj6 control ShLh 1 Salta Lalta control.Salta.Lalta


Ya podemos analizar nuestros datos utilizando función Anova.F1F2.fnc, como mixed.model.fnc.


Anova.F1F2.fnc(datos, fac.inter=fac.inter,

fac.intra=fac.intra, poshoc='Sila:Lexi')


mixed.model.fnc(datos, modelo='vd ~ Sila*Lexi + (1|sujeto) + (1|item)')

Subir->