본문 바로가기

데이터 분석/R

데이터 분석[R] - 10차시

본 글은 모두를 위한 R 데이터 분석 입문 책을 공부하면서 정리·요약한 내용입니다.

저자 : 오세종

출판 : 한빛아카데미 

 

본 글은 2021 ADsP 데이터 분석 준전문가 : 합격을 위한 완벽 요약집[개정판] 책을 공부하면서 정리·요약한 내용입니다.

저자 : 윤종식

출판사 : 데이터에듀

 

 

1. - X - 설명이 반대로 되어있다.

2. - 4 -

3. - 4 -

 

복습

더보기

1. 회귀분석

- 회귀분석(regression analysis) : 하나나 그 이상의 독립변수들이 종속변수에 미치는 영향을 추정하는 통계기법

- 독립변수가 하나이면 단순선형 회귀분석, 독립변수가 두 개 이상이면 다중선형 회귀분석으로 분석

- 영향을 주는 변수 : 독립변수(independent variable), 설명변수(explanatory variable)

- 영향을 받는 변수 : 종속변수(dependent variable), 반응변수(response variable)

- 결정계수가 1에 가까울수록 회귀모형이 자료를 잘 설명함

 

2. 회귀모델 구하기

- 회귀식 구하기 : lm(종속변수 ~ 독립변수, 데이터)

- 예측 : predict(선형모델, newdata =…)

- 결과 분석 : summary(모델명)

 

① 독립변수 :

② 종속변수 :

③ 회귀식 : 종속변수=β0 + β1 * 독립변수

④ 귀무가설 : β1=0(종속변수는 독립변수와 인과관계가 없음)

⑤ 대립가설 : β1≠0(종속변수는 독립변수와 인과관계가 있음)

⑥ 회귀계수 β1 의 p값은 ( )로서 0.05보다 작으므로(크므로) 회귀계수가 유의미함(무의미함)

⑦ 결정계수는 ( )로서 데이터 설명력은 ( )%임

 

head(cars)
plot(dist~speed, data=cars) # 산점도를 통해 선형 관계 확인

model <- lm(dist~speed, cars) # 회귀모델 구하기
model

abline(model) # 회귀선을 산점도 위에 표시
coef(model)[1] # 절편 출력
coef(model)[2] # 기울기 출력
pred <- predict(model, newdata = cars)
pred # 예상 제동거리
compare <- data.frame(pred, cars[,2], pred-cars[,2])
colnames(compare) <- c("예상", "실제", "오차")
head(compare)

 

결정계수(R^2)

더보기

SST(total sum of squares) : 전체제곱합
SSR(regression sum of squares) : 회귀제곱합 → 설명된 변동
SSE(error sum of squares) : 오차제곱합 → 설명안된 변동

R^2 -> 설명력과 동일하다고 할 수 있음
R^2 = 0 -> 0%의 설명력
R^2 = 0.5 -> 50%의 설명력
R^2 = 1 -> 100%의 설명력

 

선형회귀분석의 가정

더보기

회귀모형을 신뢰하기 위해서는 다음의 가정을 만족
- 선형성 : 설명변수(x)와 반응변수(y)가 선형적 관계에 있음
- 독립성 : 오차(잔차)와 설명변수(x)의 값이 관련되어 있지 않음
- 등분산성 : 설명변수(x) 값에 관계없이 잔차들의 분산이 일정한 형태를 보임 <-> 이분산성
- 비상관성 : 관측치들의 오차들끼리 상관이 없어야 함
- 정상성(정규성) : 오차의 분포가 정규분포를 이루어야 함

 

다중선형 회귀모델 만들기

더보기

MASS 패키지의 “Cars93”이라는 데이터셋의 가격(Price)을 종속변수로 선정하고 엔진 크기(EngineSize), RPM, 무게(Weight)를 이용해서 다중회귀분석을 실시
library(MASS)
head(Cars93)
attach(Cars93) # 지금부터 사용할 데이터셋은 무조건 Cars93이라는 의미($ 안써도 됨)
mo <- lm(Price~EngineSize+RPM+Weight)

