contrastes planificados en modelos mixtos

Pregunta hecha: hace 8 meses Ultima actividad: hace 8 meses
up 1 down

Mi experimento consiste en dos factores, uno medio y uno dentro tema. El tiempo es el factor entre sujetos y almacenar dos niveles: (bajo y alto). Times es los factores intra-sujeto y mantenga tres niveles: 1, 4, 5. dv es mi variable dependiente, y el ID de un identificador para cada participante. I adjunto los datos para los 6 primeros participantes.

El uso de R, me encontré con un ANOVA que arrojó resultados significativos para ambos factores. Tengo dos contrastes planificados:

1) En el momento 1, quiero comparar los dos grupos de edad (de baja vs alta). Es decir, una comparación entre sujetos.

2) En condiciones de poca edad, quiero comparar Tiempo 1 y Tiempo 5. Es decir, una comparación dentro del tema.

Por supuesto que podría realizar pruebas t, sin embargo, no parece apropiado que puedo basar mi estimación del error estándar en más células aquí. Mi pregunta es ¿cómo puedo realizar los contrastes anteriores, y cuáles son el grado adecuado de libertad?

structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 
5L, 5L, 5L, 5L, 5L, 5L), .Label = c("1", "2", "3", "5", "6", 
"7", "8", "11", "12", "13", "15", "17", "18", "19", "20", "21", 
"22", "23", "24", "25", "27", "28", "29", "31", "32", "34", "35", 
"36", "37", "38", "39", "40", "42", "43", "44", "45", "46", "47", 
"48", "49", "52", "53", "54", "55", "56", "58", "59", "60", "62", 
"63", "64", "66", "67", "68", "69", "70", "71", "72", "73", "74", 
"75", "77", "79", "80", "81", "83", "84", "85", "86", "87", "88", 
"89", "90", "91", "92", "93", "94", "96", "97", "98", "99", "100", 
"101", "102", "103", "104", "105", "106", "107", "108", "109", 
"110", "111", "112", "113", "114", "115", "116", "117", "118", 
"119", "120", "121", "122", "123", "124", "125", "126", "127", 
"128", "129", "130", "132", "133", "134", "135", "136", "137", 
"138", "139", "140", "142", "143", "144", "145", "146", "147", 
"148", "149", "150", "151", "152", "153", "154", "156", "157", 
"158", "159", "160", "161", "162", "163", "165", "166", "167", 
"168", "169", "171", "172", "174", "175", "176", "177", "178", 
"179", "180", "181", "182", "183", "184", "185", "186", "187", 
"188", "189", "190", "191", "192", "193", "194", "195", "196", 
"200", "201", "202", "203", "204", "205", "206", "208", "209", 
"210", "212", "213", "214", "215", "216", "217", "218", "219", 
"220", "222", "223", "224", "226", "228", "230", "231", "232", 
"233", "234", "236", "237", "238", "239", "240", "241", "242", 
"243", "244", "246", "247", "248", "249", "250", "251", "252", 
"253", "254", "255", "256", "257", "258", "260", "261", "262", 
"263", "266", "267", "269", "270", "271", "272", "273", "274", 
"275", "276", "277", "278", "279", "280", "281", "282", "283", 
"284", "285", "286", "287", "288", "289", "290", "291", "292", 
"293", "294", "295", "296", "298", "299", "300"), class = "factor"), 
    age = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L), .Label = c("high", "low"), class = "factor"), 
    time = structure(c(3L, 3L, 2L, 2L, 1L, 1L, 3L, 3L, 2L, 2L, 
    1L, 1L, 3L, 3L, 2L, 2L, 1L, 1L, 3L, 3L, 2L, 2L, 1L, 1L, 3L, 
    3L, 2L, 2L, 1L, 1L), .Label = c("1", "4", "5"), class = "factor"), 
    dv = c(104, 102, 104, 103, 104, 104, 102, 102, 102, 102, 
    106, 106, 106, 106, 107, 107, 106, 106, 106, 107, 105, 104, 
    106, 107, 104, 101, 104, 101, 104, 106)), row.names = c(NA, 
-30L), class = c("tbl_df", "tbl", "data.frame"))

1 respuesta

up 1 down

Carga el lme4 paquete, que se ajusta a los modelos multinivel (una alternativa a un ANOVA de medidas repetidas), y emmeans, Lo que pueden hacer los contrastes.

library(lme4)
library(emmeans)

Esto se ajusta a un modelo donde el dv se predice por la interacción (R llena-in automáticamente los efectos principales), además de una intersección aleatoria y un efecto aleatorio de time-tanto anidado dentro de id. dat es lo que me salvó de la dput en su puesto.

mod <- lmer(dv ~ age * time + (1 + time | id), dat)

Los contrastes son confusas, y siempre estoy paranoica Voy a hacerlo mal. Así que podemos usar emmeans para encontrarlos. Podemos ajustar una emmeans objeto, que obtiene los valores en cada combinación de time y age:

emm_mod <- emmeans(mod, ~ time + age)

Los contrastes que queremos son el tercero y décimo cuarto de la pairs() resultado (ejecutarlo en su cuenta para ver lo que parece). Puede obtener la específica contrasta desea, poniendo coef() alrededor de pairs() objeto. Lo único que quiere las dos columnas-3 y 14a:

(contr_mat <- coef(pairs(emm_mod))[, c("c.3", "c.14")])

Que devuelve:

       c.3 c.14
1,high   1    0
4,high   0    0
5,high   0    0
1,low   -1    1
4,low    0    0
5,low    0   -1

Puede centrarse en estos dos contrastes especificándolos en contr. También puede utilizar el ajuste de valor de p de elección adjust a lo que sea-yo comenzar con "holm":

emmeans(mod, ~ time + age, contr = contr_mat, adjust = "holm")

los contrasts poco le dará los valores de p que está interesado:

$emmeans
 time age    emmean        SE df lower.CL upper.CL
 1    high 106.2500 0.6518719  3 104.1755 108.3245
 4    high 105.7500 0.8544406  3 103.0308 108.4692
 5    high 106.2500 0.4759431  3 104.7353 107.7647
 1    low  105.0000 0.5322511  3 103.3061 106.6939
 4    low  102.6667 0.6976478  3 100.4464 104.8869
 5    low  102.5000 0.3886059  3 101.2633 103.7367

Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

$contrasts
 contrast estimate        SE df t.ratio p.value
 c.3          1.25 0.8415630  3   1.485  0.2341
 c.14         2.50 0.7104068  3   3.519  0.0779

P value adjustment: holm method for 2 tests 

También puede tratar adjust = "none":

> emmeans(mod, ~ time + age, contr = contr_mat, adjust = "none")$contrasts
 contrast estimate        SE df t.ratio p.value
 c.3          1.25 0.8415630  3   1.485  0.2341
 c.14         2.50 0.7104068  3   3.519  0.0389