lm ()의 결과를 방정식으로 변환하는 방법은 무엇입니까?


29

lm()값을 예측하는 데 사용할 수 있지만 경우에 따라 결과 수식의 방정식이 여전히 필요합니다. 예를 들어, 방정식을 도표에 추가하십시오.


2
질문을 다시 말하거나 세부 사항을 추가 할 수 있습니까? 저는 R에 대해 잘 알고 lm있으며 선형 모델은 더 일반적이지만, 정확히 무엇을 원하는지 명확하지 않습니다. 예를 들어 설명 할 것이 있습니까? 이것은 일부 주제에 대한 것입니까?
Glen_b-복지 주 모니카

2
선형 회귀 공식의 계수를 원한다고 생각합니다. 다음 coef()과 같이 장착 된 lm물체를 불러보십시오 .mod <- lm(y ~ x); coef(mod)
Jake Westfall

입력 lm(y~x)$call하면 수식이 y ~ x입니다. 당신이 그것과 다른 것을 의미한다면, 당신은 더 구체적이어야합니다.
Glen_b-복지 주 모니카


답변:


30

이 예제를 고려하십시오.

set.seed(5)            # this line will allow you to run these commands on your
                       # own computer & get *exactly* the same output
x = rnorm(50)
y = rnorm(50)

fit = lm(y~x)
summary(fit)
# Call:
# lm(formula = y ~ x)
# 
# Residuals:
#      Min       1Q   Median       3Q      Max 
# -2.04003 -0.43414 -0.04609  0.50807  2.48728 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)
# (Intercept) -0.00761    0.11554  -0.066    0.948
# x            0.09156    0.10901   0.840    0.405
# 
# Residual standard error: 0.8155 on 48 degrees of freedom
# Multiple R-squared: 0.01449,  Adjusted R-squared: -0.006046 
# F-statistic: 0.7055 on 1 and 48 DF,  p-value: 0.4051 

내가 추측하고있는 문제는 R의 요약 출력에서 ​​회귀 방정식을 계산하는 방법입니다. 대수적으로, 단순 회귀 모형에 대한 방정식은

와이^나는=β^0+β^1엑스나는+ε^나는어디에 ε(0, σ^2)
우리는 단지 매핑해야summary.lm()이러한 용어로 출력합니다. 재치 :

  • β^0Estimate(Intercept)-0.00761
  • β^1Estimatex0.09156
  • σ^Residual standard error0.8155


와이^나는=0.00761 + 0.09156엑스나는 + ε^나는어디에 ε(0, 0.81552)


2
lm와이^=0.00761+0.09156엑스

6

원하는 회귀 방정식을 사용하여 점수를 예측하려는 summary(fit)경우 회귀 분석이 fit예를 들어 이라는 변수에 저장된 경우 를 입력하고 방정식에 포함 된 각 계수의 추정치를보고 수동으로 방정식을 구성 할 수 있습니다 모델.

와이=β0+β1엑스+ϵβ0β1와이^=0.5+1.6엑스

그러나 이것은 어려운 길입니다. R에는 내장 함수가 있습니다.이 함수 predict()를 사용하면 모든 데이터 세트에 대한 모델이 지정된 예측값을 자동으로 계산할 수 있습니다. 예를 들어 predict(fit, newdata=data), y 점수를 예측하는 데 사용하려는 x 점수가 변수에 저장되는 경우 data. 회귀 분석이 수행 된 샘플의 예측 점수를 보려면 간단히 입력 fit$fitted하거나 fitted(fit)예측할 수 있습니다.


0

문서에 잘라 내기 / 붙여 넣기를하고 싶지만 전체 방정식을 정리하여 소란을 피하고 싶지 않은 경우 방정식을 표시하려면 다음을 수행하십시오.

R> library(MASS)
R> crime.lm <- lm(y~., UScrime)
R> cc <- crime.lm$coefficients
R> (eqn <- paste("Y =", paste(round(cc[1],2), paste(round(cc[-1],2), names(cc[-1]), sep=" * ", collapse=" + "), sep=" + "), "+ e"))
[1] "Y = -5984.29 + 8.78 * M + -3.8 * So + 18.83 * Ed + 19.28 * Po1 + -10.94 * Po2 + -0.66 * LF + 1.74 * M.F + -0.73 * Pop + 0.42 * NW + -5.83 * U1 + 16.78 * U2 + 0.96 * GDP + 7.07 * Ineq + -4855.27 * Prob + -3.48 * Time + e"

0

keithpjolley의 답변을 바탕으로 구분 기호에 사용 된 '+'부호가 계수의 실제 부호로 바뀝니다.

modelcrime <- lm(y~., UScrime)
modelcrime_coeff <- modelcrime$coefficients
modelcrime_coeff_sign <- sign(modelcrime_coeff)
modelcrime_coeff_prefix <- case_when(modelcrime_coeff_sign == -1 ~ " - ",
                                     modelcrime_coeff_sign == 1 ~ " + ",
                                     modelcrime_coeff_sign == 0 ~ " + ")
modelcrime_eqn <- paste("y =", paste(if_else(modelcrime_coeff[1]<0, "- ", ""),
                                         abs(round(modelcrime_coeff[1],3)),
                                     paste(modelcrime_coeff_prefix[-1],
                                           abs(round(modelcrime_coeff[-1],3)),
                                           " * ",
                                           names(modelcrime_coeff[-1]),
                                           sep = "", collapse = ""),
                                     sep = ""))
modelcrime_eqn

결과를 생성

[1] "y = - 5984.288 + 8.783 * M - 3.803 * So + 18.832 * Ed + 19.28 * Po1 - 10.942 * Po2 - 0.664 * LF + 1.741 * M.F - 0.733 * Pop + 0.42 * NW - 5.827 * U1 + 16.78 * U2 + 0.962 * GDP + 7.067 * Ineq - 4855.266 * Prob - 3.479 * Time"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.