Patrick's 데이터 세상

회귀 분석 본문

Programming/R

회귀 분석

patrick610 2020. 6. 25. 00:21
반응형
SMALL

회귀 분석(Regression Analysis)

 

가. 단순회귀분석과 중회귀분석의 개념

   회귀분석이란 하나나 그 이상의 변수들이 또 다른 변수에 미치는 영향에 대해 추론할 수 있는 통계기법.
   영향을 받는 변수를 종속변수 혹은 반응변수라 하고 보통 y로 표기한다.
   영향을 주는 변수를 독립변수 혹은 설명변수라 하고 보통 x, x1, x2 등으로 표기한다.

   단순선형회귀모형은 회귀모형 중에서 가장 단순한 모형이다.
   단순선형회귀모형은 한 개의 독립변수와 하나의 종속변수로 이루어져 있고, 오차항이 있는 선형관계로 다음과 같이 쓸 수 있다.

   위의 모형에서 β0와 β1은 회귀계수라 하고, 특히 β1은 독립션수 x1의 회귀계수라 한다.
   ϵi는 오차항으로 보통의 경우 평균이 0이고 분산이 σ^2인 정규모형을 따른다고 가정한다.

   주어진 자료를 가장 잘 설명하는 회귀계수의 추정치는 보통 제곱오차
 

   를 최소로 하는 값을 구한다. 이와 같이 구해진 회귀계수의 추정량을 최고제곱추정량(Least Squares Estimator 혹은 LSE)라고 한다.

   단순선형회귀모형이 종속변수의 변동을 설명하는데 충분하지 않다면 두 개 이상의 독립변수를 사용하여 종속변수의 변화를 설명하는 다중회귀분석(중회귀분석)을 실시할 수 있다. 식은 다음과 같다,

 

   적합한 모형을 찾은 후에는 모형이 적절한지 확인을 해야 한다.
   체크해야 할 사항들은 다음과 같다.

  ■ 모형이 통계적으로 유의미한가?
      F통계량을 확인한다.
      유의수준 5% 하에서 F통계랑의 p-값이 0.05보다 작으면 추정된 회귀식은 통계적으로 유의하다고 볼 수 있다

  ■ 회귀계수들이 유의미한가?
      해당 계수의 t통계량과 p-값 또는 이들의 신뢰구간을 확인한다.

  ■ 모형이 얼마나 설명력을 갖는가?
      결정계수를 확인한다.
      결정계수는 0에서 1 값을 가지며, 높은 값을 가질수록 추정된 회귀식의 설명력이 높다.

  ■ 모형이 데이터를 잘 적합하고 있는가?
      잔차를 그래프로 그리고 회귀 진단을 한다.

  ■ 데이터가 아래의 모형 가정을 만족시키는가?

  ■ 가정
      - 선형성(독립변수의 변화에 따라 종속변수도 일정 크기로 변화)
      - 독립성(잔차와 독립변수의 값이 관련돼 있지 않음)
      - 등분산성(독립변수의 모든 값에 대해 오차들의 분산이 일정)
      - 비상관성(관측치들의 잔차들끼리 상관이 없어야 함)
      - 정상성(잔차항이 정규분포를 이뤄야 함)

 

나. 회귀분석의 종류

종류 모형
단순회귀

Y=β0+β1X+ϵ  

설명변수가 1개이며 반응변수와의 관계가 직선
다중회귀

Y=β0+β1X1+β2X2+⋯+βkXk  

설명변수가 k개이며 반응변수와의 관계가 선형
(1차 함수)
다항회귀 k=2이고 2차 함수인 경우

Y=β0+β1X1+β2X2+β11X12+β22X22+β12X1X2  

설명변수가 k개이며, 반응변수와의 관계가 1차 함수 이상(단 k=1이면 2차 함수 이상)
비선형회귀

Y=g(β0+β1X+⋯+βkXk)+ϵ  

회귀식의 모양이 미지의 모수 

 

 

   [예제] 쌍으로 묶인 관찰들 (x1,y1),(x2,y2),…,(xn,yn) 인 두 벡터 x와 y를 생성하고, x와 y 사이에 선형 관계가 있다고 가정하고 lm() 함수를 이용해 단순선형회귀분석을 해보자.

set.seed(2)
x=runif(10,0,11)
y=2 + 3*x +rnorm(10,0,0.2)
dfrm=data.frame(x,y)
dfrm

   #Result

 

lm(y~x, data=dfrm)

   #Result

dfrm에서 단순회귀분석을 했다. 이 경우 회귀방정식은 y=2.213+2.979로 추정된다.

※ set.seed 함수는 난수를 생성할 때 같은 난수가 나오도록 고정시키는 역할을 한다.
    이 함수는 정수 인자를 하나 받는다. 어떠한 양수라도 상관은 없으나 동일한 난수를 발생시키려면 같은 숫자를 사용한다.

 

   [예제] 여러 개의 독립변수(u, v, w)와 하나의 반응변수(y)를 생성하고, 이들 간에 선형관계가 있다고 생각하며, 데이터에 다중선형회귀를 실시해보자.

set.seed(2)
u=runif(10,0,11)
v=runif(10,1,30)
w=runif(10,1,30)
y=3 + 0.1*u + 2*v -3*w + rnorm(10,0,0.1)
dfrm=data.frame(y,u,v,w)
dfrm

   #Result

 

m<-lm(y~u+v+w)
m

   #Result

