본문 바로가기
Database & Bigdata/공공 빅데이터 청년 인턴십

[DAY 5] R로 배우는 통계 이해 - 회귀와 예측

by jionee 2020. 8. 28.
SMALL

[ 5.1 단순선형회귀 ]

상관분석 vs 단순 선형 회귀분석

상관분석 :  두 양적 자료의 선형관계 (또는 연관) 유무를 통계적 관점으로 다룰 수 있지만 두 자료의 선형 관계식 제시는 X

상관관계 : 두 변수 사이의 전체적인 관련 강도를 측정하는 것이라면, 회귀관계 자체를 정량화하는 방법이라는 점에서 차이가 있음

단순 선형 회귀분석 : 두 자료의 선형식과 설명식과 설명할 수 없는 오차항(확률변수)으로 만들어진 모형

ex) 키가 170일 때, 몸무게값 파악 가능

 

- 회귀모델

한 변수와 또 다른 변수의 크기에 어떤 관계를 정량화 하는 법

 

- 단순선형회귀 모델

  • 선형관계(즉, 직선)을 이용해서 변수 X로 부터 변수 Y를 예측
  • 한 변수와 또 다른 변수의 크기에 어떤 관계를 정량화 하는 방법
  • Y = b0+b1 X
    • b0 = 절편(상수)
    • b1 = 기울기
    • X = 독립변수 또는 예측 변수, 피처벡터
    • Y = 응답변수 또는 종속변수, 목표벡터

 

 

- R 함수 lm()로 선형회귀 모델 생성 예

plot(lung$Exposure,lung$PEFR,xlab="Exposure",ylab="PEFR")
// x축 데이터, y축 데이터, x축 이름, y축 이름

 

model <- lm(PEFR ~ Exposure,data=lung) // formular=종속변수(PEFR)~독립변수(Exposure)

절편 (b0) = 424.583

기울기 (b1) = -4.185

회귀모델 : PEFR = 424.583 + -4.185 * Exposure

 

 

 

- 회귀분석, 회귀선, 잔차연결선

head(cars)
attach(cars)
plot(dist~speed, data = cars) // plot 생성

 

m3 <- lm(dist~speed,cars)
abline(m3,col="red") // 직선 m3 생성

 

yhat <- predict(m3)

predict() 함수는 새로운 데이터를 input 시켜 새로운 데이터에 대한 예측된 값도 구할 수 있음

 

cbind (dist,yhat) // dist열과 yhat열 합침

 

join <- function(i)
lines(c(speed[i],speed[i]), c(dist[i],yhat[i]),col="green") 
// x는 speed[i]부터 spped[i]까지 y는 dist[i]부터 yhat[i]까지
sapply(1:50,join)//1부터 50까지 join 함수를 벡터 형태로 리턴

 

- 잔차

실제 값과 예측 값의 차이를 오차 또는 잔차라고 함

보통 모든 데이터가 정확히 한 직선 안에 들어오지 않음

 

오차항(ei)을 포함한 회귀식

 

예측 값 회귀식

 

오차항(ei)

잔차 = 실제값-예측값

 

 

- 잔차 예시 

model <- lm(PEFR~Exposure,data=lung)
plot(lung$Exposure,lung$PEFR,xlab="Exposure",ylab="PEFR",pch=20,col="red")
abline(model,col="blue")

 

yhat <- predict(model) // 예측값
head(yhat)
// 오른쪽에 실제 값을 붙여주기
cbind( Exposure, yhat ) 

 

join <- function(1)
  lines(c(Exposure[i],Exposure[i],c(PEFR[i],yhat[i])),col="green")
  // x는 Exposure[i]부터 Exposure[i]까지 y는 PEFR[i]부터 yhat[i]까지
sapply(1:122,join)

 

model <- lm(PEFR~Exposure,data=lung) // foumula = 종속변수 ~ 독립변수
model
fiited <- predict(model) // 예측값
resid <- residuals(model) // 잔차

예측

선형회귀 모델 생성 lm() 함수를 통해 모델을 만들고 나면

새로운 데이터에 대한 예측 값은 predict() 함수로 구할 수 있음

 

predict()

일반 함수로 여러 가지 방식으로 모델을 만들었을 때 해당 모델로부터 새로운 데이터에 대한 예측값을 구하는데 사용할 수 있음

 

residuals()

예측값과 실제값의 차이를 구할 수 있음

 

 

 

- 최소제곱회귀

제곱의 합이 최소가 되도록 값을 정하는 방법

잔체제곱합을 최소화하는 방법으로 회귀모델을 피팅하는 것

회귀선의 잔차들을 제곱한 값들의 합인 잔차제곱합을 최소화하는 선

 

잔차제곱합 (RSS)

 

 

[ 5.2 다중선형회귀 ]

- 예측변수가 여러 개인 선형 회귀

 

다중 선형회귀 모델

더이상 직선의 형태는 아니지만, 

각 계수와 그 변수들 사이의 관계는 여전히 선형이므로, 선형모형

 

  • b0 = 절편(상수)
  • b1 = 기울기
  • X = 독립변수 또는 예측 변수, 피처벡터
  • Y = 응답변수 또는 종속변수, 목표벡터
  • e = 오차

 

- 킹카운티 주택 정보 예제 

head(house[, c("AdjSalePrice", "SqFtTotLiving", "SqFtLot", "Bathrooms", 
               "Bedrooms", "BldgGrade")])

 

# 다중선형회귀모델 
house_lm <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + 
                 Bedrooms + BldgGrade,  
               data=house, na.action=na.omit) # na.action=na.omit 결측값 삭제
house_lm

\

 

- 모형 평가

  • 데이터 과학 관점에서 가장 중요한 성능 지표는 바로 제곱근 평균제곱오차(RMSE)

댓글