我无法将SAS脚本转换为相应的R脚本。
该模型是基于治疗(resp
)的反应(trt
)的重复测量分析,其中图(plot
)嵌套在治疗中。
SAS代码:
data data_set;
input trt $ plot time resp;
datalines;
Burn 1 1 27
Burn 1 9 25
Burn 1 12 18
Burn 1 15 21
Burn 2 1 5
Burn 2 9 15
Burn 2 12 10
Burn 2 15 12
...
Unburn 1 1 57
Unburn 1 9 46
Unburn 1 12 49
Unburn 1 15 51
Unburn 2 1 43
Unburn 2 9 59
Unburn 2 12 59
Unburn 2 15 60
proc mixed data = data_set;
class trt plot time;
model resp = trt time trt*time / ddfm = kr;
repeated time / subject = trt(plot) type = vc rcorr;
run;
尝试了R代码(从CSV文件加载数据集):
library(nlme)
data.set <- read.csv( "data_set.csv" )
data.set$plot <- factor( data.set$plot )
data.set$time <- factor( data.set$time )
model1 <- lme( resp ~ trt + time + trt:time, data = data.set, random = ~1 | plot )
这样可行,但不是所需的型号。我尝试过的其他尝试通常会导致错误:
Error in getGroups.data.frame(dataMix, groups) :
invalid formula for groups
基本上我在这里杂草了......
问题1:如何在R中指定与SAS中已指定的模型相同的模型?
问题2:我希望能够更改协方差矩阵以复制SAS中完成的其他工作。我相信我知道如何使用lme函数的相关参数来做到这一点。但如果我错了,请纠正我。
提前致谢。
答案 0 :(得分:0)
R中模型的规范逻辑上是:
model1 <- lme( resp ~ trt + time + trt:time, data = data.set, random = ~1 | trt:plot )
这给出了根据编码嵌套在治疗中的图,或者,在图和治疗之间存在相互作用。但是如果这样指定,那么它会生成提到的警告:
getGroups.data.frame(dataMix,groups)出错:公式无效 对于团体
遇到的问题与通过使用这种交互引入的水平(我认为)有关。无论确切的问题如何,都可以通过创建组合治疗图预测变量来解决问题:
data.set$trtplot <- with( data.set, factor( paste( trt, plot, sep = "." ) ) )
然后按如下方式进行分析:
model1 <- lme( resp ~ trt + time + trt:time, data = data.set, random = ~ 1 | trtplot )
为了完整性,这可以很容易地成为以下内容,其中添加了每个预测变量加上交互:
model1 <- lme( resp ~ trt * time, data = data.set, random = ~ 1 | trtplot )
然后在指定SAS
(CS)协方差结构时匹配Compound Symmetry
中获得的结果(尽管AIC标准不同 - 不确定原因)。因此,与上面指定了Variance Components
(VC)协方差结构的SAS代码略有不同,但这只是在SAS代码中更改结构类型的问题。
至于比较不同的协方差结构,这似乎更具挑战性。我想研究的协方差结构是:
任何想法都会受到欢迎!