2017-02-04 2 views
0

Так что с помощью моего ТОГО, мы смогли сделать построить эту функцию:функции здания, чтобы дать уравнение линейной регрессии

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 $?

+1

Это похоже на вопрос программирования R, который должен переходить на переполнение стека? –

ответ

0

Коэффициенты регрессии можно получить с помощью coef, без необходимости вникать в кишки вашего модельного объекта. Затем используйте vectorized 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) 
} 
Смежные вопросы