0

我有一个 lm 对象,想用系数提取公式。这个对象包括像月份这样的分类变量,以及与这些分类变量和数字变量的交互。

另一位用户提供了一些适用于除分类变量之外的所有代码的代码,但是当我添加分类变量(例如此处的 d)时,它会崩溃并给出错误“解析中的错误(文本 = 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=" + ")
  )
)

我从上面得到的是“解析错误(文本 = x): :1:53: 意外符号 1: y ~ -7 + 14.23 * b + -6.82 * c + -529.30 * factor(d)August

当我想要得到完整的公式时,每个月都乘以一个系数(或者在这种情况下只有 3 个,在我的实际数据集中,我有更多的数据,所有月份至少发生 8 次)。但它在这里停滞不前,在这个例子中使用“意外符号”,在我的实际数据中使用“解析错误(文本 = x)::1:785: 意外数字常量”,甚至没有尝试像这里那样做一个月(不知道为什么示例和实际代码之间存在差异)。

我的公式很大,所以它需要能够按比例放大(当前代码可以)。

4

2 回答 2

0

在您的模型中,您有 5 个解释变量和只有 3 个数据点。见summary(model)

于 2014-01-23T23:40:56.843 回答
0

您正在创建的内容不是有效formula的 in R,因此不要尝试将结果强制sprintf转换为公式。

因此像

sprintf(' y ~ %.2f + %s', coef(model)[1], 
   paste(sprintf('(%.2f) * %s',
          coef(model)[-1], names(coef(model)[-1]) ), collapse ='+'))
于 2014-01-24T00:05:49.933 回答