summary(mo)

① 독립변수: EngineSize+RPM+Weight
② 종속변수 : Price
③ 회귀식 : Price=-51.8+4.31*EngineSize+0.01*RPM+0.01*Wight
④ F통계량은 37.98이며 유의확률 P값이 6.74e-16로 0.05보다 매우 작으므로 회귀 모형이 통계적으로 매우 유의함 (식 전체의 유의성) -> 다중선형 회귀
⑤ 회귀계수의 p값들이 0.05보다 작으므로 회귀계수의 추정치들이 통계적으로 유의함
⑥ 결정계수와 수정된 결정계수는 각각 0.5614, 0.5467로 조금 낮게 나타나서 설명력은 낮음
⑦ 결정계수가 낮아 데이터의 설명력은 낮지만 회귀식과 회귀계수들이 통계적으로 유의하여 자동차의 가격을 엔진의 크기와 RPM 그리고 무게로 추정할 수 있음

 

Prestige 데이터셋

더보기

행의 이름은 직군을 의미

education : 교육연수(독립변수)

income : 연봉(종속변수)

women : 여성의 비율(독립변수)

prestige : 직군에 대한 평판도(독립변수)

 

# 다중선형 회귀분석

install.packages("car")
library(car)
head(Prestige)

newdata <- Prestige[,c(1:4)] # 회귀식 작성을 위한 데이터 준비
plot(newdata, pch=16, col="blue", main="Matrix Scatterplot") # 산점도를 통해 변수 간 관계 확인
mod1 <- lm(income ~ education + prestige + women, data=newdata) # 회귀식 도출
summary(mod1)

 

# 예상 연봉, 실제 연봉, 오차 구하기
pred <- predict(mod1, Prestige[,c('education', 'prestige', 'women')])
pred
pred[order(pred, decreasing=T)]
compare <- data.frame(pred, Prestige[,2], pred-Prestige[,2])
colnames(compare) <- c('예상', "실제", "오차")
head(compare)

 

연습문제

더보기

(1) 다중선형 회귀모델을 이용하여 trees 데이터셋의 나무 둘레(Girth)와 나무의 키(Height)로 나무의 볼륨을 예측하시오.
head(trees)
newdata <- trees[,c(1:2)]
model <- lm(trees$Volume ~ Girth + Height, data=newdata)
summary(model)

pred <- predict(model, trees[,c('Girth', 'Height')])
pred

① 독립변수 : Girth + Height
② 종속변수 : Volume
③ 회귀식 : Volume = -58 + 4.7*Girth + 0.3*Height
④ F통계량은 255이며 유의확률 P값이 2.2e-16로 0.05보다 매우 작으므로 회귀 모형이 통계적으로 매우 유의함 (식 전체의 유의성)
⑤ 회귀계수의 p값들이 0.05보다 작으므로 회귀계수의 추정치들이 통계적으로 유의함
⑥ 결정계수와 수정된 결정계수는 각각 0.948, 0.9442로 높게 나타나서 설명력이 높음
⑦ 결정계수가 높아 데이터의 설명력이 높고 회귀식과 회귀계수들이 통계적으로 유의하여 Volume을 Girth와 Height로 추정가능


(2) (1)에서 예측한 볼륨과 실제 trees 데이터셋의 볼륨(Volume)이 얼마나 차이가 나는지 보이시오. (예측값, 실제값, 예측값-실제값을 나타낸다.)
compare <- data.frame(pred, trees[,3], pred-trees[,3])
colnames(compare) <- c('예상', '실제', '오차')
head(compare)

 

다중선형 회귀모델에서 변수의 선택

더보기


