所以在TA的帮助下,我们能够构建这个功能:
lm_eqn <- function(model){mod_frame <- broom::tidy(model)
eqn_string <- sprintf("The response is equal to %.2f ", mod_frame$estimate[1])
model_terms <- function(i){
if(i == 1){return(",")}
paste(sprintf("+ %.2f %s", mod_frame$estimate[i], mod_frame$term[i]), model_terms(i-1))
}
r2 <- format(summary(model)$r.squared, digits = 3)
print(paste(eqn_string, model_terms(nrow(mod_frame)), "R2 =", r2))
}
问题在于它以预测变量类别的逆序排列回归方程,并且与它们在任何模型中的列出顺序相反。
例如:
lmod <- lm(mpg ~ cyl + hp + disp, data = mtcars)
lm_eqn(lmod)
The response is equal to 34.18 + -0.02 disp + -0.01 hp + -1.23 cyl , R2 = 0.768"
此外,有没有办法为$ R ^ 2 $添加上标?
答案 0 :(得分:0)
您可以使用coef
获得回归系数,而无需深入了解模型对象的内容。然后使用向量化paste
从系数向量及其名称构建字符串。
lm_eqn <- function(model)
{
b <- coef(model)
names(b)[1] <- "" # default name for intercept term is '(Intercept)'
eqn <- paste(format(b, digits=3), names(b), collapse=" + ")
rsq <- format(summary(model)$r.squared, digits=3)
cat("The response is equal to", eqn, ", Rsquare =", rsq, "\n")
invisible(model)
}