我有两个数据集“ 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")
答案 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
非常方便。