R通过lapply命令从乘法回归中提取回归系数 [英] R extract regression coefficients from multiply regression via lapply command
问题描述
我有一个包含多个变量的大型数据集,其中一个是状态变量,每个状态的编码为1-50.我想对数据集的其余27个变量(总共有55个变量)进行28个变量的回归,并针对每个状态进行回归.
I have a large dataset with several variables, one of which is a state variable, coded 1-50 for each state. I'd like to run a regression of 28 variables on the remaining 27 variables of the dataset (there are 55 variables total), and specific for each state.
换句话说,对于state == 1的观测值,对covariate1,covariate2,...,covariate27进行变量1的回归.然后,我想对状态2-50的变量1重复此操作,并对变量2,变量3,...,变量28重复整个过程.
In other words, run a regression of variable1 on covariate1, covariate2, ..., covariate27 for observations where state==1. I'd then like to repeat this for variable1 for states 2-50, and the repeat the whole process for variable2, variable3,..., variable28.
我认为我已经编写了正确的R代码来执行此操作,但是接下来我想做的就是提取系数,理想情况下是将其提取到系数矩阵中.有人可以帮我吗?这是我到目前为止编写的代码:
I think I've written the correct R code to do this, but the next thing I'd like to do is extract the coefficients, ideally into a coefficient matrix. Could someone please help me with this? Here's the code I've written so far:
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
问题的另一个示例,可以使用@hadley的plyr
包来解决.在遇到问题时,您想
This is another example of the classic Split-Apply-Combine
problem, which can be addressed using the plyr
package by @hadley. In your problem, you want to
- 按状态分割数据帧
- 对每个子集应用回归
- 将系数合并到数据帧中.
我将使用MASS
库中可用的Cars93
数据集来说明它.我们有兴趣根据国家/地区的origin
找出horsepower
和enginesize
之间的关系.
I will illustrate it with the Cars93
dataset available in MASS
library. We are interested in figuring out the relationship between horsepower
and enginesize
based on origin
of country.
# 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
代替公式
EDIT. For your example, substitute PUF
for Cars93
, state
for Origin
and fm
for the formula
这篇关于R通过lapply命令从乘法回归中提取回归系数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!