初始化lme中的协方差结构

时间:2013-07-14 00:21:10

标签: r mixed-models

如何为以下模型初始化非结构化协方差矩阵?

y<-data.frame(response=c(10,19,27,28,9,13,25,29,4,10,20,18,5,6,12,17),
               treatment=factor(rep(1:4,4)),
               subject=factor(rep(1:4,each=4))
               )
fit<-lme(response~-1+treatment,y,random=~1|subject,
         correlation=corSymm(form=~1|subject))

我尝试了一些变种,但每次出现错误都会得到:

Error in lme.formula(response ~ -1 + treatment, y, random = ~1 |  : 
  nlminb problem, convergence error code = 1
  message = function evaluation limit reached without convergence (9)

1 个答案:

答案 0 :(得分:5)

除了治疗均值效应(4个参数),随机效应方差(1)和残差方差(1)与仅16个数据集之外,非常难以拟合具有6个参数的非结构化相关矩阵点。如果我尝试使用更大的随机版数据集,它可以正常工作。

nSubj <- 20
respVec <- c(10,19,27,28,9,13,25,29,4,10,20,18,5,6,12,17)
set.seed(101)
y<-data.frame(response=sample(respVec,size=4*nSubj,replace=TRUE),
               treatment=factor(rep(1:4,nSubj)),
               subject=factor(rep(1:nSubj,each=4))
               )
library(nlme)
fit<-lme(response~-1+treatment,y,random=~1|subject,
         correlation=corSymm(form=~1|subject),
         control=lmeControl(msVerbose=TRUE))

现在我们可以尝试一下,看看我们可以逃脱的数据集有多小。将上面的内容打包成一个模拟数据并尝试拟合的测试函数,如果拟合失败则返回TRUE

testFun <- function(nSubj) {
    y<-data.frame(response=sample(respVec,size=4*nSubj,replace=TRUE),
               treatment=factor(rep(1:4,nSubj)),
               subject=factor(rep(1:nSubj,each=4))
               )
    fit <- try(lme(response~-1+treatment,y,random=~1|subject,
         correlation=corSymm(form=~1|subject)),silent=TRUE)
    inherits(fit,"try-error")
}

尝试测试函数N次并报告失败的比例:

testFun2 <- function(nSubj,N) {
   mean(replicate(N,testFun(nSubj)))
}

尝试一系列受试者(慢):

set.seed(101)
testRes <- sapply(4:20,testFun2,N=50)

结果:

##  [1] 0.64 0.04 0.00 0.00  ... 0.00

令我惊讶的是,这将有三分之一的时间用于4个科目; 96%的时间有5个科目:并且总是有> 5个科目。