본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[Rstudio] 회귀분석 (Regression Analysis)

by Vitaminymc 2023. 11. 14.
반응형

회귀분석 (Regression Analysis)

회귀분석은 변수 간의 관계를 모델링하고 예측하는 통계적 기법 중 하나이다. 데이터에 적합한 모델을 찾아내어 변수 간의 관계를 설명하고 예측하는 데 사용된다.

한 변수를 원인으로 하고 다른 변수를 결과로 하여, 원인변수와 결과변수 사이의 관계를 모델링(관계식을 구하고)하고,  그 모델(관계식)을 이용하여 원인변수 값이 주어졌을 때, 결과변수의 값을 예측하는 통계적 기법 중 하나이다.

 

원인의 역할을 하는 변수를 설명변수(explanatory variable) 또는 독립변수(independent variable)이라 하고, 결과를 관측하는 변수를 반응변수(reponse variable) 또는 종속변수(dependent variable)라 한다.

 

회귀분석에는 주로 선형 회귀분석과 비선형 회귀분석이라는 두 가지 주요 유형이 있다.

1. 선형 회귀분석(Linear Regression)

선형 회귀분석은 종속 변수와 독립 변수 간의 관계를 선형적으로 가정하고 모델링하는 방법이다.
선형 회귀모델은 일반적으로 다음과 같은 형태를 가진다.

하나의 종속변수와 하나의 독립변수 사이의 선형모형을 단순선형회귀모형 (simple liner regression model)이라고 하고, 하나의 종속변수와 둘 이상의 독립변수들 사이의 선형모형을 다중선형회귀모형 (multiple linear regression model)이라 한다.

선형회귀에서 lm() 함수를 사용하려면 데이터프레임을 생성하고, 그 안에 종속 변수 및 독립 변수들을 정의해야 한다. 

 

2. 비선형 회귀분석(Nonlinear Regression)

비선형 회귀분석은 종속 변수와 독립 변수 간의 관계를 선형이 아닌 형태로 모델링하는 방법이다.
비선형 회귀모델은 선형 회귀모델과는 다르게 비선형 함수를 사용한다.

예를 들어, 다음과 같은 형태가 있을 수 있다.

 

비선형회귀에서는 nls() 함수를 사용하여 모델을 설정하고, 시작값(start)을 정의해야 한다. 

비선형 관계를 가지는 데이터가 주어졌을 때, 어떤 비선형 모델을 선택할지, 그리고 초기값을 어떻게 설정할지에 대한 몇 가지 고려 사항이 있다.

  • 비선형 관계 확인:
    • 시각적 확인: 데이터를 시각화하여 비선형 패턴을 확인할 수 있다. 산점도를 그리거나 그래프를 통해 데이터의 형태를 확인한다..
    • 도메인 지식 활용: 해당 분야의 도메인 지식을 활용하여 어떤 종류의 비선형 모델이 적절한지 가정할 수 있다.
  • 초기값 설정:
    • 도메인 지식 활용: 초기값을 설정할 때 도메인 지식을 활용할 수 있다. 예를 들어, 지수 함수 모델의 경우 초기값을 해당 함수의 파라미터와 관련하여 설정할 수 있다.
    • 자동 초기값 추정: nls() 함수는 초기값을 설정하지 않으면 자동으로 초기값을 추정하려고 시도한다. 이 때, 일부 모델에서는 자동 추정이 어려울 수 있다.

 

 

 R을 활용한 회귀분석

예제 1 : R 기본 데이터셋 'airquality'

# airquality 데이터셋 로딩
data(airquality)

# 데이터셋의 처음 몇 개의 행 출력
head(airquality)
  Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6

 

'airquality' 데이터셋은 R의 기본 데이터셋 중 하나로, 미국 뉴욕시에서 수집된 대기질 데이터를 담고 있다.

이 데이터셋은 1973년 5월부터 1973년 9월까지의 기간 동안 매일 수집된 데이터를 포함하고 있다.

이 데이터셋은 다섯 개의 변수로 이루어져 있으며, 각 날짜에 대해 오존량, 태양 복사량, 바람 속도, 온도가 기록되어 있다.

  • Ozone: 오존량 (ppb)
  • Solar.R: 태양 복사량 (단위: Langleys)
  • Wind: 바람 속도 (mph)
  • Temp: 온도 (화씨)
  • Month, Day : 측정 날짜 (5월 1일부터 9월 30일까지)
# 선형 회귀분석 수행
model <- lm(Ozone ~ Temp, data = airquality)

