许多个体因变量,一对一线性回归编码

时间:2019-05-31 19:29:32

标签: r linear-regression

我有两个数据集“ bear”和“ frog”,我正在尝试编写一个函数,该函数需要 在线性回归中使用相同的回归变量从“ bear”一栏一列地作为因变量 在所有情况下,请在每种情况下打印列的名称,并使用 系数,标准误差,t值,R平方和残差标准误差。我想获得25个单独的输出

我尝试了以下代码

  print(lm(bear[,i]~frog$MK_RF+frog$SMB+frog$HML))
  print(colnames(bear[,i])) 
  summary (lm(bear[,i]~frog$Mkt.RF+frog$SMB+frog$HML))}

我写了这个函数,但是我没有列名而是NULL,并且摘要仅显示系数,没有错误消息。 对于可复制的示例:

# dput(head(frog, 10))
frog <- structure(list(date = c(192607L, 192608L, 192609L, 192610L, 192611L, 
192612L, 192701L, 192702L, 192703L, 192704L), Mkt.RF = c(2.96, 
2.64, 0.36, -3.24, 2.53, 2.62, -0.06, 4.18, 0.13, 0.46), SMB = c(-2.3, 
-1.4, -1.32, 0.04, -0.2, -0.04, -0.56, -0.1, -1.6, 0.43), HML = c(-2.87, 
4.19, 0.01, 0.51, -0.35, -0.02, 4.83, 3.17, -2.67, 0.6), RF = c(0.22, 
0.25, 0.23, 0.32, 0.31, 0.28, 0.25, 0.26, 0.3, 0.25)), row.names = c(NA, 
10L), class = "data.frame")

和熊数据集

# dput(head(bear[, 1:3], 10)) 
bear <- structure(list(date = c(192607L, 192608L, 192609L, 192610L, 192611L, 
192612L, 192701L, 192702L, 192703L, 192704L), SMALL.LoBM = c(3.5582, 
-2.4574, -6.4413, -8.9441, 3.1644, 13.6658, 0.1974, 2.2284, 6.0998, 
5.5863), ME1.BM2 = c(-0.6319, -8.9775, -0.5289, -4.0732, 6.3376, 
-2.2572, -8.5499, -0.5649, -2.0464, 7.5611)), row.names = c(NA, 
10L), class = "data.frame")

2 个答案:

答案 0 :(得分:1)

我强烈建议您合并数据帧:依靠一致的行顺序是危险的。唯一的原因不是,如果您的数据集非常庞大,并且您负担不起额外的内存消耗。

bear_vars <- names(bear)[-1]
frog_vars <- names(frog)[-1]
bf <- merge(bear, frog, by = "date")

现在循环,使用reformulate()建立一个线性模型公式,其中frog_vars中的值作为预测变量(独立变量),bear_vars中的每个值作为响应变量(独立变量) :

for (b in bear_vars) {
    m <- lm(reformulate(frog_vars, response=b), data=bf)
    cat(b,"\n")
    print(m)
    print(summary(m))
}

如果需要,可以使用tidyverse方法,但这应该可以。

答案 1 :(得分:1)

发生此错误是因为您对一个变量使用了错误的名称(没有function item(allArrays, item) { } Run against this code describe('item', () => { it('returns true if the passed value is present in all the arrays inside the passed array', () => { const allArrays= [ [9, 2, 3], [4, 5, 9], [-2, 9, -1], [1, 2, 3, 4, 5, 9] ]; expect(item(allArrays, 9)).to.be.true; }); it('returns false if the passed value is not present in at least one array inside the passed array', () => { let allArrays= [[9, 2, 3], [4, 5, 9], [-2, 1, -1]]; expect(item(allArrays, 9)).to.be.false; allArrays= [[6, 2, 3], [4, 5, 8], [-2, 9, -1]]; expect(item(allArrays, 9)).to.be.false; allArrays= [[4, 2, 3], [4, 5, 9], [-2, 9, -1]]; expect(item(allArrays, 9)).to.be.false; }); )。正确的呼叫应该是

frog$MK_RF

lm(as.matrix(bear) ~ frog$Mkt.RF+frog$SMB+frog$HML)

这提供了完全相同的系数,标准误差,t值等,就好像您分别循环遍历mmod <- lm(as.matrix(bear) ~ Mkt.RF + SMB + HML, data=frog) summary(mmod) 中的列一样。但是,这样做有很多优点。

尝试,例如。

bear

非常方便。