Menu

R의 선형회귀: lm(), summary(), predict()

lm()으로 회귀모형을 적합하고, summary()의 모든 블록 - 계수, 표준오차, p값, 결정계수, F 통계량 - 을 읽고, predict()로 예측해 보세요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

아이디어: 최소제곱 직선

선형회귀는 점들의 구름을 관통하는 직선을 적합합니다: y = 절편 + 기울기 × x. 가능한 모든 직선 중에서 lm()잔차 제곱합 을 최소화하는 직선을 고릅니다 - 잔차란 점과 직선 사이의 수직 간격이죠. 제곱은 큰 오차를 불균형하게 크게 반영하므로, 극단적인 이상치 하나가 적합 전체를 기울일 수 있습니다.

상관분석이 "이들이 얼마나 밀접하게 함께 움직이는가"에 대해 단위 없는 숫자 하나를 준다면, 회귀는 방정식 을 줍니다 - 단위가 있고, 해석 가능한 기울기가 있으며, 예측할 수 있는 장치가 있습니다.

수식은 "wt의 함수로 mpg를 모형화하라"로 읽습니다. 두 계수가 적합된 직선입니다: mpg ≈ 37.3 − 5.3 × 무게. 기울기에는 실제 단위가 있습니다 - 자동차가 1000파운드(wt는 1000파운드 단위입니다) 무거워질 때마다 갤런당 약 5.3마일의 비용이 듭니다. 절편(무게가 0일 때 37.3 mpg)은 직선이 0을 지나는 지점일 뿐입니다. 무게가 0인 자동차는 없으니 과하게 해석하지 마세요.

summary() 해설

summary(fit)은 모든 통계 수업이 해석하라고 요구하는 출력입니다. 실행한 뒤 블록별로 살펴봅시다:

Call - 적합한 모형을 그대로 되풀이해 줍니다. 지금은 사소해 보이지만 모형 객체 여섯 개를 저글링할 때는 생명줄입니다.

Residuals - 남은 값(실제 − 예측)의 다섯 숫자 요약입니다. 중앙값이 0 근처이고 Min/Max와 1Q/3Q가 대체로 대칭이길 바랍니다. 강한 비대칭은 직선 모형이 무언가를 놓치고 있다는 힌트입니다.

Coefficients - 출력의 핵심이며 항마다 한 행입니다:

  • Estimate - 적합된 값입니다. wt의 경우 −5.34: 1000파운드가 늘어날 때마다 약 5.3 mpg가 줄어드는 것과 연관된다 는 뜻이죠. 기울기는 언제나 단위가 붙은 문장으로 번역하세요. 그 문장이 모형의 실질적 내용 전부입니다.
  • Std. Error - 표본을 반복해서 뽑을 때 추정치가 얼마나 흔들릴지를 나타냅니다. 0에서 표준오차 두어 개 이내에 있는 추정치는 불안정합니다.
  • t value - Estimate ÷ Std. Error: 계수가 0에서 표준오차 몇 개만큼 떨어져 있는지입니다(여기서는 −9.56).
  • Pr(>|t|) - "이 계수가 정말 0일 수 있는가?"에 대한 p값입니다. wt의 경우 약 1.3e-10입니다: 무게가 mpg와 정말로 선형 관계가 없다면, 32개 표본에서 이렇게 가파른 기울기는 사실상 나타나지 않습니다. p값이 작다 = 연관성이 존재한다는 증거이지, 모형이 옳다 는 증명도 아니고 중요도의 척도도 아닙니다(아주 작지만 정밀하게 추정된 효과도 작은 p값을 받습니다).
  • Signif. codes / 별표 - p값 열을 시각적으로 축약한 것입니다. 편리하지만 정보를 더해 주지는 않습니다.

Residual standard error: 3.05 on 30 degrees of freedom - 반응변수 자체의 단위로 표현한 전형적인 예측 오차 크기입니다: 예측이 보통 약 3 mpg 어긋납니다. mpg의 척도(대략 10–34 범위)와 견주어 판단하세요.

