我正在处理包含 205 个观察值和 2 个解释变量的数据集:site
(两个级别)和 strain
(21 个级别)。当应变是固定变量时,我试图将混合模型拟合到数据。实验不平衡(即每个菌株*位点组合中有不同的重复次数)。我使用Rstudio 3.0.2; Windows 8。
我首先尝试运行以下命令 -
lme(dist_OFT_min1~strain ,
random=~strain|site,data=data.frame(d1),
method='REML')
但是我收到以下错误:
Error in logLik.lmeStructInt(lmeSt, lmePars) : 'Calloc' could not allocate memory (730512784 of 8 bytes)
In addition: Warning messages:
1: In logLik.lmeStructInt(lmeSt, lmePars) : Reached total allocation of 3873Mb: see help(memory.size)
2: In logLik.lmeStructInt(lmeSt, lmePars) : Reached total allocation of 3873Mb: see help(memory.size)
我尝试将内存限制增加到 8000 。但是,当我重新运行前一行 Rstudio(以及整个电脑)时,它变得非常缓慢且无响应,我让它运行了 30 多分钟,但没有任何结果。
我尝试将模型拟合到缩减数据集上 - 仅包含 5 个菌株:
lme(dist_OFT_min1~strain ,
random=~strain|site,
data=data.frame(d.test),
method='REML',
control = lmeControl(msMaxIter =90,maxIter=90))
又出现了另一种麻烦:
Error in lme.formula(dist_OFT_min1 ~ strain, random = ~strain | site, :
nlminb problem, convergence error code = 1 message = iteration limit reached without convergence (10)
任何人都可以帮助我了解我的数据可能会遇到什么样的问题吗?我怎样才能检查有没有? (我还是个初学者)。 这里我分享一下我自己模拟的类似数据,但我遇到了和原始数据相同的问题(实验室等于现场):
library(nlme)
u.strain=letters[1:10]
u.lab=paste('L',letters[1:5],sep='')
test.dat=data.frame(strain=sort(rep(u.strain,5)),lab=rep(u.lab,10),test=rep(7,50))
test.dat[order(test.dat$strain),'test']=test.dat[order(test.dat$strain),'test']+sort(rep(rnorm(n=10,mean=0,sd=3),5)) #strain effect
test.dat[order(test.dat$lab),'test']=test.dat[order(test.dat$lab),'test']+sort(rep(rnorm(n=5,mean=0,sd=4),10)) #lab effect
test.dat[,'test']=test.dat[,'test']+ rnorm(n=50,mean=0,sd=5) # interaction
test.dat=rbind(test.dat,test.dat,test.dat,test.dat,test.dat)
test.dat[,'test']=test.dat[,'test']+rnorm(n=250,0,sd=2.5)
我认为我实际需要的模型如下:
lme(teat~strain , random=~strain+strain:lab|lab,
data=data.frame(test.dat),method='REML')
仍然出现同样的问题。
附:我主要寻求估计相互作用应变的方差:实验室。 有什么建议吗?
最佳答案
明确定义交互:
test.dat$strainlab <- with(test.dat,interaction(strain,lab))
将站点(实验室)调整为固定效果(如果您 只有两个位点),应变与位点的相互作用是随机的:
m1 <- lme(test~strain+lab , random=~1|strainlab,
data=data.frame(test.dat),method='REML')
VarCorr(m1)
## strainlab = pdLogChol(1)
## Variance StdDev
## (Intercept) 29.286446 5.411695
## Residual 5.398621 2.323493
近似置信区间:
intervals(m1,which="var-cov")
## Approximate 95% confidence intervals
##
## Random Effects:
## Level: strainlab
## lower est. upper
## sd((Intercept)) 4.258995 5.411695 6.876374
##
## Within-group standard error:
## lower est. upper
## 2.106594 2.323493 2.562725
##
或者,将实验室和实验室间的相互作用拟合为随机:
m2 <- lme(test~strain , random=~1|lab/strain,
data=data.frame(test.dat),method='REML')
VarCorr(m2)
## Variance StdDev
## lab = pdLogChol(1)
## (Intercept) 18.608568 4.313765
## strain = pdLogChol(1)
## (Intercept) 29.286446 5.411695
## Residual 5.398621 2.323493
##
intervals(m2,which="var-cov")
## Approximate 95% confidence intervals
##
## Random Effects:
## Level: lab
## lower est. upper
## sd((Intercept)) 1.925088 4.313765 9.666346
## Level: strain
## lower est. upper
## sd((Intercept)) 4.259026 5.411695 6.876324
##
## Within-group standard error:
## lower est. upper
## 2.106600 2.323493 2.562717
关于r - 增加内存限制后,lme 使 Rstudio 崩溃并且电脑无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273451/