R에서 가중 최소 제곱 회귀를 수행하는 방법


선형 회귀 분석의 주요 가정 중 하나는 잔차가 예측 변수의 각 수준에서 등분산으로 분포된다는 것입니다. 이 가정을 등분산성(homoscedasticity) 이라고 합니다.

이 가정이 존중되지 않으면 잔차에 이분산성이 존재한다고 합니다. 이런 일이 발생하면 회귀 결과를 신뢰할 수 없게 됩니다.

이 문제를 해결하는 한 가지 방법은 가중치 최소 제곱 회귀를 사용하는 것입니다. 이는 오류 분산이 낮은 관측치 가 오류 분산이 큰 관측치에 비해 더 많은 정보를 포함하기 때문에 더 많은 가중치를 받도록 관측치에 가중치를 할당하는 것입니다.

이 튜토리얼에서는 R에서 가중치 최소 제곱 회귀를 수행하는 방법에 대한 단계별 예를 제공합니다.

1단계: 데이터 생성

다음 코드는 16명의 학생에 대한 학습 시간과 해당 시험 점수를 포함하는 데이터 프레임을 생성합니다.

 df <- data.frame(hours=c(1, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8),
                 score=c(48, 78, 72, 70, 66, 92, 93, 75, 75, 80, 95, 97, 90, 96, 99, 99))

2단계: 선형 회귀 수행

다음으로, lm() 함수를 사용하여 시간을 예측 변수로 사용하고 점수 를 응답 변수 로 사용하는 간단한 선형 회귀 모델을 피팅합니다.

 #fit simple linear regression model
model <- lm(score ~ hours, data = df)

#view summary of model
summary(model)

Call:
lm(formula = score ~ hours, data = df)

Residuals:
    Min 1Q Median 3Q Max 
-17,967 -5,970 -0.719 7,531 15,032 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 60,467 5,128 11,791 1.17e-08 ***
hours 5,500 1,127 4,879 0.000244 ***
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.224 on 14 degrees of freedom
Multiple R-squared: 0.6296, Adjusted R-squared: 0.6032 
F-statistic: 23.8 on 1 and 14 DF, p-value: 0.0002438

3단계: 이분산성 테스트

다음으로, 이분산성을 시각적으로 확인하기 위해 잔차와 적합치의 플롯을 만듭니다.

 #create residual vs. fitted plot
plot( fitted (model), resid (model), xlab=' Fitted Values ', ylab=' Residuals ')

#add a horizontal line at 0 
abline(0,0) 

그래프에서 잔차가 “원뿔” 모양을 갖고 있음을 알 수 있습니다. 잔차는 그래프 전체에 등분산으로 분포되어 있지 않습니다.

이분산성을 공식적으로 테스트하기 위해 Breusch-Pagan 테스트를 수행할 수 있습니다.

 #load lmtest package
library (lmtest)

#perform Breusch-Pagan test
bptest(model)

	studentized Breusch-Pagan test

data: model
BP = 3.9597, df = 1, p-value = 0.0466

Breusch-Pagan 테스트는 다음과 같은 귀무 가설과 대립 가설을 사용합니다.

  • 귀무 가설(H 0 ): 등분산성이 존재합니다(잔차가 등분산으로 분포됨).
  • 대립 가설( HA ): 이분산성이 존재합니다(잔차가 등분산으로 분포되지 않음).

검정의 p-값이 0.0466 이므로 귀무 가설을 기각하고 이분산성이 이 모델에서 문제라는 결론을 내릴 것입니다.

4단계: 가중 최소 제곱 회귀 수행

이분산성이 존재하므로 분산이 낮은 관측치가 더 많은 가중치를 받도록 가중치를 설정하여 가중치 최소 제곱을 수행합니다.

 #define weights to use
wt <- 1 / lm( abs (model$residuals) ~ model$fitted. values )$fitted. values ^2

#perform weighted least squares regression
wls_model <- lm(score ~ hours, data = df, weights=wt)

#view summary of model
summary(wls_model)

Call:
lm(formula = score ~ hours, data = df, weights = wt)

Weighted Residuals:
    Min 1Q Median 3Q Max 
-2.0167 -0.9263 -0.2589 0.9873 1.6977 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 63.9689 5.1587 12.400 6.13e-09 ***
hours 4.7091 0.8709 5.407 9.24e-05 ***
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.199 on 14 degrees of freedom
Multiple R-squared: 0.6762, Adjusted R-squared: 0.6531 
F-statistic: 29.24 on 1 and 14 DF, p-value: 9.236e-05

결과에서 시간 예측 변수에 대한 계수 추정치가 약간 변경되고 전체 모델 적합도가 향상되었음을 알 수 있습니다.

가중 최소 제곱 모델의 잔차 표준 오차는 원래 단순 선형 회귀 모델의 9.224 와 비교하여 1.199 입니다.

이는 단순선형회귀모델로 생성한 예측값에 비해 가중최소제곱모델로 생성한 예측값이 실제 관측값에 훨씬 더 가깝다는 것을 의미합니다.

가중 최소 제곱 모델은 원래 단순 선형 회귀 모델의 0.6296 과 비교하여 R-제곱이 0.6762 입니다.

이는 가중 최소 제곱 모델이 단순 선형 회귀 모델보다 시험 점수의 변동을 더 많이 설명할 수 있음을 나타냅니다.

이러한 측정은 가중 최소 제곱 모델이 단순 선형 회귀 모델에 비해 데이터에 더 잘 맞는다는 것을 나타냅니다.

추가 리소스

R에서 단순 선형 회귀를 수행하는 방법
R에서 다중 선형 회귀를 수행하는 방법
R에서 분위수 회귀를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다