如何从多个组中提取lme()函数的结果,然后在R中合并?
首先,根据sl变量将以下数据随机分成两组,然后使用数据集下面显示的for循环为两组运行模型如何从多个组中提取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
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
}