#install.packages("lmtest")
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
#dwtest(model)


#par(mfrow = c(2, 2))
#plot(model, which = 1)

# 회귀모형을 적합한 후 plot(model) 명령어로 확인할 수 있는 잔차 플롯
# 4가지는 회귀모형의 가정이 잘 만족되는지 진단하는 중요한 도구입니다.
# 각 which = 1~4 플롯의 의미와 해석은 다음과 같습니다
# Residuals vs Fitted Plot (잔차 대 적합값 플롯)
# *** 목적: 선형성(linearity) 및 등분산성(homoscedasticity) 검정
# *이상적 모습: 잔차들이 0을 중심으로 무작위로 흩어짐
# U자형 / 곡선 → 비선형 관계 존재 가능성 --> U자형이면 선형성을 위배했다고 함

# 목적: 선형성(linearity) 및 등분산성(homoscedasticity) 검정
# 이상적 모습: 잔차들이 0을 중심으로 무작위로 흩어짐
# U자형 / 곡선 → 비선형 관계 존재 가능성
# 잔차의 퍼짐이 점점 커짐/작아짐 → 이분산성 존재 가능성
# 이분산성이란, 회귀분석에서 잔차의 분산이 일정하지 
# 않은 현상을 의미합니다.


# Durbin-Watson Test for Autocorrelation (자기상관 검정)
# p-value < 0.05 → 잔차 간에 자기상관 있음 → 독립성 가정 위반
# p-value = 0.00411 
# DW 통계량은 보통 2에 가까우면 이상적 (1보다 작으면 양의 자기상관 의심)


#plot(model, which = 2)

#  Normal Q-Q Plot (정규 Q-Q 플롯) 
# 이상적 모습: 점들이 대각선 위에 일직선
# 꼬리가 위나 아래로 휘어짐 → 잔차가 정규분포가 아닐 수 있음
# 극단값 존재 → 이상치 영향 의심


#plot(model, which = 3) 

# Scale-Location Plot (√|Standardized Residuals| vs Fitted)
# 목적: 등분산성(Homoscedasticity) 검정
# 이상적 모습: 점들이 고르게 흩어짐 (수평선 주변에 무작위 분포)
# 위쪽으로 퍼지거나 깔때기 모양 → 이분산성 존재

#plot(model, which = 4)
# Cook’s Distance Plot
# 목적: 영향력 있는 관측치 식별
# 이상적 모습: 모든 관측치가 낮은 쿡의 거리 값
# 특정 관측치가 다른 점들보다 월등히 높은 경우 → 해당 점이 모델에 큰 영향

# 문제 1
model_1 <- lm(eruptions ~ waiting, data = faithful) #독립변수 1개 단순선형 회귀
par(mfrow = c(2, 2))
plot(model_1, which = 1)
# 선형성 및 등분산성 검정
# 엎어진 U자형 곡선 -> 비선형 관계 존재 가능성

dwtest(model_1)
## 
##  Durbin-Watson test
## 
## data:  model_1
## DW = 2.561, p-value = 1
## alternative hypothesis: true autocorrelation is greater than 0
# Durbin-Watson Test for Autocorrelation (자기상관 검정)
# p-value > 0.05 
# p-value = 1 DW = 2.561
# DW 2.561로 이상적임

plot(model_1, which = 2) 
# 점들이 대각선 위에 일직선으로 있어 정규분포를 따른다

plot(model_1, which = 3) 
# 목적: 등분산성(Homoscedasticity) 검정
# 이상적 모습: 점들이 약간 고르게 흩어짐 

plot(model_1, which = 4) 

# 목적: 영향력 있는 관측치 식별
# 특정 관측치가 다른 점들보다 월등히 높은 경우 → 158, 197, 203 
# 영량력 있는 관측치가 식별됨

#par(mfrow = c(2, 2))
# plot(model_2, which = 1)

# 문제 2


model_2 <- lm(temperature ~ pressure, data = pressure) #독립변수 1개 단순선형 회귀
par(mfrow = c(2, 2))
plot(model_2, which = 1)

# 선형성 및 등분산성 검정
# 엎어진 U자형 곡선 -> 비선형 관계 존재 가능성

dwtest(model_2)
## 
##  Durbin-Watson test
## 
## data:  model_2
## DW = 0.13453, p-value = 5.205e-13
## alternative hypothesis: true autocorrelation is greater than 0
# p-value < 0.05 → 잔차 간에 자기상관 있음 → 독립성 가정 위반
# DW = 0.13453, p-value = 0.000000000000520
format(5.205e-13, scientific=FALSE)
## [1] "0.0000000000005205"
plot(model_2, which = 2) 
# 꼬리가 위 아래로 휘어지는 S자형으로 잔차가 정규분포가 아닐 수 있음


plot(model_2, which = 3)
# 목적: 등분산성(Homoscedasticity) 검정
# 점들이  한쪽에 몰려있음 등분산성 위배

plot(model_2, which = 4)

# 목적: 영향력 있는 관측치 식별
# 특정 관측치가 다른 점들보다 월등히 높은 경우 → 19
# 영량력 있는 관측치가 식별됨


#문제 3

model_3 <- lm(height  ~ weight, data = women) #독립변수 1개 단순선형 회귀
par(mfrow = c(2, 2))
plot(model_3, which = 1)

# 선형성 및 등분산성 검정
# 엎어진 U자형 곡선 -> 선형관계가 있지만 약간의 비선형 관계 존재 가능성

dwtest(model_3)
## 
##  Durbin-Watson test
## 
## data:  model_3
## DW = 0.31156, p-value = 9.623e-08
## alternative hypothesis: true autocorrelation is greater than 0
# p-value < 0.05 → 잔차 간에 자기상관 있음
# DW = 0.31156, p-value = 0.00000009623
format(9.623e-08, scientific=FALSE)
## [1] "0.00000009623"
plot(model_3, which = 2)
# 꼬리가 위 아래로 휘어지는 S자형으로 잔차가 정규분포가 아닐 수 있음


plot(model_3, which = 3)
# 목적: 등분산성(Homoscedasticity) 검정
# 등분산성을 위배 

plot(model_3, which = 4)

# 목적: 영향력 있는 관측치 식별
# 특정 관측치가 다른 점들보다 월등히 높은 경우 → 1, 14, 15
# 영량력 있는 관측치가 식별됨