이 경우 회귀식은 y=2.9243 + 0.1232u + 1.9890v - 2.9978w로 추정된다.

 

summary(m)

   #Result


summary 함수를 통해 결정계수, F통계량, 잔차의 표준오차 등 주요통계량의 정보가 출력됐다.
여기서 F통계량=1.222e+05이며 p-값이 9.593e-15이다.

 

   [예제] 다음은 식이요법 방법을 적용한 닭에 대한 데이터다.

install.packages("MASS")
library(MASS)
head(ChickWeight)

   #Result

여기서 1번 닭에게 식이요법 방법 1을 적용한 데이터만 조회해 chick 변수에 할당한다.

Chick <- ChickWeight[ChickWeight$Diet==1,]
Chick

   #Result

...

 

chick 데이터세트에서 1번 닭만 조회한다.

Chick <- ChickWeight[ChickWeight$Chick==1,]
Chick

   #Result

 

시간의 경과에 따른 닭들의 몸무게를 단순회귀분석을 해본다.

lm(weight~Time, data=Chick)

#Result

 

여기서 회귀 식은 weight=7.988Time+24.465으로 추정된다.

summary(lm(weight~Time, data=Chick))

#Result

F통계량=232.7이며 p-값이 2.974e-08로 유의수준 5% 하에서 추정된 회귀 모형이 통계적으로 매우 유의함을 볼 수 있다.
결정계수 또한 0.9588로 매우 높은 값을 보이므로 이 회귀식이 데이터를 96% 정도로 설명하고 있음을 알 수 있다.

또한 회귀계수들의 p-값들도 0.05보다 매우 작으므로 회귀계수의 추정치들이 통계적으로 매우 유의하다.
Time에 대한 회귀계수가 7.99이므로 Time이 1 증가할 때 weight가 7.99 만큼 증가한다고 해석할 수 있다.

 

   [예제] cars 데이터를 이용해 다항회귀분석을 해보자.
           dist=β0+β1speed+β2speed^2  회귀모형을 적합하고 분석하시오.

data(cars)
head(cars)

#Result

 

cars 데이터세트는 dist와 speed 변수로 구성돼 있다.
dist가 speed의 변화에 따라 어떻게 변화하는지 알아보자.

speed2 <- cars$speed^2
cars <- cbind(speed2, cars)
head(cars)

#Result

 

또 하나의 설명변수인 speed^2를 생성해 원래 데이터인 cars에 cbind했다.

lm(dist~speed+speed2, data=cars)

#Result

 

다중회귀식은 dist=2.47014+0.91329speed+0.09996speed^2로 추정된다.

summary(lm(dist~speed+speed2, data=cars))

#Result

 

 

   [예제] 다음과 같은 데이터세트를 적절한 회귀모형에 적합한 회귀 모형을 찾으시오.

                                        예제 데이터

x y
1 5
2 3
3 2
4 3
5 4
6 6
7 10
8 12
9 18

 

x <- c(1,2,3,4,5,6,7,8,9)
y <- c(5,3,2,3,4,6,10,12,18)
df1 <- data.frame(x,y)
df1

#Result

 

plot(df1)

#Result

 

산점도를 봤을 때 2차식이 필요한 것처럼 보인다.
즉 모형은 y=b0+b1x+b2x^2+e인데 x^2를 X2로 놓고 생각해 다항회귀분석을 이용한다.

x2 <- x^2
x2

#Result

df2 <- cbind(x2, df1)
df2

#Result

 

df2라는 새로운 변수를 생성해 df2와 x2를 결합했다.
df1과 df2의 다항회귀분석을 해보자.

### df1

lm(y~x, data=df1)

#Result

summary(lm(y~x, data=df1))

#Result

 

df1에서의 F통계량=16.99이며 p-값이 0.004446으로 유의수준 5% 하에서 추정된 회귀모형이 통계적으로 유의함을 볼 수 있다.
결정계수는 0.7083으로 추정된 회귀식이 약 71%만큼 데이터를 설명함을 알 수 있다.

 

plot(lm(y~x, data=df1))

#Result

df1을 사용한 회귀식의 잔차도가 뚜렷한 곡선 패턴을 가지기 때문에 오차항은 평균이 0이고 분산이 일정하다는 가정을 만족하지 않는다.
x^2항을 모형에 추가해야 한다는 증거를 보여준다.

 

### df2

lm(y~x+x2, data=df2)

#Result

summary(lm(y~x+x2, data=df2))

#Result

df2에서의 F통계량=292.2이며 p-값이 0.0000105으로 유의수준 5%하에서 추정된 회귀 모형이 통계적으로 매우 유의하다.
수정된 결정계수는 0.9864로 추정된 회귀식이 약 98.6%만큼 데이터를 설명함을 알 수 있다.
이로써 x^2을 추가했을 때가 그렇지 않을 때보다 훨씬 회귀식의 추정이 잘됐음을 확인할 수 있다.

최종 회귀식은 Y=7.16667-291212X+0.45455X^2으로 추정된다.

plot(lm(y~x+x2, data=df2))

#Result

df1을 사용한 회귀식의 잔차도에 비해 다소 안정된 형태의 잔차를 보인다.

반응형
LIST

'Programming > R' 카테고리의 다른 글

정형 데이터 마이닝  (0) 2020.06.25
다변량 분석  (0) 2020.06.25
기초 통계 분석  (0) 2020.06.25
통계학 개론  (0) 2020.06.25
결측값 처리, 이상값 검색  (0) 2020.06.25
Comments