R에서 ols 회귀를 수행하는 방법(예제 포함)


OLS(Ordinary Least Square) 회귀는 하나 이상의 예측 변수와 반응 변수 간의 관계를 가장 잘 설명하는 선을 찾을 수 있는 방법입니다.

이 방법을 사용하면 다음 방정식을 찾을 수 있습니다.

ŷ = b0 + b1x

금:

  • ŷ : 예상된 반응값
  • b 0 : 회귀선의 원점
  • b 1 : 회귀선의 기울기

이 방정식은 예측변수와 반응변수 사이의 관계를 이해하는 데 도움이 될 수 있으며, 예측변수의 값이 주어졌을 때 반응변수의 값을 예측하는 데 사용될 수 있습니다.

다음 단계별 예제에서는 R에서 OLS 회귀를 수행하는 방법을 보여줍니다.

1단계: 데이터 생성

이 예에서는 학생 15명에 대해 다음 두 변수가 포함된 데이터세트를 만듭니다.

  • 총 학습 시간
  • 시험 결과

시간을 예측 변수로 사용하고 시험 점수를 응답 변수로 사용하여 OLS 회귀를 수행합니다.

다음 코드는 R에서 이 가짜 데이터 세트를 생성하는 방법을 보여줍니다.

 #create dataset
df <- data. frame (hours=c(1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14),
                 score=c(64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89))

#view first six rows of dataset
head(df)

  hours score
1 1 64
2 2 66
3 4 76
4 5 73
5 5 74
6 6 81

2단계: 데이터 시각화

OLS 회귀를 수행하기 전에 시간과 시험 점수 간의 관계를 시각화하는 산점도를 만들어 보겠습니다.

 library (ggplot2)

#create scatterplot
ggplot(df, aes(x=hours, y=score)) +
  geom_point(size= 2 )

선형 회귀 분석의 네 가지 가정 중 하나는 예측 변수와 반응 변수 사이에 선형 관계가 있다는 것입니다.

그래프를 보면 관계가 선형으로 나타나는 것을 볼 수 있습니다. 시간이 증가함에 따라 점수도 선형적으로 증가하는 경향이 있습니다.

그런 다음 상자 그림을 만들어 시험 결과 분포를 시각화하고 이상값을 확인할 수 있습니다.

참고 : R은 관측치가 세 번째 사분위수 위 사분위수 범위의 1.5배이거나 첫 번째 사분위수 아래 사분위수 범위의 1.5배인 경우 관측치를 이상값으로 정의합니다.

관측치가 이상치인 경우 상자 그림에 작은 원이 나타납니다.

 library (ggplot2)

#create scatterplot
ggplot(df, aes(y=score)) +
  geom_boxplot() 

상자 그림에는 작은 원이 없습니다. 이는 데이터세트에 이상값이 없음을 의미합니다.

3단계: OLS 회귀 수행

다음으로 R의 lm() 함수를 사용하여 시간을 예측 변수로 사용하고 점수를 응답 변수로 사용하여 OLS 회귀를 수행할 수 있습니다.

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

#view model summary
summary(model)

Call:
lm(formula = score ~ hours)

Residuals:
   Min 1Q Median 3Q Max 
-5,140 -3,219 -1,193 2,816 5,772 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 65,334 2,106 31,023 1.41e-13 ***
hours 1.982 0.248 7.995 2.25e-06 ***
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.641 on 13 degrees of freedom
Multiple R-squared: 0.831, Adjusted R-squared: 0.818 
F-statistic: 63.91 on 1 and 13 DF, p-value: 2.253e-06

모델 요약에서 적합 회귀 방정식은 다음과 같습니다.

점수 = 65.334 + 1.982*(시간)

이는 공부한 시간이 추가될 때마다 평균 시험 점수가 1,982 점 증가한다는 것을 의미합니다.

원래 값 65,334 는 0시간 동안 공부하는 학생의 평균 예상 시험 점수를 나타냅니다.

