R通过lapply命令从乘法回归中提取回归系数

2024-01-02

我有一个包含多个变量的大型数据集,其中一个是状态变量,每个状态编码为 1-50。我想对数据集的其余 27 个变量(总共 55 个变量)运行 28 个变量的回归,并且针对每个州。

换句话说,对 covariate1、covariate2、...、covariate27 运行变量 1 的回归,以获取状态 == 1 的观察结果。然后,我想对变量 1 的状态 2-50 重复此操作,并对变量 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由@hadley 提供的包。在你的问题中,你想要

  1. 按状态拆分数据框
  2. 对每个子集应用回归
  3. 将系数合并到数据框中。

我将用Cars93数据集可用于MASS图书馆。我们有兴趣弄清楚之间的关系horsepower and 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 for Cars93, state for Origin and fm对于公式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R通过lapply命令从乘法回归中提取回归系数 的相关文章

随机推荐