我在lme
R包中使用nlme
函数来测试因子items
的级别是否与因子condition
的级别有显着的交互。因子condition
有两个级别:Control
和Treatment
,因子items
有3个级别:E1,...,E3
。我使用以下代码:
f.lme = lme(response ~ 0 + factor(condition) * factor(items), random = ~1|subject)
其中subject
是随机效应。这样,当我跑:
summary(f.lme)$tTable
我将得到以下输出:
factor(condition)Control
factor(condition)Treatment
factor(items)E2
factor(items)E3
factor(condition)Treatment:factor(items)E2
factor(condition)Treatment:factor(items)E3
与Value, Std.Error, DF, t-value, p-value
列一起使用。我有两个问题:
如果我想比较Control
与Treatment
,我是否应该在estimable()
中使用gmodels
函数并对(-1,1,0,0,0,0)
进行对比
我对items
的{{1}}级别E1, E2, E3
的级别是否有所不同感兴趣,所以我对交互条件是否重要感兴趣(只需检查condition
列??):
p-value
但是,如何判断factor(condition)Treatment:factor(items)E2
factor(condition)Treatment:factor(items)E3
是否重要?它没有显示在摘要输出中,我认为它与R中使用的对比度有关...非常感谢!
答案 0 :(得分:5)
我恭敬地不同意@ sven-hohenstein
在R中,分类变量的默认编码是治疗对比度编码。在治疗对比中,第一级是参考水平。将所有剩余因子水平与参考水平进行比较。
首先,此处使用零截距... ~ 0 + ...
指定固定效果。这意味着condition
编码不再是contr.treatment
。如果我没有弄错的话,Control
和Treatment
的主要影响现在可以解释为它们各自偏离群体的意思......
在您的模型中,要素项目有三个级别:E1,E2和E3。两个对比测试了(a)E2和E1,以及(b)E3和E1之间的差异。这些对比的主要影响是对因子条件的控制水平进行估计,因为这是该因子的参考类别。
...当items
的值达到E1
的参考水平时!因此:
Control
= Control:E1
次观察偏离项E1
的平均值。Treatment
= Treatment:E1
次观察偏离项E1
的平均值。E2
= Control:E2
次观察偏离项E2
的平均值。E3
= Control
次观察偏离项E3
的平均值。Treatment:E2
= Treatment:E2
次观察偏离项目E2
的平均值Treatment:E3
= Treatment:E3
次观察偏离项E3
的平均值。感谢指向estimable
的指针,我之前没有尝试过。对于自定义对比,我来自multcomp
包中的(ab)using glht
。
答案 1 :(得分:5)
您需要先解决有关互动的第二个问题。您当然可以像Jan van der Laan的答案那样设置似然比检验。您也可以直接在适合的lme对象上使用anova
。有关详细信息,请参阅anova.lme
的帮助页面。
在解释系数方面,我经常发现有时需要制作组均值的汇总表,以便适当地确定模型中哪个系数的线性组合代表每个组。我将在你的问题中展示拦截移除的一个例子,虽然我发现一旦我在模型中有两个因素,这很少帮助我弄清楚我的系数。这是我对Orthodont数据集(我决定平衡)的意思的一个例子:
require(nlme)
# Make dataset balanced
Orthodont2 = Orthodont[-c(45:64),]
# Factor age
Orthodont2$fage = factor(Orthodont2$age)
# Create a model with an interaction using lme; remove the intercept
fit1 = lme(distance ~ Sex*fage - 1, random = ~1|Subject, data = Orthodont2)
summary(fit1)
以下是估计的固定效果。但是这些系数中的每一个代表什么呢?
Fixed effects: distance ~ Sex * fage - 1
Value Std.Error DF t-value p-value
SexMale 23.636364 0.7108225 20 33.25213 0.0000
SexFemale 21.181818 0.7108225 20 29.79903 0.0000
fage10 0.136364 0.5283622 61 0.25809 0.7972
fage12 2.409091 0.5283622 61 4.55954 0.0000
fage14 3.727273 0.5283622 61 7.05439 0.0000
SexFemale:fage10 0.909091 0.7472171 61 1.21664 0.2284
SexFemale:fage12 -0.500000 0.7472171 61 -0.66915 0.5059
SexFemale:fage14 -0.818182 0.7472171 61 -1.09497 0.2778
汇总群体意味着有助于解决这个问题。
require(plyr)
ddply(Orthodont2, .(Sex, age), summarise, dist = mean(distance) )
Sex fage dist
1 Male 8 23.63636
2 Male 10 23.77273
3 Male 12 26.04545
4 Male 14 27.36364
5 Female 8 21.18182
6 Female 10 22.22727
7 Female 12 23.09091
8 Female 14 24.09091
请注意,第一个固定效应系数,称为SexMale
,是8岁男性的平均距离。固定效应SexFemale
是8岁女性平均距离。这些是最容易看到的(我总是从简单的开始),但其余的并不是很难搞清楚。 10岁男性的平均距离是第一个系数加上第三个系数(fage10
)。 10岁女性的平均距离是系数SexFemale
,fage10
和SexFemale:fage10
的总和。其余的则遵循相同的路线。
一旦您知道如何为群组创建系数的线性组合,您就可以使用estimable
来计算任何感兴趣的比较。当然,这里有一些关于主效应,相互作用的统计证据,离开交互的理论原因等等的警告。这是由您决定的。但是,如果我在模型中离开交互(请注意,没有关于交互的统计证据,请参阅anova(fit1)
),但又希望比较Male
与Female
的总体平均值,I会写出以下系数的线性组合:
# male/age group means
male8 = c(1, 0, 0, 0, 0, 0, 0, 0)
male10 = c(1, 0, 1, 0, 0, 0, 0, 0)
male12 = c(1, 0, 0, 1, 0, 0, 0, 0)
male14 = c(1, 0, 0, 0, 1, 0, 0, 0)
# female/age group means
female8 = c(0, 1, 0, 0, 0, 0, 0, 0)
female10 = c(0, 1, 1, 0, 0, 1, 0, 0)
female12 = c(0, 1, 0, 1, 0, 0, 1, 0)
female14 = c(0, 1, 0, 0, 1, 0, 0, 1)
# overall male group mean
male = (male8 + male10 + male12 +male14)/4
# overall female group mean
female = (female8 + female10 + female12 + female14)/4
require(gmodels)
estimable(fit1, rbind(male - female))
您可以检查整体组,这意味着要确保正确地进行系数的线性组合。
ddply(Orthodont2, .(Sex), summarise, dist = mean(distance) )
Sex dist
1 Male 25.20455
2 Female 22.64773
答案 2 :(得分:3)
测试互动是否重要的常用方法是进行似然比检验(例如,见discussion on R-Sig-ME)。
要做到这一点,你还必须估算一个没有互动的模型,你还必须使用method="ML"
:
f0 = lme(response ~ 0 + factor(condition) * factor(items),
random = ~1|subject, method="ML")
f1 = lme(response ~ 0 + factor(condition) + factor(items),
random = ~1|subject, method="ML")
然后,您可以使用anova
进行比较:
anova(f0, f1)