用于重复测量的等效R脚本SAS脚本,嵌套设计

时间:2016-04-22 13:59:44

标签: r sas

我无法将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函数的相关参数来做到这一点。但如果我错了,请纠正我。

提前致谢。

1 个答案:

答案 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代码中更改结构类型的问题。

至于比较不同的协方差结构,这似乎更具挑战性。我想研究的协方差结构是:

  • 复合对称(CS) - 完成
  • 方差组件(VC)
  • 非结构化(UN)
  • 空间力量(SP)

任何想法都会受到欢迎!