【发布时间】:2020-02-14 13:57:46
【问题描述】:
我有一个包含 8 个变量的数据集。我需要所有可能的双向交互项以及每个模型中的七个预测变量。因此,在我的例子中,总共有 7C2 = 21 个模型,每个模型一次包含 7 个预测变量和一个双向交互项。
我尝试使用 for 循环生成 21 个模型,但是当我尝试在 for 循环中使用 lm() 函数时,代码似乎失败了。在我的问题中,返回的是我数据第 5 列的响应变量。
colnames(dt) = c("assets","turnover_ratio","SD","sharpe_ratio","return",
"expense_ratio","fund_dummy","risk_dummy")
vars=colnames(dt)[-5]
for (i in vars) {
for (j in vars) {
if (i != j) {
factor= paste(i,j,sep='*')}
lm.fit <- lm(paste("return ~", factor), data=dt)
print(summary(lm.fit))
}}
代码的错误信息如下:
粘贴错误("return ~", factor) : 无法将类型“闭包”强制转换为“字符”类型的向量
这是我的数据集:
下面的输出应该是所需的输出,并且需要另外 20 个这样的模型以及其他可能的双向交互项。每个模型中都应存在所有 7 个预测变量。唯一应该改变的是双向交互项。
这是我所需的 21 个输出中的所需输出:
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。数据图片没有帮助,因为我们无法将它们复制/粘贴到 R 中。
-
试试
as.formula()并将它包裹在你的paste()函数中。 -
@Mat 再次弹出同样的错误
-
我认为双向交互是 "var1:var2" 而如果你做 "var1*var2" 你会得到双向交互 "var1 + var2 + var1:var2"
-
@MrFlick 我可以包含一个显示我想要的实际结果的输出
标签: r regression