[英]R extract regression coefficients from multiply regression via lapply command
我有一个包含多个变量的大型数据集,其中一个是状态变量,每个状态编码为1-50。 我想对数据集的其余27个变量(总共有55个变量)进行28个变量的回归,并针对每个状态进行回归。
换句话说,对state == 1的观测值在covariate1,covariate2,...,covariate27上进行变量1的回归。 然后,我想针对状态2-50的变量1重复此操作,并针对变量2,变量3,...,变量28重复整个过程。
我想我已经编写了正确的R代码来执行此操作,但是接下来我想做的是提取系数,理想情况下是将其提取到系数矩阵中。 有人可以帮我吗? 这是我到目前为止编写的代码:
for (num in 1:50) {
#PUF is the data set I'm using
#Subset the data by states
PUFnum <- subset(PUF, state==num)
#Attach data set with state specific data
attach(PUFnum)
#Run our prediction regression
#the variables class1 through e19700 are the 27 covariates I want to use
regression <- lapply(PUFnum, function(z) lm(z ~ class1+class2+class3+class4+class5+class6+class7+
xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+
e09600+e07180+e07220+e07260+e06500+e10300+
e59720+e11900+e18425+e18450+e18500+e19700))
Beta <- lapply(regression, function(d) d<- coef(regression$d))
detach(PUFnum)
}
这是经典的“ Split-Apply-Combine
问题的另一个示例,可以使用plyr
软件包来解决。 在您的问题中,您想
我将通过MASS
库中可用的Cars93
数据集进行说明。 我们感兴趣的是找出关系horsepower
和enginesize
根据origin
国。
# LOAD LIBRARIES
require(MASS); require(plyr)
# SPLIT-APPLY-COMBINE
regressions <- dlply(Cars93, .(Origin), lm, formula = Horsepower ~ EngineSize)
coefs <- ldply(regressions, coef)
Origin (Intercept) EngineSize
1 USA 33.13666 37.29919
2 non-USA 15.68747 55.39211
编辑。 例如,用PUF
代替Cars93
,用state
代替Origin
,用fm
代替公式
我已经稍微整理了一下代码:
fm <- z ~ class1+class2+class3+class4+class5+class6+class7+
xtot+e00200+e00300+e00600+e00900+e01000+p04470+e04800+
e09600+e07180+e07220+e07260+e06500+e10300+
e59720+e11900+e18425+e18450+e18500+e19700
PUFsplit <- split(PUF, PUF$state)
mod <- lapply(PUFsplit, function(z) lm(fm, data=z))
Beta <- sapply(mod, coef)
如果需要,您甚至可以将所有内容放在一行中:
Beta <- sapply(lapply(split(PUF, PUF$state), function(z) lm(fm, data=z)), coef)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.