我想在R中使用nlme包来拟合混合模型,这相当于以下SAS代码:
proc mixed data = one;
class var1 var2 year loc rep;
model yld = var1 * var2;
random loc year(loc) rep*year(loc);
编辑:解释什么是实验
在重复中测试var1和var2的相同组合(重复重复编号为1:3)。重复(rep)被认为是随机的。在位置(loc)和年(年)重复这组实验。虽然复制品在每个位置和年份内按1:3编号,因为它们没有任何名称,但在一个位置和一年内的复制1在其他位置和其他年份内没有相关复制1
我尝试了以下代码:
require(nlme)
fm1 <- lme(yld ~ var1*var2, data = one, random = loc + year / loc + rep * year / loc)
我的代码是否正确?
编辑:基于建议的数据和模型 您可以从以下链接下载示例数据文件: https://sites.google.com/site/johndatastuff/mydata1.csv
data$var1 <- as.factor(data$var1)
data$var2 <- as.factor(data$var2)
data$year <- as.factor(data$year)
data$loc <- as.factor(data$loc)
data$rep <- as.factor(data$rep)
following suggestions from the comments below:
fm1 <- lme(yld ~ var1*var2, data = data, random = ~ loc + year / loc + rep * year / loc)
Error in getGroups.data.frame(dataMix, groups) :
Invalid formula for groups
基于SAS输出的预期
Type 3 tests of fixed effects
var1*var2 14 238 F value 16.12 Pr >F = < 0.0001
Covariance parameters:
loc = 0, year(loc) = 922161, year*rep(loc) = 2077492, residual = 1109238
我尝试了以下模型,我仍然遇到一些错误:
Edits: Just for information I tried the following model
require(lme4)
fm1 <- lmer(yld ~ var1*var2 + (1|loc) + (1|year / loc) + (1|rep : (year / loc)),
data = data)
Error in rep:`:` : NA/NaN argument
In addition: Warning message:
In rep:`:` : numerical expression has 270 elements: only the first used
答案 0 :(得分:4)
感谢您提供更详细的信息。我将数据存储在d
中,以避免与data
函数和参数混淆;这些命令无论哪种方式都有效,但这种避免data
通常被视为良好做法。
请注意,由于var
和var2
之间缺乏平衡,互动很难适应;这里是交叉表的参考:
> xtabs(~var1 + var2, data=d)
var2
var1 1 2 3 4 5
1 18 18 18 18 18
2 0 18 18 18 18
3 0 0 18 18 18
4 0 0 0 18 18
5 0 0 0 0 18
通常只是为了适应互动(并且没有主要效果),您使用的是:
而不是*
,但这里最适合制作单个因素,如下所示:
d$var12 <- factor(paste(d$var1, d$var2, sep=""))
然后使用nlme
,尝试
fm1 <- lme(yld ~ var12, random = ~ 1 | loc/year/rep, data = d)
anova(fm1)
并使用lme4
,尝试
fm1 <- lmer(yld ~ var12 + (1 | loc/year/rep), data=d)
anova(fm1)
另请注意,由于nlme
和lme4
在函数名称中有重叠,因此您只需要在R会话中加载一个;切换你需要关闭R并重新启动。 (存在其他方式,但这是最简单的解释。)