【发布时间】:2017-09-21 09:56:05
【问题描述】:
我正在尝试使用相同的数据制作不同的 lm 模型,但通过更改指数来显示更高阶的交互。我试图在 for 循环中进行此操作,而不是编写多行。但我收到“公式中的无效幂”错误。
for (m in 1:5){
assign(paste("lm.", m, sep = ""), lm(paste("Response ~ (Factor1+Factor2+Factor3+Factor4+Factor5)^", m, sep = "")))
}
问:这是什么原因造成的,我该如何解决?
其次,我想粘贴 lm 函数中的因子数(Factor1+Factor2+...),因为因子数会发生变化。
由于上述错误,我也无法查看这是否有效。
我试过了:
for (m in 1:n.factors){
# Make a string to paste in lm()
assign(paste("lm.paste.", m, sep = ""), paste("Response ~ (", paste(factors, collapse="+"), ")^", m, sep = ""))
# Paste in string to lm()
assign(paste("lm.", m, sep = ""), lm(lm.paste.1, data=data.df))
}
其中“因子”是包含我的因子字符串的向量(“因子 1”、“因子 2”...)。而n.factors是因子的个数。
问:这是正确的做法吗?感觉有点麻烦。
也许有一些方法可以使用
lm(Response ~ ., data = data.df)
然后子集 .?
这里是My Data Frame。
编辑:
dput(head(data.df, 20))
structure(list(Factor1 = c(-1, 1, -1, 1, -1, 1, -1, 1, -1, 1,
-1, 1, -1, 1, -1, 1, -1, 1, -1, 1), Factor2 = c(-1, -1, 1, 1,
-1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1), Factor3 = c(-1,
-1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1,
-1), Factor4 = c(-1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1,
1, 1, 1, 1, -1, -1, -1, -1), Factor5 = c(-1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1), Response = c(680.45,
722.48, 702.14, 666.93, 703.67, 642.14, 692.98, 669.26, 491.58,
475.52, 478.76, 568.23, 444.72, 410.37, 428.51, 491.47, 607.34,
620.8, 610.55, 638.04), Order = c(17, 30, 14, 8, 32, 20, 26,
24, 10, 16, 27, 18, 3, 19, 31, 15, 12, 1, 4, 23)), .Names = c("Factor1",
"Factor2", "Factor3", "Factor4", "Factor5", "Response", "Order"
), row.names = c(NA, 20L), class = "data.frame")
【问题讨论】:
-
避免使用assign,阅读
lapply,将输出保存在列表中。 -
有关在所有组合上运行 lm 的相关/可能重复的帖子:stackoverflow.com/questions/28606549/…
-
您可以查看many models section in R for Data Science 以安装多个模型
-
您应该考虑使用
poly()而不是^。