有没有人知道从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对象获得线性回归方程的方法。当你看到这里提出的答案时,这一点尤为明显。在另一页上接受的答案。
答案 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"