我有一个lm对象,想要用系数提取公式。此对象包括月份等分类变量,以及与这些分类变量和数字变量的交互。
另一位用户帮助了一些除了分类变量之外的所有代码,但是当我添加一个分类变量(例如这里的d)时,它会分解并给出错误“解析时出错(text = x):: 1 :785:意外的数字常量“:
a = c(1, 2, 5, 13, 40, 29, 82, 22, 34, 54, 12, 31, 21, 29, 31, 42)
b = c(12, 15, 20, 12, 34, 56, 12, 12, 15, 20, 12, 34, 56, 12, 32, 41)
c = c(20, 30, 40, 18, 72, 34, 12, 40, 18, 72, 28, 65, 21, 32, 42, 52)
d = structure(c(8L, 1L, 9L, 7L, 6L, 2L, 12L, 11L, 10L, 3L, 5L, 4L,
8L, 1L, 9L, 7L), .Label = c("April", "August", "December",
"February", "January", "July", "June", "March", "May", "November",
"October", "September"), class = "factor")
model = lm(a~b+c+factor(d))
as.formula(
paste0("y ~ ", round(coefficients(model)[1],2), " + ",
paste(sprintf("%.2f * %s",
coefficients(model)[-1],
names(coefficients(model)[-1])),
collapse=" + ")
)
)
我从上面得到的是“解析时出错(text = x):: 1:53:意外符号 1:y~-7 + 14.23 * b + -6.82 * c + -529.30 * factor(d)8月
当我想要得到完整的公式时,每个月乘以一个系数(或者在这种情况下只有3个,在我的实际数据集中,我有更多的数据,所有月份都至少发生8个次)。但它停在这里,在这个例子中有“意外的符号”,在我的实际数据中有“解析时出错(text = x):: 1:785:意外的数字常量”,甚至没有尝试像这样做一个月(不确定为什么示例和实际代码之间存在差异)。
我的公式非常大,所以它需要能够扩展(当前代码所做的)。
答案 0 :(得分:0)
在您的模型中,您有5个解释变量,只有3个数据点。请参阅summary(model)
。
答案 1 :(得分:0)
您创建的内容不是formula
中的有效R
,因此请勿尝试将sprintf
的结果强制转换为公式。
因此像
sprintf(' y ~ %.2f + %s', coef(model)[1],
paste(sprintf('(%.2f) * %s',
coef(model)[-1], names(coef(model)[-1]) ), collapse ='+'))