KNOU STUDYREAD

한국방송통신대학교 통계데이터과학과 블로그

CS & Department of Statistics and Data Science

통계데이터과학과 및 컴퓨터과학 독서

04-1. 회귀와 예측

Harryㅤ 2025. 4. 7.

 

단순선형회귀 : 다른 두 변수의 사이의 관계에 대한 모델 제공. x가 증가(혹은 감소)할 때 y가 증가(혹은 감소)하는 등의 상관관계를 나타내는데 쓰임.

응답변수 독립변수 절편 회귀계수 적합값 잔차 최소제곱
예측하고자 하는 변수, 종속변수라고도 함 응답치를 예측하기 위해 사용하는 변수, 예측변수하고도 함 회귀직선 상의 절편, x=0일 때의 예측값 회귀직선의 기울기 히귀선에서 얻은 추정값. 예측값이라고도 함 관측값과 척합값의 차이 잔차의 제곱합을 최소화한 귀 회귀를 피팅하는 방법

 

# 기존 패키지 설정 및 불러오기
library(MASS)
library(dplyr)
library(tidyr)
library(ggplot2)
library(lubridate)
# install.packages("lubridate")
library(splines)
library(mgcv)


# 작업경로 설정
PSDS_PATH <- file.path(dirname(dirname(getwd())))

lung <- read.csv(file.path(PSDS_PATH, 'Desktop/data', 'LungDisease.csv'))
house <- read.csv(file.path(PSDS_PATH, 'Desktop/data', 'house_sales.csv'), sep='\t')

# 선형 시각화
# 예측변수 Exposure에 대한 함수인 응답변수 PEFR을 예측하기 위한 직선 출력
plot(lung$Exposure, lung$PEFR, xlab="Exposure", ylab="PEFR")
model <- lm(PEFR ~ Exposure, data=lung)

plot(lung$Exposure, lung$PEFR, xlab="Exposure", ylab="PEFR", ylim=c(300,450), type="n", xaxs="i")
abline(a=model$coefficients[1], b=model$coefficients[2], col="blue", lwd=2)
text(x=.3, y=model$coefficients[1], labels=expression("b"[0]),  adj=0, cex=1.5)
x <- c(7.5, 17.5)
y <- predict(model, newdata=data.frame(Exposure=x))
segments(x[1], y[2], x[2], y[2] , col="red", lwd=2, lty=2)
segments(x[1], y[1], x[1], y[2] , col="red", lwd=2, lty=2)
text(x[1], mean(y), labels=expression(Delta~Y), pos=2, cex=1.5)
text(mean(x), y[2], labels=expression(Delta~X), pos=1, cex=1.5)
text(mean(x), 400, labels=expression(b[1] == frac(Delta ~ Y, Delta ~ X)), cex=1.5)

# 적합값과 잔차 출력 in R, using fitted, resid func
fitted <- predict(model) # 적합값
resid <- residuals(model) # 잔차
lung1 <- lung %>%
  mutate(Fitted=fitted,
         positive = PEFR>Fitted) %>%
  group_by(Exposure, positive) %>%
  summarize(PEFR_max = max(PEFR),
            PEFR_min = min(PEFR),
            Fitted = first(Fitted),
            .groups='keep') %>%
  ungroup() %>%
  mutate(PEFR = ifelse(positive, PEFR_max, PEFR_min)) %>%
  arrange(Exposure)

# 적핪값과 잔차 시각화
plot(lung$Exposure, lung$PEFR, xlab="Exposure", ylab="PEFR")
abline(a=model$coefficients[1], b=model$coefficients[2], col="blue", lwd=2)
segments(lung1$Exposure, lung1$PEFR, lung1$Exposure, lung1$Fitted, col="orange", lty=3)

회귀직선 시각화
잔차와 적합값 시각화