r - 增加内存限制后,lme 使 Rstudio 崩溃并且电脑无响应

标签 r memory-management mixed-models nlme

我正在处理包含 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/

相关文章:

r - map 上的条形图

R - 有没有办法根据另一个具有不同列的数据框设置数据框列顺序

c - 这个自定义的malloc可以吗?

C++非连续分配数组

r - 使用 MuMIn::dredge 时模型无法收敛

r - 嵌套随机效应和相关的固定效应

r - 我正在循环遍历一个向量并尝试使用每个元素作为数据框列名称。如何读取 df3$x 中 $ 之后的每个元素?

rollapply 与一个函数采用矩阵返回 "incorrect number of dimensions"

c++ - 这些所谓的 'disasters' 指针使用不当会导致什么?

混合模型的残差建模: Any other package than nlme?