我的实验由两个因素组成,一个在受试者之间,另一个在受试者内部。时间是受试者之间的因素,并保持两个水平:(低和高)。 Times是主题内的因素,它具有三个层次:1、4、5。dv是我的因变量,id是每个参与者的标识符。我附加了前6位参与者的数据。
我使用R进行了ANOVA,这两个因素均产生了显着结果。我有两个计划的对比:
1)在时间1,我想比较两个年龄段(低与高)。也就是说,主题之间的比较。
2)在年龄较低的时候,我想比较时间1和时间5。也就是说,在主题内进行比较。
我当然可以执行t检验,但这似乎不合适,因为我可以在此处将更多单元格作为标准误差估算的基础。我的问题是如何进行上述对比?什么是适当的自由度?
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"))
答案 0 :(得分:1)
加载lme4
软件包和emmeans
软件包,该软件包适合多层模型(替代重复测量方差分析),该软件包可以进行对比。
library(lme4)
library(emmeans)
这适合模型,其中dv
是通过交互作用预测的(R自动填充主要效果),再加上time
的随机截距和随机效果-两者都嵌套在{{ 1}}。 id
是我从您的帖子中的dat
中保存的内容。
dput
对比度令人困惑,我总是偏执,要弄错了。因此,我们可以使用mod <- lmer(dv ~ age * time + (1 + time | id), dat)
来找到它们。我们可以拟合一个emmeans
对象,该对象获取emmeans
和time
的每种组合的值:
age
我们想要的对比度是emm_mod <- emmeans(mod, ~ time + age)
结果的第三和第十四(您可以自行运行以查看其外观)。通过将pairs()
放在coef()
对象周围,可以获得所需的特定对比度。您只需要两列-第三和第14:
pairs()
哪个返回:
(contr_mat <- coef(pairs(emm_mod))[, c("c.3", "c.14")])
您可以通过在 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
中指定它们来关注这两种对比。您还可以使用contr
进行选择的p值调整,无论如何-我将从adjust
开始:
"holm"
emmeans(mod, ~ time + age, contr = contr_mat, adjust = "holm")
位将为您提供您感兴趣的p值:
contrasts
您也可以尝试$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
:
adjust = "none"