- 다중선형 회귀모델에서는 종속변수를 설명하는 데 도움이 되는 독립변수가 다수 존재하지만 모든 독립변수가 종속변수를 설명하는 데 동일하게 기여하는 것은 아님
- 어떤 변수는 기여도가 높고, 어떤 변수는 기여도가 낮은데 기여도가 낮거나 거의 없는 변수들은 모델에서 제외하는 것이 좋음(적은 변수를 가지고 현실을 잘 설명할 수 있는 것이 좋은 모델이기 때문)
- R에서는 모델에 기여하는 변수들을 선별할 수 있는 stepAIC() 함수를 제공

 

최적회귀방정식의 선택

더보기

1) 설명변수 선택 : 가능한 범위 내에서 적은 수의 설명변수 포함

2) 모형 선택 : 모든 가능한 조합의 회귀분석
- AIC(Akaike information criterion)나 BIC(Bayesian information criterion) 기준으로 가장 적합한 회귀모형을 선택
- AIC와 BIC가 가장 작은 값을 갖는 모형을 최적의 모형으로 선택

3) 단계적 변수 선택(Stepwise Variable Selection)
- 전진 선택법(forward selection)
- 후진 제거법(backward elimination)
- 단계별 방법(stepwise method)

x1 <- c(7,1,11,11,7,11,3,1,2,21,1,11,10)
x2 <- c(26,29,56,31,52,55,71,31,54,47,40,66,68)
x3 <- c(6,15,8,8,6,9,17,22,18,4,23,9,8)
x4 <- c(60,52,20,47,33,22,6,44,22,26,34,12,12)
y <- c(78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3,109.4)
df <- data.frame(x1,x2,x3,x4,y)
head(df)
# 전진 선택법
step(lm(y~1, data=df), scope=list(lower=~1, upper=~x1+x2+x3+x4), direction="forward")
# 후진 제거법
step(lm(y~x1+x2+x3+x4, data=df), direction="backward")
# 단계별 방법
step(lm(y~1, data=df), scope=list(lower=~1, upper=~x1+x2+x3+x4), direction="both")

 

stepAIC()함수를 이용한 최적회귀방정식의 선택

더보기

library(MASS) # stepAIC() 함수 제공
newdata2 <- Prestige[,c(1:5)] # 모델 구축에 사용할 데이터셋 생성
head(newdata2)
mod2 <- lm(income ~ ., data=newdata2) # income을 제외한 모든 변수를 독립변수로 선택
summary(mod2)
mod3 <- stepAIC(mod2) # 변수 선택 진행
mod3 # 변수 선택 후 결과 확인
summary(mod3) # 회귀모델 상세 내용 확인

 

연습문제

더보기

mlbench 패키지의 BostonHousing 데이터셋은 보스턴 지역의 지역 정보 및 평균 주택가격(medv) 정보가 저장되어 있다.
다른 변수들을 이용하여 medv를 예측하는 모델을 만드시오.(단 chas 변수는 모델을 만들 때 제외한다.)
library(mlbench)
data(BostonHousing)

(1) 전체 변수를 이용하여 평균 주택가격(medv)을 예측하는 회귀모델을 만드시오.
ds <- BostonHousing[,-4] # chas 제거
mod <- lm(medv ~ ., data=ds)
summary(mod)

(2) 평균 주택가격(medv)을 예측하는 데 도움이 되는 변수들만 사용하여 예측하는 회귀모델을 만드시오.
library(MASS)
mod2 <- stepAIC(mod)
summary(mod2)

20210708.R
0.01MB

 

 

반응형

'데이터 분석 > R' 카테고리의 다른 글

데이터 분석[R] - 12차시  (0) 2021.07.12
데이터 분석[R] - 11차시  (0) 2021.07.09
데이터 분석[R] - 9 차시  (0) 2021.07.07
데이터 분석[R] - 8차시  (0) 2021.07.06
데이터 분석[R] - 7차시  (0) 2021.07.05