R:从lm自动提取线性回归方程

时间:2015-08-02 10:01:06

标签: r regression linear lm

有没有人知道从lm对象中提取完整线性方程的现有函数?

假设我有:

lm1 = lm(y~x1+x2...xn, data=df)

对于我正在接受的回归过程,教授反复想要得到的回归方程式为:e(y)= b1 + b2x1 [...] bnx(n-1)。

目前,我正在做这样的事情:

(paste("y=", coef(lm1)[1], '+', coef(lm1[2]), '*x2', [...])

它已经持续了好几个星期。复制和粘贴上面的粘贴功能不是一个大问题,但是他想要那里的实际变量标签而不是y,x1等。正如你所看到的,我的手和心灵都在反复这样做。 / p>

我已经超越了我的痛苦门槛,今天开始考虑为此创建我自己的功能,但我只是检查是否有人知道现有的功能自动执行此操作。

我认为创建一个执行相同粘贴功能的函数并不是特别困难,除非在系数数量的可变长度上,但这只是我宁愿选择现有解决方案的事情。产品是一种无用的结构。

注意:这非常相似,但也不是这里提出的问题: Extract Formula From lm with Coefficients (R)

为什么会有所不同?这些问题解决了一个例子,“如何从lm对象中提取线性回归方程?”这个问题是,“是否有一个现有的基本方法或(如果没有)系统地从lm对象获得线性回归方程的方法。当你看到这里提出的答案时,这一点尤为明显。在另一页上接受的答案。

1 个答案:

答案 0 :(得分:1)

我对这个问题的天真解决方法也是使用paste0()自定义我自己的函数:

regEq <- function(lmObj, dig) {
    paste0("y = ",
        paste0(
            c(round(lmObj$coef[1], dig), round(sign(lmObj$coef[-1])*lmObj$coef[-1], dig)),
            c("", rep("*", length(lmObj$coef)-1)),
            paste0(c("", names(lmObj$coef)[-1]), c(ifelse(sign(lmObj$coef)[-1]==1," + "," - "), "")),
            collapse=""
        )
    )
}
由于迹象和拦截,它会变得有点凌乱。让我们看一个简单的电话:

> fit <- lm(-mpg ~ cyl + hp + drat, data=mtcars)
> fit

Call:
lm(formula = -mpg ~ cyl + hp + drat, data = mtcars)

Coefficients:
(Intercept)          cyl           hp         drat  
  -22.51406      1.36060      0.02878     -2.84090  

> regEq(fit,3)
[1] "y = -22.514 + 1.361*cyl + 0.029*hp - 2.841*drat"

编辑: WRT。评论:为了用变量名替换y并将交互操作符更改为*重写:

regEq <- function(lmObj, dig) {
    gsub(":", "*", 
        paste0(
            names(lmObj$model)[1]," = ",
            paste0(
                c(round(lmObj$coef[1], dig), round(sign(lmObj$coef[-1])*lmObj$coef[-1], dig)),
                c("", rep("*", length(lmObj$coef)-1)),
                paste0(c("", names(lmObj$coef)[-1]), c(ifelse(sign(lmObj$coef)[-1]==1," + "," - "), "")),
                collapse=""
            )
        )
    )
}

> regEq(lm(mpg ~ hp * drat, data=mtcars), 3)
[1] "mpg = 5.55 - 0.013*hp + 6.069*drat - 0.01*hp*drat"