2017-02-04 1 views
0

를 제공하기 위해, 우리는 빌드이 기능을 할 수 있었다 :건물의 기능은 내 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 $에 대한 첨자를 추가하는 방법이 있나요?

+1

이것은 스택 오버플로에 관한 R 프로그래밍 질문과 같습니다. –

답변

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) 
}