Análisis de Varianza (ANOVAs) con el programa estadístico R

versión de trabajo (página principal)

Manuel Perea

Departament de Metodologia, Universitat de València

Para empezar

El programa R es una potentísima aplicación que permite gran libertad para efectuar todo tipo de cálculos. R es la versión de código libre del programa comercial S-Plus (S+) y está disponible en sistemas operativos como UNIX/Linux, Macintosh o Windows. R está en constante desarrollo y la última versión puede descargarse en internet, vía http://cran.r-project.org. Además, hay muchos sitios web con tutoriales o ejemplos a los que poder acudir en caso de dudas.

El único problema potencial para el usuario “final” es que R no es particularmente “user friendly” en el sentido de que funciona por comandos en lugar de menús. Esto puede hacer la tarea más difícil al principio, pero a la vez hemos de tener en cuenta que da mucha más versatilidad y potencia al programa. Además, como veremos, es sencillo efectuar ANOVAs con R. Esta página web no presende reflejar nada novedoso, simplemente se han recogido diversos ejemplos de ANOVAs entre-sujetos, intra-sujetos y mixtos que de manera más o menos completa puede encontrarse en internet en lengua inglesa; todo ello junto a la ventaja de tener la información disponible en castellano.

En los apartados siguientes me centraré en la versión para Linux., si bien la versión para Windows es muy similar y los comandos a efectuar son los mismos, con muy pocas excepciones (v.g., el dispositivo para grabar en disco los gráficos). (Los ejemplos han sido comprobados con R en su versión Windows y la apariencia del output es esencialmente la misma; al menos si no emplean los acentos en la variables; v.g., Genero en lugar de Género)

Una vez estás conectado a un ordenador con sistema operativo Linux (en este caso, el usuario “manolo” en la máquina “localhostmanolo”), lo único que has de hacer es escribir la letra R en la consola

[manolo@localhost manolo]$ R


Una vez pulses ENTER, esto es lo que aparecerá en la pantalla

R : Copyright 2002, The R Development Core Team
Version 1.5.1 (2002-06-17)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type `license()' or `licence()' for distribution details.

R is a collaborative project with many contributors.
Type `contributors()' for more information.

Type `demo()' for some demos, `help()' for on-line help, or
`help.start()' for a HTML browser interface to help.
Type `q()' to quit R.

>



El símbolo (>) indica que el ordenador está esperando comandos (el ordenador está listo para los análisis) y ya estamos preparados para el primer ejemplo

Ahora pulsa q() para salir y verás el mensaje

Save workspace image? [y/n/c]:



Dado que no tenemos nada de interés, en nuestro caso pulsa n y ENTER.

Ejemplo 1: ANOVA entre-sujetos unifactorial

Observa el Apéndice 1. Contiene los datos de un experimento en el que los participantes recibían una entre tres posibles dosis de una droga experimental, y tras la cual se medía el grado de vigilancia en una tarea. Naturalmente es importante, antes de analizar los datos, en poner los datos en un formato que R pueda procesar. Hay otras opciones, pero (por brevedad) vamos a examinar solamente una de ellas.

Conversión de archivos de texto (ASCII) a archivos de datos en R. Debéis de crear un archivo que contenga los datos (como los del Apéndice 1) y guardarlos en formato de texto. En Linux, esto se puede hacer con programas como emacs, Kwrite, OpenOffice o cualquier otro programa al efecto. Guardas el archivo en “home” , para simplicar. (Una vez tengas más experiencia, lo mejor es guardarlos en un directorio al efecto para tus datos.) El archivo tendrá el siguiente aspecto:

Dosis Vigilancia
a 30
a 38
a 35
a 41
a 27
a 24
b 32
b 26
b 31
b 29
b 27
b 35
b 21
b 25
c 17
c 21
c 20
c 19



