从lm中提取公式,包括分类变量(R)

时间:2014-01-23 23:15:10

标签: r formula lm categorical-data

我有一个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:意外的数字常量”,甚至没有尝试像这样做一个月(不确定为什么示例和实际代码之间存在差异)。

我的公式非常大,所以它需要能够扩展(当前代码所做的)。

2 个答案:

答案 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 ='+'))