如何从多个组中提取lme()函数的结果,然后在R中合并?

如何从多个组中提取lme()函数的结果,然后在R中合并?,r,extract,resultset,R,Extract,Resultset,首先,根据sl变量将以下数据随机分成两组,然后使用数据集下面显示的for循环为两组运行模型 mydata y x sl 1 5.297967 1 1 2 3.322833 2 1 3 4.969813 3 1 4 4.276666 4 1 5 5.972807 1 2 6 6.619440 2 2 7 8.045588 3 2 8 7.377759 4 2

首先,根据sl变量将以下数据随机分成两组,然后使用数据集下面显示的for循环为两组运行模型

mydata
              y  x sl
    1  5.297967  1  1
    2  3.322833  2  1
    3  4.969813  3  1
    4  4.276666  4  1
    5  5.972807  1  2
    6  6.619440  2  2
    7  8.045588  3  2
    8  7.377759  4  2
    9  6.907755  5  2
    10 8.672486  6  2
    11 8.283999  7  2
    12 8.455318  8  2
    13 7.414573  9  2
    14 8.634087 10  2
    15 7.356355  1  3
    16 6.606247  2  3
    17 6.396930  9  3
    18 6.579251 10  3
    19 5.521110  1  4
    20 2.224221  2  4
    21 6.742881  3  4
    22 6.709304  4  4
    23 6.875232  5  4
    24 8.476371  6  4
    25 7.360104  7  4
对两组使用lme函数运行模型,然后将β系数存储为矩阵,θ[随机截距项]存储为向量

sl.no=unique(mydata$sl)
m=length(unique(mydata$sl))
ngrp=2
set.seed(125)
idx=sample(1:ngrp, size=m, replace = T)

beta=matrix(NA, nrow = ngrp, ncol=3, byrow=T) #null matrix to store coefficients from both groups 
theta=rep(0,m) #null vector to store intercepts from both groups
library(nlme)
for ( g in 1:ngrp){
  rg=sl.no[idx==g]
  mydata_rG=mydata[mydata$sl %in% rg,] #Data set belongs to group-g


  lme_mod=lme(y~x+I(x^2),random = ~ 1|sl,
                  data = mydata_rG, method = "ML") #mixed effect model for each group


  beta[g,]=c(unlist(lme_mod$coefficients[1])[[1]],
             unlist(lme_mod$coefficients[1])[[2]],
             unlist(lme_mod$coefficients[1])[[3]])
  theta=c(unname(lme_mod$coefficients$random$sl))


}
我期待一个长度为m的θ向量。不幸的是,θ的大小只有一个。 感谢您的帮助

β和θ的结果


这只是关于如何存储θ值


θ[g]=。。。?顺便问一下,sl不是有两个组,而是有四个组吗?根据划分,有两个组,第一组有三个sl,第二组有一个sl。对于第一组,我将有三个θ表示第1组,一个θ表示第2组,请参见idx。组1的值为1,组2的值为2。创建rg是为了确定哪个sl应用于g1组或2Got组。非常微妙。通常情况下,对于群体而言,这将反映在数据中。那么,我先前提出的用g索引θ的问题解决不了你的问题吗?不,θ[g]不起作用:
beta
         [,1]       [,2]        [,3]
[1,] 4.895805  0.7954474 -0.05602771
[2,] 6.423533 -1.7441753  0.32049662

theta
[1] 4.264366e-21 #it should be length of m.
sl.no=unique(mydata$sl)
m=length(unique(mydata$sl))
ngrp=2
set.seed(125)
idx=sample(1:ngrp, size=m, replace = T)

beta=matrix(NA, nrow = ngrp, ncol=3, byrow=T) 
theta=numeric() #Change here
library(nlme)
for ( g in 1:ngrp){
   rg=sl.no[idx==g]
   mydata_rG=mydata[mydata$sl %in% rg,] 

  lme_mod=lme(y~x+I(x^2),random = ~ 1|sl,
          data = mydata_rG, method = "ML") 


  beta[g,]=c(unlist(lme_mod$coefficients[1])[[1]],
             unlist(lme_mod$coefficients[1])[[2]],
             unlist(lme_mod$coefficients[1])[[3]])
   theta=c(theta, unname(lme_mod$coefficients$random$sl)) #Change here

}