Observa que no es necesario incluir una columna indicando “Observación”, dado que es redundante. (pero puedes hacerlo, si quieres.) En R, cada línea individual recoge una y solo una observación. Esto también es cierto para los diseños intra-sujetos (lo que es diferente de la mayoría de aplicaciones estadísticas, como SPSS o Systat, en las que las filas reflejan datos de diferentes sujetos).

Cuando hayas introducido los datos (puedes emplear un espacio para separar los datos dentro de una fila), guarda el archivo como ej1.txt en tu directorio “home”. Y ahora pulsa R en tu consola. Te aparecerá de nuevo:

R : Copyright 2002, The R Development Core Team
Version 1.5.1 (2002-06-17)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type `license()' or `licence()' for distribution details.

R is a collaborative project with many contributors.
Type `contributors()' for more information.

Type `demo()' for some demos, `help()' for on-line help, or
`help.start()' for a HTML browser interface to help.
Type `q()' to quit R.

>



Para convertir el archivo ASCII en una archivo de R, emplea el comando read.table como sigue

> ej1 _ read.table("ej1.txt",header=T)

o, si se quiere,

> ej1 <- read.table("ej1.txt",header=T)

El primer término, ej1, indica el nombre del archivo en R que estamos creando. El primer argumento de read.table es el nombre del archivo ASCII que estamos convirtiendo en formato R (en nuestro caso, ej1.txt). (Recuerda poner el archivo entre comillas.) El segundo argumento (header=T o bien header=TRUE, que es lo mismo) le dice a R que convierta la primera fila en el nombre de las columnas; esto es, la primera columna se refiere a la variable independiente Dosis, y la segunda a la variable dependiente Vigilancia.

Pensemos que se te olvidó poner el nombre de las columnas a la hora de grabar el fichero ej1.txt. No problemo. Simplemente tendrías que emplear el siguiente comando:

> ej1 _ read.table("ej1.txt",col.names=c("Dosis","Vigilancia"))


El segundo argumento le dice a R que añade los nombres de las columnas al archivo de datos.

Si todo va bien, cuando pulses ENTER la consola indicará simplemente > y no habrá ningún mensaje de error.

Antes de hacer el ANOVA, es importante recalcar que puedes ver el contenido de este u otros archivos almacenados (u objetos) en R en nuestra sesión. Se trata de emplear el comando objects.

> objects()



En nuestro caso, obendremos lo siguiente

[1] "ej1"
>



Si queremos ver el contenido del archivo ej1, simplemente tenemos que escribir ej1 y ENTER. Esto es lo que obtendremos.

> ex1
Dosis Vigilancia
1 a 30
2 a 38
3 a 35
4 a 41
5 a 27
6 a 24
7 b 32
8 b 26
9 b 31
10 b 29
11 b 27
12 b 35
13 b 21
14 b 25
15 c 17
16 c 21
17 c 20
18 c 19
>



Observa que R ha indicado una columna extra con el número de la observación, si bien no tenéis que hacer caso a dicha columna.

Ahora es tiempo ya para hacer el ANOVA. El comando es aov:

> aov.ej1 _ aov(Vigilancia~Dosis,ej1)



Es muy importante indicar el orden en que se dan los argumentos. El primer argumento es siempre la variable dependiente (Vigilancia), que es seguido por el símbolo (~) y después la variable independiente (o, como veremos, las variables independientes, en el caso de diseños factoriales). El argumento final para aov es el nombre del archivo R que está siendo analizado. aov.ej1 es el nombre del archivo en el que se va a quedar el análisis (en otras palabras, que le podrías poner otro nombre, pero el dado es ya muy indicativo).

Los resultados del ANOVA se pueden ver con el comando summary:

> summary(aov.ej1)
Df Sum Sq Mean Sq F value Pr(>F)
Dosis 2 426.25 213.13 8.7887 0.002977 **
Residuals 15 363.75 24.25
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
>



En este caso, hemos encontrado un efecto significativo de la variable Dosis (el valor de p ha sido menor de .05).