또한 이 방정식을 사용하여 학생이 공부하는 시간을 기준으로 예상 시험 점수를 찾을 수도 있습니다.

예를 들어, 10시간 동안 공부한 학생은 시험 점수 85.15 를 달성해야 합니다.

점수 = 65.334 + 1.982*(10) = 85.15

모델 요약의 나머지 부분을 해석하는 방법은 다음과 같습니다.

  • Pr(>|t|): 모델 계수와 연관된 p-값입니다. 시간 에 대한 p-값(2.25e-06)이 0.05보다 훨씬 작으므로 시간점수 사이에 통계적으로 유의미한 연관성이 있다고 말할 수 있습니다.
  • 다중 R-제곱: 이 숫자는 시험 점수의 변동 비율이 공부한 시간으로 설명될 수 있음을 나타냅니다. 일반적으로 회귀 모델의 R 제곱 값이 클수록 예측 변수가 응답 변수 값을 더 잘 예측합니다. 이 경우 점수 변동의 83.1%가 공부 시간으로 설명될 수 있습니다.
  • 잔여 표준 오차: 관찰된 값과 회귀선 사이의 평균 거리입니다. 이 값이 낮을수록 회귀선이 관찰된 데이터와 더 많이 일치할 수 있습니다. 이 경우 시험에서 관찰된 평균 점수는 회귀선에서 예측한 점수와 3,641 점만큼 벗어납니다.
  • F-통계량 및 p-값: F-통계량( 63.91 )과 해당 p-값( 2.253e-06 )은 회귀 모델의 전반적인 중요성, 즉 모델의 예측 변수가 변동을 설명하는 데 유용한지 여부를 알려줍니다. . 응답 변수에서. 이 예의 p-값은 0.05 미만이므로 모델이 통계적으로 유의미하며 시간은 점수 변화를 설명하는 데 유용한 것으로 간주됩니다.

4단계: 잔차 도표 생성

마지막으로, 등분산성정규성 에 대한 가정을 확인하기 위해 잔차 플롯을 만들어야 합니다.

등분산성 의 가정은 회귀 모델의 잔차가 예측 변수의 각 수준에서 거의 동일한 분산을 갖는다는 것입니다.

이 가정이 충족되는지 확인하기 위해 잔차 대 적합치 플롯을 만들 수 있습니다.

x축은 적합치를 표시하고 y축은 잔차를 표시합니다. 잔차가 0 값을 중심으로 그래프 전체에 무작위로 균일하게 분포되어 있는 것처럼 보이는 한 등분산성이 위반되지 않는다고 가정할 수 있습니다.

 #define residuals
res <- resid(model)

#produce residual vs. fitted plot
plot(fitted(model), res)

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

잔차는 0 주위에 무작위로 흩어져 있는 것처럼 보이고 눈에 띄는 패턴을 나타내지 않으므로 이 가정이 충족됩니다.

정규성 가정은 회귀 모델의 잔차가 대략적으로 정규 분포를 따른다는 것입니다.

이 가정이 충족되는지 확인하기 위해 QQ 플롯을 만들 수 있습니다. 플롯 포인트가 45도 각도를 이루는 대략적인 직선을 따라 놓여 있으면 데이터는 정규 분포를 따릅니다.

 #create QQ plot for residuals
qqnorm(res)

#add a straight diagonal line to the plot
qqline(res) 

잔차는 45도 선에서 약간 벗어나 있지만 심각한 우려를 불러일으킬 정도는 아닙니다. 정규성 가정이 충족된다고 가정할 수 있다.

잔차는 정규분포이고 등분산적이므로 OLS 회귀모형의 가정이 충족됨을 확인했습니다.

따라서 우리 모델의 출력은 신뢰할 수 있습니다.

참고 : 하나 이상의 가정이 충족되지 않으면 데이터 변환을 시도할 수 있습니다.

추가 리소스

다음 튜토리얼에서는 R에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

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

의견을 추가하다

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