Multiple R-squared: 0.75 - 무게가 mpg 분산의 약 75%를 설명합니다. Adjusted R-squared(0.74) 는 설명변수마다 벌점을 두고 다시 계산한 값입니다. 원래 버전은 무작위 잡음을 넣어도 변수를 추가하기만 하면 올라가기 때문이죠. 설명변수 개수가 다른 모형들을 비교할 때는 조정된 쪽이 정직합니다. 그리고 "좋은 모형 = 높은 R²"라는 반사적 반응은 자제하세요: 진정으로 유용한 효과가 낮은 R² 모형 안에 있을 수도 있고(잡음이 많은 결과, 여러 요인 중 하나), 높은 R²가 과적합이나 누출된 변수에서 나올 수도 있습니다.

F-statistic: 91.4 ... p-value: 1.29e-10 - 모형 전체에 대한 검정입니다: 이 모형이 "모두에게 그냥 평균을 예측하기"를 이기는가? 설명변수가 하나면 기울기의 t-검정을 그대로 되풀이합니다(9.56² ≈ 91.4에 주목하세요). 설명변수가 여럿이면 적어도 하나 의 계수가 0이 아니라는 결합 검정이 됩니다. 그 장치는 분산분석과 같은 분산 분해입니다.

다중회귀: 다른 변수를 고정한 채로

+로 설명변수를 추가합니다:

해석이 한 가지 결정적인 방식으로 달라집니다. 이제 각 Estimate는 다른 변수를 고정했을 때 해당 설명변수의 효과입니다: wt 계수(−5.3에서 내려온 약 −3.9)는 마력이 같은 자동차들끼리 비교했을 때 추가 무게가 치르는 mpg 비용입니다. 단순회귀의 −5.3은 무거운 차가 대체로 더 강력하기도 하다는 사실을 조용히 끌어안고 있었고, 다중회귀가 그것을 분리해 냅니다. 변수를 추가할 때 계수가 바뀌는 이유도 이것입니다 - 새 설명변수가 기존 변수와 상관되어 있으면 기존 변수의 역할이 달라지니까요. R-squared는 약 0.83까지 오르고, 여기서는 조정된 버전이 단일 설명변수 모형과의 공정한 비교 기준입니다.

예측: predict()

적합된 모형은 하나의 함수이고, predict()가 그것을 평가합니다. 열 이름이 설명변수와 정확히 일치하는 newdata 데이터 프레임을 만드세요:

두 구간 유형은 서로 다른 질문에 답하며, 이를 혼동하는 것이 전형적인 시험 실수입니다:

  • interval = "confidence" - 평균 에 대한 불확실성입니다: "무게가 2500파운드인 모든 자동차에 대해 평균 mpg는 어디쯤인가?" 좁으며 데이터가 늘어날수록 줄어듭니다.
  • interval = "prediction" - 그 무게의 새로운 개별 자동차 가 놓일 법한 범위입니다. 훨씬 넓은데, 개별 자동차는 직선 주위의 자기 산포를 지니고 있고 그 산포는 데이터를 아무리 모아도 평균으로 사라지지 않기 때문입니다.

새로운 개별 관측에 대한 질문에 신뢰구간을 보고하면 정밀도를 극적으로 과장하게 됩니다.

진단과 외삽의 함정

summary()는 모형이 무엇을 추정하는지 알려 주고, 잔차 그래프는 그것을 믿어도 되는지 알려 줍니다. 대화형 세션에서는 이렇게 합니다:

par(mfrow = c(2, 2))
plot(fit)   # four diagnostic plots