Naturalmente es necesario indicar las medias por condición. El comando que se aplica es tapply:

> tapply(ej1$Vigilancia,ej1$Dosis,mean)
a b c
32.50 28.25 19.25
>

Como vemos, es el grupo con dosis “c” el que tiene una media menor (19.25). Los argumentos de tapply son los siguientes. El primer argumento es la columna de la variable dependiente; dado que ej1 es un “objeto” de R con varias columnas, hemos de indicar cuál es la que queremos: ej1$Vigilancia refleja el vector correspondiente a la columna “Vigilancia”. El segundo argumento es la variable independiente, a la que se le aplica el mismo proceso (ej1$Dosis refleja la columna de Dosis). El tercer argumento es el estadístico que queremos calcular, en nuestro caso, la media aritmética (“mean” en inglés).

Si lo que quisiéramos ahora es computar las desviaciones típicas por condición, el comando a hacer sería el mismo, pero poniendo “sd” (standard deviation; desviación típica) en lugar de “mean”. Aquí va:

> tapply(ej1$Vigilancia,ej1$Dosis,sd)
a b c
6.595453 4.432026 1.707825

Indudablemente, indicar las columnas empleando $columna no es muy cómodo. Una alternativa para tener los mismos resultados es convertir las columnas en objetos, y como tales son manejables en R con el comando attach

> attach(ej1)



Y vamos a calcular las medias por condición de esta manera (que evidentemente son las mismas que antes),

> tapply(Vigilancia,Dosis,mean)
a b c
32.50 28.25 19.25



Un aspecto importante en cualquier experimento es observar los datos en cada grupo, para lo cual podemos tener el diagrama de caja y bigotes para cada grupo. El comando que se emplea es plot

> boxplot(Vigilancia~Dosis)





En la fórmula se indica la variable dependiente seguida (tras el signo ~) de la variable independiente.

En el gráfico se puede observar una diferencia clara entre el grupo de dosis “c” y los otros dos grupos. Naturalmente, viendo el gráfico y la existencia de un efecto significativo de Dosis en el ANOVA, lo que hemos de hacer ahora son comparaciones múltiples. (En caso de que el ANOVA no hubiera sido significativo, no debes proceder a efectuar estas pruebas.) De esta manera podemos determinar entre qué condiciones experimentales hay diferencias significativas. Para ello, emplearemos el método de Tukey.

Para ello crearemos el objeto ej1Tukey empleando la función TukeyHSD

> ej1Tukey _ TukeyHSD(ej1.aov,"Dosis")



Para ver el resultado, simplemente hemos de teclear el nombre del objeto, es decir, ej1Tukey

> ej1Tukey
Tukey multiple comparisons of means
95% family-wise confidence level

Fit: aov(formula = Vigilancia ~ Dosis, data = ej1)

$Dosis
diff lwr upr
b-a -4.25 -11.15796 2.657961
c-a -13.25 -21.50659 -4.993408
c-b -9.00 -16.83289 -1.167109



Las diferencias entre medias en las que el intervalo de confianza que engloba los límites inferior y superior no contienen el valor 0, son estadísticamente significativas con el método de Tukey. En nuestro caso, son las diferencias entre los grupos “b” y “c”, y entre los grupos “a” y “c”. Esto puede verse también si trazamos los intervalos de confianza gráficamente. Para ello emplearemos la función plot

> plot(ej1Tukey)