# 회귀분석 결과 요약
summary(model)

lm 함수는 선형 모델을 만들기 위해 사용된다.

모델을 만들 때 종속 변수와 독립 변수를 지정하고, 데이터는 data 매개변수를 통해 지정한다.

마지막으로 summary 함수는 회귀분석 결과를 요약하여 출력한다.

> summary(model)

Call:
lm(formula = Ozone ~ Temp, data = airquality)

Residuals:
    Min      1Q  Median      3Q     Max 
-40.729 -17.409  -0.587  11.306 118.271 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -146.9955    18.2872  -8.038 9.37e-13 ***
Temp           2.4287     0.2331  10.418  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 23.71 on 114 degrees of freedom
  (결측으로 인하여 37개의 관측치가 삭제되었습니다.)
Multiple R-squared:  0.4877, Adjusted R-squared:  0.4832 
F-statistic: 108.5 on 1 and 114 DF,  p-value: < 2.2e-16

 

회귀분석 결과

 

Residuals (잔차):

Residuals는 실제 관측값과 모델로 예측된 값 간의 차이를 나타낸다.

이 값은 오차의 크기와 방향을 나타낸다.

최소값, 제 1사분위수(Q1), 중앙값, 제 3사분위수(Q3), 최대값이 제공됩니다.

 

Coefficients (회귀 계수):

Intercept는 β0를 나타내며 -146.9955이고 Temp는 β1을 나타내며 2.4287이다.
Estimate는 각 회귀 계수의 추정치를 나타내며, Std. Error는 추정치의 표준 오차를 나타낸다.
t value는 각 회귀 계수에 대한 t-통계량을 나타내며, Pr(>|t|)는 해당 계수가 0인지 아닌지를 검정하는 p-value를 나타낸다.


Residual standard error (잔차 표준 오차):

잔차의 표준편차를 나타낸다. 이 값이 작을수록 모델이 데이터에 더 잘 적합되었다고 볼 수 있다.

 

Multiple R-squared (다중 결정 계수) 및 Adjusted R-squared (조정된 다중 결정 계수):

다중 결정 계수는 종속 변수의 총 변동 중 모델에 의해 설명되는 비율을 나타낸다. 이 모델에서는 약 48.77%의 종속 변수 변동이 설명된다.
조정된 다중 결정 계수는 다중 결정 계수를 독립 변수의 수와 표본 크기에 따라 조정한 값이다.

 

F-statistic (F-통계량):

전체 모델이 유의한지를 나타내는 통계량이다. 이 값이 크면 모델이 통계적으로 유의미하다고 볼 수 있다.

 

p-value:

p-value는 해당 통계량이 특정 가설을 지지하는 정도를 나타낸다. 여기서는 Intercept와 Temp에 대한 p-value가 매우 작으므로 이들은 통계적으로 유의미함을 알 수 있다.

즉, 온도(Temp)가 오존량(Ozone)에 유의미한 영향을 미친다고 볼 수 있다.
이 결과를 종합하면, 온도(Temp)는 오존량(Ozone)을 예측하는 데 통계적으로 유의미한 영향을 미치며, 추정된 회귀계수의 모델이 데이터를 상당히 잘 설명한다고 볼 수 있다.

 

선형회귀식

Ozone=−146.9955+(2.4287×Temp)+ε

  • Ozone는 예측하려는 오존 농도
  • Temp는 주어진 온도입니다.
  • -146.9955는 모델의 절편(intercept)으로, 온도가 0일 때의 오존 농도를 의미한다.
  • 2.4287은 온도에 대한 회귀 계수로, 온도가 1단위 증가할 때 오존 농도가 증가하는 정도를 나타낸다.
  • ε은 오차 항으로, 모델로 설명되지 않는 다양한 다른 요인들을 나타낸다.
  • 예를 들어 온도가 80°F인 경우, 오존 농도를 다음과 같이 예측할 수 있다.
    Ozone = -146.9955 + (2.4287 × 80) 

 

선형회귀 모델의 정확도와 신뢰도 평가

# 새로운 그래픽 디바이스 열기 ( Error in plot.new() : figure margins too large 해결)
dev.new()

# 잔차 분석
par(mfrow = c(2, 2))  # 2x2 그래프 레이아웃
plot(model)

잔차 분석 그래프

# 잔차 도표 (Q-Q 플롯)
qqnorm(model$residuals)
qqline(model$residuals)

Q-Q 플롯을 생성하여 잔차의 정규성을 확인