무엇을 볼까요: Residuals vs Fitted 는 형체 없는 구름이어야 합니다 - 곡선이 보이면 관계가 직선이 아니라는 뜻이고, 깔때기 모양(적합값이 커질수록 산포가 커짐)이면 분산이 일정하지 않아 표준오차가 어긋난다는 뜻입니다. Q-Q plot 의 점들은 직선에 붙어야 합니다 - 꼬리가 두꺼우면 이상치가 적합을 왜곡하고 있습니다. Scale-Location 은 다시 깔때기 점검입니다. Residuals vs Leverage 는 영향점을 표시합니다 - 혼자서 계수를 끌어당기는 관측이죠(mtcars에서는 Chrysler Imperial 같은 이색적인 차들이 여기 등장하곤 합니다). 적합 전에 원 데이터의 산점도를 간단히 그려 보면 이 대부분을 일찍 잡아냅니다.

마지막으로, 어떤 진단으로도 잡히지 않는 함정이 있습니다: 외삽 입니다. 모형은 대략 1500–5400파운드의 자동차에서 배웠습니다. predict()wt 값 8을 주면 기꺼이 음수 mpg를 반환할 것입니다 - 수학은 직선을 영원히 연장하지만 증거는 데이터의 가장자리에서 멈춥니다. 적합에 사용한 범위 안(또는 그 근처)에서만 예측하세요.

핵심 정리

  • fit <- lm(y ~ x, data = df)가 최소제곱 직선을 적합합니다. coef(fit)이 방정식이고 summary(fit)이 전체 보고서입니다.
  • Estimate는 단위가 붙은 문장으로 읽으세요. Pr(>|t|)는 "이것이 0일 수 있는가?"를 묻지 "이것이 중요한가?"를 묻지 않습니다.
  • Residual standard error는 실제 단위로 나타낸 전형적인 오차이고, adjusted R-squared는 공정한 모형 비교 지표입니다.
  • 다중회귀에서 모든 계수는 "다른 변수를 고정한 채"를 뜻하며, 상관된 설명변수가 들어오면 계수가 달라집니다.
  • predict(fit, newdata, interval = ...): 평균에는 "confidence", 새로운 개별 사례에는 넓은 쪽인 "prediction"을 쓰세요.
  • plot(fit)으로 곡선, 깔때기, 영향점을 확인하고, 데이터 범위 밖의 예측은 절대 믿지 마세요.

다음 주제: 결과가 숫자가 아니라 예/아니오일 때 - glm()으로 하는 로지스틱 회귀입니다.

자주 묻는 질문

R에서 선형회귀는 어떻게 수행하나요?

lm()과 수식을 사용합니다: fit <- lm(mpg ~ wt, data = mtcars)는 mpg를 무게에 대해 회귀시킵니다. 그다음 summary(fit)이 계수, p값, 결정계수, F 통계량을 출력합니다. 설명변수를 추가하려면 +를 쓰세요: lm(mpg ~ wt + hp, data = mtcars).

R에서 lm의 summary 출력은 어떻게 해석하나요?

Coefficients 블록에서 각 Estimate는 (다른 변수를 고정한 채) 해당 설명변수가 한 단위 증가할 때 반응변수의 기대 변화량이고, Pr(>|t|)는 그 계수가 0일 가능성을 검정합니다. Multiple R-squared는 설명된 분산의 비율입니다. 맨 아래의 F 통계량은 절편만 있는 모형과 비교해 모형 전체를 검정합니다.

Multiple R-squared와 Adjusted R-squared의 차이는 무엇인가요?

Multiple R-squared는 설명된 분산의 원래 비율이며, 쓸모없는 변수를 추가해도 올라가기만 합니다. Adjusted R-squared는 설명변수마다 벌점을 매기므로 새 변수가 제 몫을 할 때만 상승합니다. 모형을 비교할 때는 조정된 쪽을 사용하세요.

R에서 회귀모형으로 새 값을 어떻게 예측하나요?

열 이름이 설명변수와 일치하는 데이터 프레임을 만든 뒤 predict(fit, newdata = ...)를 호출합니다. 평균 반응에 대한 불확실성이 필요하면 interval = "confidence"를, 개별 관측이 놓일 (훨씬 넓은) 범위가 필요하면 interval = "prediction"을 추가하세요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기