Se puede apreciar que sólo el intervalo de confiaza de la diferencia entre los grupos “a” y “b” toca 0 (es decir, que la diferencia entre las dos medias no es estadísticamente significativa.

Una nota respecto a los gráficos. Para grabar los gráficos en Linux, podemos emplear la expresión postscript antes del gráfico (o gráficos). Por ejemplo, si escribimos

> postscript("ej1Tukey.ps)

y luego volvemos a escribir

> plot(ej1Tukey)

Habremos creado el archivo ej1Tukey.ps, que está en formato postscript. Si ya hemos hecho el gráfico que queríamos podemos emplear dev.off

> dev.off()

Y ahora los gráficos aparecerán únicamente en la pantalla. En el caso de Windows, en lugar de postscript() hay que emplear windows()

Ahora vamos a generalizar un poco lo que tenemos, incluyendo una segunda variable independiente...es el ejemplo 2.



Ejemplo 2. ANOVA factorial entre sujetos con dos factores



El Apéndice II contiene los datos en los que se contabilizó el nivel de vigilancia de hombre y mujeres a los que se les había dado dos posibles niveles de dosis de una droga. En este caso, tenemos un diseño entre-sujetos factorial 2x2, con los factores Género (hombres,mujeres) y Dosis (a,b).

Lo primero que has de hacer es crear un archivo con los datos del Apéndice II y guardarlo en formato ASCII con el nombre ej2.txt

Para crear el fichero en formato R, sólo has de de introducir el comando siguiente:

> ej2 _ read.table("ex2.txt",header=T)

Y ahora ya puedes hacer el ANOVA:

> aov.ej2 _ aov(Vigilancia~Género*Dosis,ej2)


Observa que las dos variables independientes están separados por un asterisco *. Dicho asterisco indica a R que queremos analizar dicha interacción entre Género y Dosis. Si únicamente quisiéramos analizar los dos efectos principales, habríamos de reemplazar el asterisco con el signo de más (+).

La Tabla del ANOVA tendrá este aspecto:

> summary(aov.ej2)
Df Sum Sq Mean Sq F value Pr(>F)
Género 1 76.562 76.562 2.9518 0.1115
Dosis 1 5.062 5.062 0.1952 0.6665
Género:Dosis 1 0.063 0.063 0.0024 0.9617
Residuals 12 311.250 25.938


Podemos ver que ni los efectos principales ni la interacción han resultado significativos en este experimento.

Vamos a ver las medias por condición. Como antes, el comando para ello es tapply:

> tapply(ej2$Vigilancia,list(ej2$Género,ej2$Dosis),mean)
a b
h 15.75 16.75
m 11.25 12.50

(Recuerda que aquí podríamos haber empleado attach para evitar el uso de $columna, si bien hay que tener cuidado en no repetir el nombre de los objetos; por ejemplo, tendremos que haber borrado los objetos con el mismo nombre del Ejemplo 1.)

Como en el Ejemplo 1, el primer argumento es la columna de la variable dependiente (ej2$Vigilancia), y dado que tenemos un diseño con 2 factores y queremos las medias por condición, hemos de indicar el segundo argumento como una lista (list), en la que listamos los factores en cuestión. (Si hubiésemos tenido 3 factores, hubieramos puesto los 3 factores en la lista.) El tercer argumento es el estadístico que queremos calcular, que en nuestro caso es la media (“mean”, en inglés)

Como has podido imaginar, es posible obtener las medias marginales de Género y de Dosis. Por ejemplo, para tener las medias marginales de Género (independientemente de Dosis) has de emplear:

> tapply(ej2$Vigilancia,ej2$Género,mean)
h m
16.250 11.875



Y para obtener las medias marginales de Dosis, el comando es:

> tapply(ej2$Vigilancia,ej2$Dosis,mean)
a b
13.500 14.625



En diseños factoriales es de interés tener un gráfico para apreciar los efectos principales y la interacción. El comando a emplear es interaction.plot:

> interaction.plot(ej2$Dosis,ej2$Género,ej2$Vigilancia)



Y el resultado lo tenemos en el gráfico de abajo. Observar que primero ponemos la variable que queremos tener en el eje de abscisas (X), de manera que podemos intercambiar el orden de Dosis y Género; en último lugar ponemos la variable dependiente.








Naturalmente, es fácil generalizar lo que hemos visto para el caso de 3 o más factores entre.

Recuerda que para salir del programa sólo has de pulsar q()



Ejemplo 3. ANOVA intra-sujetos de un factor



Pensemos que tenemos un experimento en el que cinco sujetos han de memorizar una lista de palabras. Las palabras de la lista son de tres tipos: palabras don valencia positiva, negativa o neutra. La variable dependiente es el número de palabras recordadas en la fase de test. Los datos se presentan en el Apéndice III. Observa que tenemos un único factor (la valencia de las palabras) con tres factores (negativa, positiva y neutra). Tenemos además un factor de efectos aleatorios: Sujetos.

Para efectuar el ANOVA con estos datos, hemos de crear un archivo ej3 que contiene los datos. Observad que cada observación aparece en una fila diferente (a diferencia de los programas habituales de estadística como SPSS o Systat).

Como ya sabemos el archivo con formato R se consigue con el comando

> ej3 _ read.table("ej3.txt",header=T)



Para efectuar el ANOVA el comando a efectuar es:

> aov.ej3 _ aov(Recuerdo~Valencia+Error(Sujeto/Valencia),ej3)



Dado que el factor Valencia está cruzado con el factor aleatorio Sujeto (esto es, cada sujeto recibe los tres tipos de palabra), hemos de especificar el término de error para Valencia, que en nuestro caso es Sujeto por Valencia. Para hacer esto, añadimos el término Error(Sujeto/Valencia) al factor Valencia.

La tabla del ANOVA tiene el siguiente aspecto:

> summary(aov.ej3)
Error: Sujeto
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 4 105.067 26.267

Error: Sujeto:Valencia
Df Sum Sq Mean Sq F value Pr(>F)
Valencia 2 2029.73 1014.87 189.11 1.841e-07 ***
Residuals 8 42.93 5.37
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1


Observa que el análisis de los factores entre-sujetos se ofrece en primer lugar (en nuestro ejemplo, no hay ningún factor entre-sujetos), que es seguro por los factores intra-sujetos. Observa que el valor de probabilidad p para Valencia se expresa en notación científica dado su valor tan bajo.

La tabla de las medias se consigue con tapply

> tapply(ej3$Recuerdo,ej3$Valencia,mean)
Neg Neu Pos
27.8 11.6 40.0



Ejemplo 4. ANOVA factorial intra-sujetos (dos factores “intra”)



El Apéndice IV contiene los datos de un experimento en el que cinco sujetos hubieron de recordad palabras de diferente valencia (como en el Ejemplo 3, con tres niveles de Valencia). Además, el experimento constó de dos bloques, en uno de llos habían de recordar los items de manera libre, o bien con señal. Por tanto, tenemos dos factores: Valencia (3 niveles: positiva, negativa, neutra) y Tarea (2 niveles: libre, con señal). Has de introducir los datos del fichero ASCII con nombre ej4.txt en un archivo de nombre ej4 con formato R:

> ej4 _ read.table("ej4.txt",header=T)



Y para hacer el ANOVA, escribimos

> aov.ex4 _ aov(Recuerdo~(Tarea*Valencia)+Error(Sujeto/(Tarea*Valencia)),ej4)



Observa que, en el ejemplo, el factor Sujeto está cruzado tanto con Tarea como con Valencia, de manera que hemos de especificar tres términos de error: uno para Tarea, otro para Valencia, y otro para la interacción entre estos dos. No obstante, R es lo suficientemente espabilado para dividir poner estos tres términos de error una vez se indica el término de error de la interacción en el comando anterior.

La tabla del ANOVA tendrá el siguiente aspecto:

> summary(aov.ej4)

Error: Sujeto
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 4 349.13 87.28

Error: Sujeto:Tarea
Df Sum Sq Mean Sq F value Pr(>F)
Tarea 1 30.0000 30.0000 7.3469 0.05351 .
Residuals 4 16.3333 4.0833
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

Error: Sujeto:Valencia
Df Sum Sq Mean Sq F value Pr(>F)
Valencia 2 9.8000 4.9000 1.4591 0.2883
Residuals 8 26.8667 3.3583

Error: Sujeto:Tarea:Valencia
Df Sum Sq Mean Sq F value Pr(>F)
Tarea:Valencia 2 1.4000 0.7000 0.2907 0.7553
Residuals 8 19.2667 2.4083



Podemos apreciar que no ha habido ningún efecto significativo, si bien el efecto principal de Tarea ha rozado la significatividad estadística.

La tabla de las medias por condición la tenemos con tapply

> tapply(ej4$Recuerdo,list(ej4$Tarea,ej4$Valencia),mean)
Neg Neu Pos
Libre 10.2 11.2 11.0
Señal 11.8 13.0 13.6



La explicación es similar a la que ya vimos en el caso del Ejemplo 2 (ANOVA factorial entre-sujetos). Y finalmente trazar el gráfico de la interacción de los dos factores, empleamos interaction.plot

> interaction.plot(ej4$Tarea,ej4$Valencia,ej4$Recuerdo)








Ejemplo 5. Diseños factoriales mixtos



El Apéndice V contiene los datos de un experimento con 18 sujetos, 9 mujeres y 9 hombres. Cada sujeto recibe una de las tres posibles dosis de una droga. Todos los sujetos recibieron tres tipos de palabra (valencia positiva, negativa o neutra) empleando dos tipo de tarea de memoria (recuerdo libre, o recuerdo con señal). Por tanto, tenemos 2 factores entre-sujeto: Género (2 niveles) y Dosis (3 niveles); y 2 factores intra-sujeto: Tarea (2 niveles) y Valencia (2 niveles). Graba los datos ASCII en el archivo ej5.txt

Para pasar el archivo ASCII ej5.txt al archivo ej5 con formato R harás de escribir

> ej5 _ read.table("ex5.txt",header=T)



Para efectuar el ANOVA escribimos

> aov.ej5 _ aov(Recuerdo~(Tarea*Valencia*Género*Dosis)+Error(Sujeto/(Tarea*Valencia))+(Género*Dosis),ej5)


Observa que hemos de distinguir los factores entre- e intra-sujetos. Los factores entre-sujeto están dentro de la expresión Error(Sujeto/factores intra)

La tabla del ANOVA será la siguiente:

> summary(aov.ej5)

Error: Sujeto
Df Sum Sq Mean Sq F value Pr(>F)
Género 1 425.04 425.04 4.0881 0.06819 .
Dosis 2 688.02 344.01 3.3088 0.07498 .
Género:Dosis 2 62.45 31.23 0.3003 0.74644
Residuals 11 1143.67 103.97
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

Error: Sujeto:Tarea
Df Sum Sq Mean Sq F value Pr(>F)
Tarea 1 96.333 96.333 36.5402 8.37e-05 ***
Tarea:Género 1 2.042 2.042 0.7744 0.3977
Tarea:Dosis 2 7.128 3.564 1.3519 0.2986
Tarea:Género:Dosis 2 3.163 1.582 0.6000 0.5658
Residuals 11 29.000 2.636
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

Error: Sujeto:Valencia
Df Sum Sq Mean Sq F value Pr(>F)
Valencia 2 14.685 7.343 4.3956 0.02477 *
Valencia:Género 2 9.771 4.885 2.9246 0.07477 .
Valencia:Dosis 4 24.809 6.202 3.7129 0.01865 *
Valencia:Género:Dosis 4 3.985 0.996 0.5964 0.66901
Residuals 22 36.750 1.670
---
Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1

Error: Sujeto:Tarea:Valencia
Df Sum Sq Mean Sq F value Pr(>F)
Tarea:Valencia 2 5.389 2.694 1.6737 0.2106
Tarea:Valencia:Género 2 5.146 2.573 1.5982 0.2249
Tarea:Valencia:Dosis 4 4.773 1.193 0.7412 0.5741
Tarea:Valencia:Género:Dosis 4 2.609 0.652 0.4052 0.8029
Residuals 22 35.417 1.610

Error: Within
Df Sum Sq Mean Sq
Género 1 133.333 133.333
Tarea:Género 1 0.333 0.333
Valencia:Género 2 8.667 4.333
Tarea:Valencia:Género 2 8.667 4.333



Y si ahora queremos tener las medias por condición, empleamos tapply

> tapply(ej5$Recuerdo,list(ej5$Género,ej5$Dosis,ej5$Tarea,ej5$Valencia),mean)
, , L, Neg

A B C
H 16 15.000000 19.66667
M 11 8.333333 17.33333

, , S, Neg

A B C
H 17.33333 17.33333 20.66667
M 12.66667 10.00000 18.00000

, , L, Neu

A B C
H 15.33333 13.666667 18.66667
M 11.66667 8.666667 17.33333

, , S, Neu

A B C
H 17.33333 18.00000 21.66667
M 12.66667 11.66667 19.00000

, , L, Pos

A B C
H 16.33333 16.33333 20.33333
M 10.33333 11.00000 17.33333

, , S, Pos

A B C
H 17.00000 19.66667 21.33333
M 12.66667 12.33333 19.00000



O bien podemos pedir, por ejemplo, las medias de la interacción Dosis*Valencia con tapply

> tapply(ej5$Recuerdo,list(ej5$Dosis,ej5$Valencia),mean)
Neg Neu Pos
A 14.25000 14.25000 14.08333
B 12.66667 13.00000 14.83333
C 18.91667 19.16667 19.50000



Igualmente podríamos trazar la interacción entre, de nuevo, Dosis por Valencia, con interaction.plot

> interaction.plot(ej5$Dosis,ej5$Valencia,ej5$Recuerdo)






Recuerda que para salir del programa sólo has de pulsar q()

Finalmente, cabe indicar que R puede emplearse para muchísimos otros aspectos del análisis. En otros sitios web podrás encontrar excelentes ejemplos.



Apéndices

Apéndice I. Datos para el ejemplo 1


Observación Dosis Vigilancia

1 a 30

2 a 38

3 a 35

4 a 41

5 a 27

6 a 24

7 b 32

8 b 26

9 b 31

10 b 29

11 b 27

12 b 35

13 b 21

14 b 25

15 c 17

16 c 21

17 c 20

18 c 19


Apéndice II. Datos para el ejemplo 2


Observación Género Dosis Vigilancia

1 m a 8

2 m a 12

3 m a 13

4 m a 12

5 m b 6

6 m b 7

7 m b 23

8 m b 14

9 h a 15

10 h a 12

11 h a 22

12 h a 14

13 h b 15

14 h b 12

15 h b 18

16 h b 22


Apéndice III. Datos para el ejemplo 3


Observacion Sujeto Valencia Recuerdo

1 Pedro Neg 32

2 Pedro Neu 15

3 Pedro Pos 45

4 María Neg 30

5 María Neu 13

6 María Pos 40

7 Elena Neg 26

8 Elena Neu 12

9 Elena Pos 42

10 Vanessa Neg 22

11 Vanessa Neu 10

12 Vanessa Pos 38

13 Luis Neg 29

14 Luis Neu 8

15 Luis Pos 35


Apéndice IV. Datos para el ejemplo 4


Observación Sujeto Tarea Valencia Recuerdo

1 Pedro Libre Neg 8

2 Pedro Libre Neu 9

3 Pedro Libre Pos 5

4 Pedro Señal Neg 7

5 Pedro Señal Neu 9

6 Pedro Señal Pos 10

7 Victor Libre Neg 12

8 Victor Libre Neu 13

9 Victor Libre Pos 14

10 Victor Señal Neg 16

11 Victor Señal Neu 13

12 Victor Señal Pos 14

13 Maria Libre Neg 13

14 Maria Libre Neu 13

15 Maria Libre Pos 12

16 Maria Señal Neg 15

17 Maria Señal Neu 16

18 Maria Señal Pos 14

19 Amparo Libre Neg 12

20 Amparo Libre Neu 14

21 Amparo Libre Pos 15

22 Amparo Señal Neg 17

23 Amparo Señal Neu 18

24 Amparo Señal Pos 20

25 Ana Libre Neg 6

26 Ana Libre Neu 7

27 Ana Libre Pos 9

28 Ana Señal Neg 4

29 Ana Señal Neu 9

30 Ana Señal Pos 10


Apéndice V. Datos para el ejemplo 5


Obs Sujeto Género Dosis Tarea Valencia Recuerdo

1 A M A L Neg 8

2 A M A L Neu 9

3 A M A L Pos 5

4 A M A S Neg 7

5 A M A S Neu 9

6 A M A S Pos 10

7 B M A L Neg 12

8 B M A L Neu 13

9 B M A L Pos 14

10 B M A S Neg 16

11 B M A S Neu 13

12 B M A S Pos 14

13 C M A L Neg 13

14 C M A L Neu 13

15 C M A L Pos 12

16 C M A S Neg 15

17 C M A S Neu 16

18 C M A S Pos 14

19 D M B L Neg 12

20 D M B L Neu 14

21 D M B L Pos 15

22 D M B S Neg 17

23 D M B S Neu 18

24 D M B S Pos 20

25 E M B L Neg 6

26 E M B L Neu 7

27 E M B L Pos 9

28 E M B S Neg 4

29 E M B S Neu 9

30 E M B S Pos 10

31 L M B L Neg 7

32 L M B L Neu 5

33 L M B L Pos 9

34 L M B S Neg 9

35 L M B S Neu 8

36 L M B S Pos 7

37 G M C L Neg 23

38 G M C L Neu 22

39 G M C L Pos 23

40 G M C S Neg 25

41 G M C S Neu 23

42 G M C S Pos 22

43 H M C L Neg 14

44 H M C L Neu 14

45 H M C L Pos 13

46 H M C S Neg 15

47 H M C S Neu 17

48 H M C S Pos 17

49 I M C L Neg 15

50 I M C L Neu 16

51 I M C L Pos 16

52 I M C S Neg 14

53 I M C S Neu 17

54 I M C S Pos 18

55 J H A L Neg 12

56 J H A L Neu 11

57 J H A L Pos 13

58 J H A S Neg 15

59 J H A S Neu 14

60 J H A S Pos 15

61 K H A L Neg 22

62 K H A L Neu 20

63 K H A L Pos 23

64 K H A S Neg 25

65 K H A S Neu 22

66 K H A S Pos 21

67 L H A L Neg 14

68 L H A L Neu 15

69 L H A L Pos 13

70 L H A S Neg 12

71 L H A S Neu 16

72 L H A S Pos 15

73 M H B L Neg 15

74 M H B L Neu 14

75 M H B L Pos 16

76 M H B S Neg 15

77 M H B S Neu 18

78 M H B S Pos 21

79 N H B L Neg 12

80 N H B L Neu 10

81 N H B L Pos 14

82 N H B S Neg 15

83 N H B S Neu 14

84 N H B S Pos 17

85 O H B L Neg 18

86 O H B L Neu 17

87 O H B L Pos 19

88 O H B S Neg 22

89 O H B S Neu 22

90 O H B S Pos 21

91 P H C L Neg 22

92 P H C L Neu 22

93 P H C L Pos 24

94 P H C S Neg 23

95 P H C S Neu 25

96 P H C S Pos 25

97 Q H C L Neg 18

98 Q H C L Neu 17

99 Q H C L Pos 18

100 Q H C S Neg 17

101 Q H C S Neu 19

102 Q H C S Pos 19

103 R H C L Neg 19

104 R H C L Neu 17

105 R H C L Pos 19

106 R H C S Neg 22

107 R H C S Neu 21

108 R H C S Pos 20