# 결정 계수 출력
cat("Multiple R-squared:", summary(model)$r.squared, "\n")  #다중 결정 계수 출력
cat("Adjusted R-squared:", summary(model)$adj.r.squared, "\n") #조정된 다중 결정 계수를 출력
> cat("Multiple R-squared:", summary(model)$r.squared, "\n")
Multiple R-squared: 0.4877072 
> cat("Adjusted R-squared:", summary(model)$adj.r.squared, "\n")
Adjusted R-squared: 0.4832134 

Multiple R-squared (다중 결정 계수):

Multiple R-squared는 종속 변수의 총 변동 중 모델에 의해 설명되는 비율을 나타낸다. 이 모델에서는 약 48.77%의 종속 변수 변동이 설명된다. 즉, 사용한 독립 변수(Temp)를 통해 약 48.77%의 오존량(Ozone) 변동을 설명할 수 있다.

 

Adjusted R-squared (조정된 다중 결정 계수):

Adjusted R-squared는 Multiple R-squared를 독립 변수의 수와 표본 크기에 따라 조정한 지표이다. 이 값은 약 48.32%로, 다중 결정 계수보다 조정된 결정 계수가 약간 낮다. 여러 독립 변수가 있는 경우, 이 지표는 모델의 복잡성을 보정하여 모델을 더 잘 평가할 수 있게 한다.

# 평균 제곱 오차(MSE) 계산
mse <- mean(model$residuals^2)
cat("Mean Squared Error (MSE):", mse, "\n")
> cat("Mean Squared Error (MSE):", mse, "\n")
Mean Squared Error (MSE): 552.6715 

MSE 값은 모델의 예측이 실제 값과 얼마나 차이가 나는지를 나타낸다.
이 값이 작을수록 모델이 데이터를 더 잘 예측한다고 할 수 있다.
오차 제곱의 평균이 552.6715로 나타낸다.

이는 모델이 평균적으로 실제 값과 약 23.5 (552.6715의 제곱근) 단위 정도의 차이가 있다는 것을 의미한다.

 

300x250

 

예제 2 : 다중회귀분석 

#가상의 데이터 세트 100개 

# 독립 변수들 생성
x1 <- rnorm(n, mean = 5, sd = 2)
x2 <- rnorm(n, mean = 8, sd = 3)

# 종속 변수 생성
y <- 3 * x1 + 2 * x2 + rnorm(n, mean = 0, sd = 3)

# 데이터프레임 생성
multi_linear_data <- data.frame(X1 = x1, X2 = x2, Y = y)

multi_linear_data  
> head(multi_linear_data)
        X1       X2        Y
1 3.879049 5.868780 29.97114
2 4.539645 8.770651 35.09748
3 8.117417 7.259924 38.07666
4 5.141017 6.957372 30.96738
5 5.258575 5.145144 24.82300
6 8.430130 7.864917 39.59148
# 다중선형회귀분석 수행
model_multi_linear <- lm(Y ~ X1 + X2, data = multi_linear_data)

# 회귀분석 결과 요약
summary(model_multi_linear)
> summary(model_multi_linear)

Call:
lm(formula = Y ~ X1 + X2, data = multi_linear_data)

Residuals:
       Min      1Q    Median      3Q     Max 
-5.6190 -1.9822 -0.3733  1.8641  6.2395 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.21349    1.17669   1.031    0.305    
X1           2.80024    0.15730  17.801   <2e-16 ***
X2           2.02381    0.09899  20.444   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.854 on 97 degrees of freedom
Multiple R-squared:  0.8784, Adjusted R-squared:  0.8759 
F-statistic: 350.3 on 2 and 97 DF,  p-value: < 2.2e-16

 

회귀분석 결과

계수 (Coefficients):

Intercept (절편): 1.21349, X1의 계수: 2.80024, X2의 계수: 2.02381
회귀방정식은 Y = 1.21349 + 2.80024⋅X1 + 2.02381⋅X2

 

통계적 유의성 (Significance):

p-value: Intercept: 0.305, X1< 2e-16, X2 < 2e-16
X1과 X2의 p-value가 매우 작으므로 해당 계수는 통계적으로 유의미하다.

 

적합도 지표 (Goodness of Fit):

Multiple R-squared (다중 결정 계수): 0.8784
Adjusted R-squared (조정된 다중 결정 계수): 0.8759
종속 변수의 변동 중 약 87.84%가 모델에 의해 설명되고 있다.

 

오차 (Residuals):

Residual standard error (잔차 표준 오차): 2.854
Residuals: 최소값 -5.6190, 최대값 6.2395

 

 

728x90