R 다중회귀분석 그래프 - r dajunghoegwibunseog geulaepeu

ggplot2 및 ggiraph를 사용한 interaction plot(2)

지난번에 이어 interaction plot을 ggplot2와 ggiraph 패키지를 사용하여 구현하였다. 오늘 소개할 함수는 다음과 같다.

  1. 다중회귀모형에서 interaction을 볼수 있는 ggEffect()함수
  2. One way ANOVA with 1 covariate(ANCOVA)에 쓸 수 있는 ggAncova()함수
  3. catepillar plot을 구현해주는 ggCatepillar()함수

1. 다중회귀분석모형에서 상호작용의 시각화 : ggEffect()함수

자동차의 연비에 관한 mtcars데이타에서 연비(mpg)를 반응(종속)변수로, 공차중량(wt)과 마력(hp)를 영향(독립)변수로 하여 다중회귀모형을 만들어 보자. 이때 반응변수의 상호작용을 보기 위해 hp/wt를 입력한다. 참고로 A/B는 완전교차(complete crossing)를 의미하며 AB= A+B+A:B(상호작용)이다. AB*C는 A+B+C+A:B+A:C+B:C+A:B:C 를 의미한다.

fit=lm(mpg~hp*wt,data=mtcars)
summary(fit)

Call:
lm(formula = mpg ~ hp * wt, data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0632 -1.6491 -0.7362  1.4211  4.5513 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 49.80842    3.60516  13.816 5.01e-14 ***
hp          -0.12010    0.02470  -4.863 4.04e-05 ***
wt          -8.21662    1.26971  -6.471 5.20e-07 ***
hp:wt        0.02785    0.00742   3.753 0.000811 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.153 on 28 degrees of freedom
Multiple R-squared:  0.8848,    Adjusted R-squared:  0.8724 
F-statistic: 71.66 on 3 and 28 DF,  p-value: 2.981e-13

회귀모형을 살펴보면 hp도 의미가 있고 wt도 의미가 있으며 hp:wt의 상호작용도 의미가 있다. 이와 같은 상호 작용을 시각화 하기 위해 ggEffect()함수를 만들었다. 사용방법은 다음과 같다.

source("ggAncova.R")
ggEffect(fit,interactive=TRUE)

ggEffect()함수의 원형은 다음과 같다.

ggEffect=function(fit,
                  x=1,
                  probs=c(0.10,0.5,0.90),
                  point=TRUE,
                  xvalue=NULL,
                  se=FALSE,
                  use.rownames=FALSE,
                  interactive=FALSE){
   ...                  
}

인수중 probs의 기본 값은 probs=c(0.10,0.5,0.90)이며 이는 영향변수 x축 변수가 아닌 변수(여기서는 hp)의 10,50,90퍼센타일에 대한 회귀선을 그려준다. 만일 5,25,50,75,95퍼센타일의 5개의 회귀선을 그리고자 한다면 다음과 같이 하면 된다.

ggEffect(fit,probs=c(0.05,0.25,0.5,0.75,0.95),interactive=TRUE)

두번째 영향변수를 x축변수로 그림을 그리려면 x=2로 주면 되고 점의 tooltip을 데이타의 rownames로 바꾸려면 use.rownames인수를 TRUE로 변경하면 된다.

ggEffect(fit,x=2,use.rownames=TRUE,interactive=TRUE)

저자가 만든 moonBook 패키지에 있는 radial데이타에서 동맥경화 정도(NTAV) 에 미치는 나이와 흡연과의 상호작용을 시각화해보면 다음과 같다.

require(moonBook)
fit2=lm(NTAV~age*smoking,data=radial)
ggEffect(fit2,interactive=TRUE)

2. ANCOVA 모형의 시각화

ANCOVA는 하나의 반응변수와 하나의 covariate가 있는 모형이다. mtcars 데이타에서 cyl는 엔진의 개수로 4기통, 6기통, 8기통으로 입력되어 있다. 이 데이타에서 연비(mpg)를 반응변수로 하고 공차중량(wt)를 공변량으로 하고 엔진수를 범주형 변수로 하여 ANCOVA를 시행해보면 다음과 같다.

fit=lm(mpg~wt+factor(cyl),data=mtcars)
summary(fit)

Call:
lm(formula = mpg ~ wt + factor(cyl), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5890 -1.2357 -0.5159  1.3845  5.7915 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   33.9908     1.8878  18.006  < 2e-16 ***
wt            -3.2056     0.7539  -4.252 0.000213 ***
factor(cyl)6  -4.2556     1.3861  -3.070 0.004718 ** 
factor(cyl)8  -6.0709     1.6523  -3.674 0.000999 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.557 on 28 degrees of freedom
Multiple R-squared:  0.8374,    Adjusted R-squared:   0.82 
F-statistic: 48.08 on 3 and 28 DF,  p-value: 3.594e-11

위의 분석 결과에서 엔진수가 4인 경우, 6인 경우, 8인 경우 mpg와 wt사이의 회귀직선의 intercept가 각기 다르다. 이러한 ANCOVA 모형을 다음과 같이 시각화할 수 있다.

ggAncova(mtcars,"mpg","wt","cyl",interactive=TRUE)

저자가 만든 moonBook패키지의 radial데이타는 동맥경화정도(NTAV)를 나이와 흡연유무에 따라 분석해보면 다음과 같다.

ggAncova(radial,"NTAV","age","smoking",interactive=TRUE)

3. ggCatepillarPlot()

다음은 자료를 두 개의 범주형 변수로 나누어 평균과 표준편차/표준에러를 구하고 그 자료를 이용하여 그래프를 그려주는 ggCatepillarPlot()을 소개한다.

예를 들어 moonBook패키지의 acs데이타 중 환자의 나이를 성별과 진단명으로 각각 평균과 표준편차를 구하면 다음과 같이 할 수 있다.

require(plyr)
ddply(acs,.(sex,Dx),summarize,mean=mean(age,na.rm=T),sd=sd(age,na.rm=T))
     sex              Dx     mean       sd
1 Female          NSTEMI 70.88000 11.35268
2 Female           STEMI 69.10714 10.36214
3 Female Unstable Angina 67.71895 10.67366
4   Male          NSTEMI 61.14563 11.56941
5   Male           STEMI 59.42727 11.72396
6   Male Unstable Angina 61.44130 10.56934

이 결과를 이용하여 다음과 같은 그림을 그릴수 있다.

ggCatepillarPlot(acs,"age","sex","Dx",interactive=TRUE)

또 다른 예로 mtcars 데이타로 자동/수동변속기 및 엔진수에 따라 그래프를 그려보면 다음과 같다.

mtcars$transmission=ifelse(mtcars$am,"manual","automatic")
ggCatepillarPlot(mtcars,"mpg","transmission","cyl",interactive=TRUE)

이 글에 사용된 ggAncova.R 파일은 웹R을 통하여 공개할 예정이다.

안녕하세요~ 오늘은 14. 회귀분석의 개념에 이어서 실제로 R을 통해 간단한 실습을 해볼 건데요~ 바로 시작하겠습니다.

cars란 데이터를 이용할건데요~ 데이터 로딩부터 먼저 시작해야겠죠. 로딩을 한 후엔 일단 데이터를 살펴보는 게 좋습니다.

data(cars)
str(cars)
'data.frame':   50 obs. of  2 variables:
 $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : num  2 10 4 22 16 10 18 26 34 17 ...

# 속도와 거리가 데이터에 numeric형태로 있으며 50개의 관측치가 있네요.

# 그럼 그래프를 한번 그려볼까요? 그리는 이유는 뭘까요.

plot(cars$speed, cars$dist)

# x축이 속도 y축이 거리로 설정한 겁니다.

# 대체적으로 speed와 dist가 선형관계를 이루고 있다는 것을 볼 수 있습니다.

# 얼마나 상관관계를 가지고 있는지 볼까요?

cor.test(cars$speed, cars$dist)

        Pearson's product-moment correlation

data:  cars$speed and cars$dist
t = 9.464, df = 48, p-value = 1.49e-12
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.6816422 0.8862036
sample estimates:
      cor 
0.8068949

#cor.test()를 이용하여 테스트를 해본 결과, 피어슨방식으로 상관관계 테스트가 실행되었군요.

 보니까 Ha : 상관관계가 0이 아니다로서, 유의수준5%하에서 p값이 매우 유의하죠. 따라서 귀무가설을 기각합니다.

 즉, 0.8069의 높은 상관관계를 가지고 있다는 것도 알 수 있죠~

#그럼 두 변수 간의 상관관계가 매우 높고, 선형관계를 띄고 있으니까 회귀분석을 해볼만 하겠죠? X가 한 개니까

  단순회귀분석입니다. 

a <- lm(cars$dist ~ cars$speed)

summary(a)

# a라는 변수에 회귀분석을 집어넣습니다. lm()함수는 회귀분석을 시행해주는 함수입니다. 간~편하죠

 lm(종속변수~독립변수+독립변수2 등) 이런식으로 사용하면 되는데요, 종속변수는 뭐로 해야할까요? 당연히 dist!

 속도에 따라 거리가 변화할 테니까요. 저렇게 a라는 변수에 넣는 이유는 회귀분석을 하고 나서 결과를 보기위해 summary()함수를

 무조건~이용하게 되기 때문입니다. 저렇게 한 후 summary(a)를 하면 결과가 자세하게 도출됩니다.

Call:
lm(formula = cars$dist ~ cars$speed)

Residuals:
    Min      1Q  Median      3Q     Max 
-29.069  -9.525  -2.272   9.215  43.201

Coefficients:
               Estimate   Std. Error t value Pr(>|t|)    
(Intercept) -17.5791     6.7584  -2.601   0.0123 *  
cars$speed    3.9324     0.4155   9.464 1.49e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-squared:  0.6511,    Adjusted R-squared:  0.6438 
F-statistic: 89.57 on 1 and 48 DF,  p-value: 1.49e-12

# 자~ 결과를 해석해볼까요. Coefficients : 에 나오는 것이 계수들의 결과값입니다.

  Intercept는 절편값. Std.Error는 표준오차, T value는 T값입니다.

 즉 회귀식은 y=-17.6+3.9speed+E가 되겠죠! ***는 유의수준 0 하에서도 유의하다는 겁니다.

 즉 매~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~우 유의하다는 거죠. 전혀~ 귀무가설을 채택할 여지가 없다는 겁니다.

 여기서 귀무가설은 뭘까요 ? 당연히 speed는 dist에 영향을 주지 않는다. 즉 베타1=0이다가 될 것이고,

 대립가설은 베타1은 0이 아니다 혹은 0보다 클 것이다 라고 되겠죠. 하지만 0이 아니다면 양측검정이 되겠고, 0보다 클 것이다면

 단측 검정이 되겠죠. 하지만 뭐가 됐던간에 유의합니다. 따라서 절편이 -17.6 즉 속도가 없었을 때 거리는 -니까 0이라고 해석

 하시면 될 것 같고, 스피드가 1단위 증가할 때 마다 거리는 3.93이 증가한다는 의미입니다. p값은 1.49e-12는 1.49*(10의 -12승)

여기서 TIP을 드리자면 t값이 없다고 생각하면, t값을 어떻게 구할까요? 바로 Estimate /  Std. Error입니다. 나눠보시면 t값이

나오죠!

plot(a)

R 다중회귀분석 그래프 - r dajunghoegwibunseog geulaepeu

# 이 함수를 실행하는 순간 ~ OMG 클릭할 때마다 잔차에 대해 그래프가 나와 총 4가지의 그래프를 볼 수 있습니다.

# 1. Residual vs Fitted는 적합화된 모델에서 산출된 수치와 잔차를 분석한 것으로, 잔차가 0 값을 중심으로 고르게 분포하고

  있어야 적합한 모델입니다. 그래프 위에 숫자로 표시된 23, 35, 49는 이상치라고 볼 수 있겠죠! 그 이상치의 관측된 50개 중에

  순번을 의미합니다. 특별한 Trend가 없고, 아래로 약간 치우치며 고른 형태를 보이고 있군요.

# 2. Normal Q-Q는 잔차가 표준편차를 따라서 잘 분포하는지 보여줍니다. 이상치 3개 빼고는 대부분 잘~ 분포하고 있죠.

# 3. Scale-Location은 잔차를 표준화하여 제곱근을 적용한 것으로 고르게 분포하여 특별한 Trend가 있으면 안 됩니다.

  대체로 그 뭐라고 하더라 ㅠㅠ(아 !) 데칼코마니 처럼 비슷하~게 분포하고 있으면 됩니다. 대체로 그러하죠?

# 4. Residual vs Leverage는 각 Redisual의 영향을 보여줍니다. 점으로 된 곡선은 Cook's Distance를 나타내는데,

  각 점의 영향력을 평가하는 곡선입니다. Residual가 0을 벗어나 Cooks distance가 1인 점선의 곡선을 넘어가면 outlier로서

  해당 observation은 당해 linear regression에 영향을 미치는 정도가 크다는 것이다. (안 좋은 거죠)

  위의 표는 cook's distance 0.5 선의 아래에 모두 위치하고 있으므로 적합하다고 볼 수 있습니다.

------참고로 제가 이상치를 제거하고 다시 회귀분석을 실시해봤습니다. 이부분은 자세한설명 없이 참고로 사용할게요.

Call:
lm(formula = aaa3$dist ~ aaa3$speed)

Residuals:
    Min      1Q  Median      3Q     Max 
-29.465  -9.122  -1.090   8.066  42.285

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -19.784      6.231  -3.175   0.0027 ** 
aaa3$speed     4.062      0.385  10.551 9.44e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 14.1 on 45 degrees of freedom
Multiple R-squared:  0.7121,    Adjusted R-squared:  0.7057 
F-statistic: 111.3 on 1 and 45 DF,  p-value: 9.445e-14

# 이렇게 본 결과,  훨씬 더 유의해짐을 알 수 있죠. 설명력도 올라가구요~ ^^

##########

#앞서 본 것은 단순회귀를 보았죠~ 이번엔 다중회귀분석을 해보겠습니다. 간단하게 중회귀모형이라고 하기도 합니다.

당연히 X가 여러개 있는 모형이겠죠!

다중회귀분석을 하기위해서, 이전에도 자주 이용했던 iris 데이터를 가지고 실시해보겠습니다.

data(iris)

head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4               0.2      setosa
2          4.9         3.0          1.4             0.2      setosa
3          4.7         3.2          1.3             0.2      setosa
4          4.6         3.1          1.5             0.2      setosa
5          5.0         3.6          1.4             0.2     setosa
6          5.4         3.9          1.7             0.4      setosa

#요렇게 되어있군요. 그럼 Species를 제외하고 그래프를 그려볼까요.

plot(iris[ , 1:4])

# 요렇게 보니까 어느정도~ 선형결합이 된 것들이 보이죠. 상관관계를 분석해볼까요.

cor(iris[,1:4])

             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length    1.0000000  -0.1175698    0.8717538   0.8179411
Sepal.Width    -0.1175698   1.0000000   -0.4284401  -0.3661259
Petal.Length    0.8717538  -0.4284401    1.0000000   0.9628654
Petal.Width     0.8179411  -0.3661259    0.9628654   1.0000000

#Sepal.Length와 Petal.Length, Width가 상관관계가 크네요~ Petal.Length와 Petal.Width와도 매우 높구요~

 여러가지 쭉 훑어보시면 될거같네요.

#그러면 이제 꽃받침 길이에 대해서 꽃받침 너비와 꽃잎길이,너비가 어떤 영향을 주는지 회귀분석을 해볼까요.

a<-lm(Sepal.Length~Sepal.Width+Petal.Length+Petal.Width, data=iris)
summary(a)

Call:
lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, 
    data = iris)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.82816 -0.21989  0.01875  0.19709  0.84570

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.85600    0.25078   7.401 9.85e-12 ***
Sepal.Width   0.65084    0.06665   9.765  < 2e-16 ***
Petal.Length  0.70913    0.05672  12.502  < 2e-16 ***
Petal.Width  -0.55648    0.12755  -4.363 2.41e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3145 on 146 degrees of freedom
Multiple R-squared:  0.8586,    Adjusted R-squared:  0.8557 
F-statistic: 295.5 on 3 and 146 DF,  p-value: < 2.2e-16

#짜잔ㅋ (이제 혼자 노는거에 익숙해진 내모습;) 계수들을 살펴볼까요.

 회귀식은 y=1.86+0.65Sepat.Width+0.71Petal.Length-0.56Petal.Width+E가 되겠군요!

 자 여기서 중요한 것은 Seteris Paribus(다른 모든 조건들이 일정할 때~)라는 해석 조건입니다.

 이 다중회귀분석은 요 4가지 것들에 대해서만 회귀분석을 한 것이지만 실제적으로 꽃이 크는 데에는 다양한 조건들이 있죠.

 바람, 햇빛, 물, 종 등 많은 것들이 작용하죠. 따라서 우리가 해석 할 때에는 다른 모든 조건들이 일정하다고 가정을 하고 해석을

 해야 합니다. 사실 모든 것들의 단위가 중요한데요. 여기서는 방법론적인 것만 얘기하는 것이기 때문에, 단위는 제외하겠습니다.

# 다른 모든 조건들이 동일할 때, 모든 독립변수들은 유의수준5%하에서 매우 유의하며, 아무 것도 영향을 미치지 않았을 때, 기본적으로 꽃받침 길이는 1.86이며, 꽃받침의 너비가 1단위 증가할 때마다 꽃받침의 길이는 0.65씩 증가하며, 꽃잎의 길이가 1단위 증가할 때마다 꽃받침 길이가 0.71이 증가하고, 꽃잎의 너비가 1단위 증가할 때마다 꽃받침 길이는 -0.56씩 감소한다고 해석할 수 있겠죠.

# F통계량의 귀무가설은 모든 독립변수들의 계수가=0이다. 즉, 독립변수들은 하나도 영향을 미치지 않는다가 되고,

 대립가설은 독립변수들 중 적어도 하나는 B=0이 아니다!가 되겠죠. 즉 적어도 하나는 영향을 미친다가 됩니다.

 F도 유의하죠~

#이것 또한 plot(a)를 통해서 4가지 그래프를 확인해볼 수 있습니다.

--------###

이제 참고로 몇 가지 회귀모형에 대해서 알아보면,

1) 다항회귀분석 : 다항회귀분석은 독립변수와 종속변수 간에 곡선관계가 있는 경우 적용하는 회귀분석 기법입니다. 

                    설명변수의 차수가 2차이상이고, 설명변수의 교차항(Y=B0+B1X+B2X2+B3X1X2+E)이 있을 경우입니다.

2) 곡선회귀분석 : 독립변수 1, 종속변수 1개일 때 2차 이상의 비선형 함수를 가정한 분석기법입니다.

3) 비선형회귀분석 : 종속변수와 설명변수간의 관계가 비선형일 때 적용하는 분석방법입니다. log trasnform을 통해 해결합니다.

                      유형은 Logit, Probit, 로지스틱회귀분석등이 있죠.

#이러한 부분들은 조금 더 심화된 내용으로 차근히 나중에 알아가보도록 합니다~

--------###

마지막으로 최적회귀방정식의 선택을 해볼까요~? ( 사실 제 생각엔 다변량분석의 요인분석 파트와 비슷한?. .제가 모르는걸 수도 )

1. 회귀모형의 선택 지표

 -원칙은 종속변수와 상관관계가 높고, 선택된 독립변수들 간 상관관계는 낮고, 반드시 필요한 소수의 변수를 대상으로 합니다.

 - 결정계수, 수정된결정계수, Mallow's Cp, AIC(Akaike's Information Criterion) 등을 이용.

2. 변수 선택법

 1) 전진 선택법 (Forward selection)

 -상수 모형으로부터 시작하여 중요한 변수부터 추가하는 방식.

 -절편만 있는 모델에서 기준 통계치(F통계량, AIC)를 가장 많이 개선시키는 변수를 추가하는 방식입니다.

 2) 후진 제거법 (Backward elimination)

 -독립변수 후보들은 모두 포함한 모형에서부터 영향이 적은 변수를 하나씩 제거

 3) 단계별 방법 (Stepwise method)

 -전진선택법으로 시작하여 중요도가 약해지면 해당 변수를 제거하며 단계적으로 실행

 -기준 통계치에 영향이 적은 변수를 삭제하거나, 모델에서 빠진 변수 중 모델을 개선시키는 작업을 반복수행.

# 요 세 가지 방법중에 저는 단계별 방법이 합리적이라고 생각하고~ 이 방법을 해보겠습니다. (개인적 생각)

전에 사용했던 mtcars 데이터를 이용해보겠습니다.

이해를 돕기 위해, mtcars는 Motor Trend Car Road Tests 라는 데이터이구요.

A data frame with 32 observations on 11 variables.

[, 1] mpg Miles/(US) gallon
[, 2] cyl Number of cylinders
[, 3] disp Displacement (cu.in.)
[, 4] hp Gross horsepower
[, 5] drat Rear axle ratio
[, 6] wt Weight (1000 lbs)
[, 7] qsec 1/4 mile time
[, 8] vs V/S
[, 9] am Transmission (0 = automatic, 1 = manual)
[,10] gear Number of forward gears
   [,11] carb

Number of carburetors  

#각각의 단위들은 이렇습니다.

data(mtcars)
head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

#데이터가 이렇군요~ 그렇다면 disp(배기량)에 대해 mpg(갤런당마일)+cyl(실린더개수)+hp(마력)+drat(후면부 차축비율)+wt(무게)가 어떤 영향을 주는지에 대해 단계별 방법으로 접근하여 변수선택을 해보겠습니다.

step(lm(disp~mpg+cyl+hp+drat+wt, data=mtcars), direction="both")
Start:  AIC=243.02
disp ~ mpg + cyl + hp + drat + wt

       Df Sum of Sq   RSS    AIC
- drat  1     606.1 44300 241.46
- mpg   1    1813.5 45507 242.32
<none>              43694 243.01
- hp    1    3614.6 47308 243.56
- cyl   1   14044.6 57738 249.93
- wt    1   28421.4 72115 257.05

#시작 : AIC = 243 모든 변수가 투입된 상태입니다. 여기서는 241.46으로 가장 작은 AIC값을 가진 drat(후면부차축비율)이

 제거되겠죠.

Step:  AIC=241.46
disp ~ mpg + cyl + hp + wt

       Df Sum of Sq   RSS    AIC
- mpg   1      1605 45905 240.59
<none>              44300 241.46
- hp    1      3011 47310 241.56
+ drat  1       606 43694 243.01
- cyl   1     20694 64993 251.72
- wt    1     32903 77202 257.23

# 스텝 : AIC=241 이제 후진제거법과 같이 하나의 변수를 제거한 모델과 제거한 변수를 추가한 모델까지 고려해 선택합니다.

 여기서는 mpg(갤런당 마일)변수가 240.59로 가장 낮으므로 제거됩니다.

Step:  AIC=240.59
disp ~ cyl + hp + wt

       Df Sum of Sq   RSS    AIC
- hp    1      2078 47983 240.01
<none>              45905 240.59
+ mpg   1      1605 44300 241.46
+ drat  1       398 45507 242.32
- cyl   1     19108 65012 249.73
- wt    1     40338 86243 258.77

# 스텝 : AIC=240.6 또 다시 각각의 변수를 제거하여 보고, 제거했던 두 변수'mpg', 'drat'을 추가해 AIC값의 변화를 봅니다.

 그 결과 hp(마력)이 제거되죠.

Step:  AIC=240.01
disp ~ cyl + wt

       Df Sum of Sq    RSS    AIC
<none>               47983 240.01
+ hp    1      2078  45905 240.59
+ mpg   1       673  47310 241.56
+ drat  1         2  47981 242.01
- wt    1     40748  88731 257.68
- cyl   1     52726 100709 261.74

# 스텝 : AIC=240 이번에도 변수들을 하나씩 추가/제거해본 결과, 더이상 AIC가 좋아지지 않습니다.

Call:
lm(formula = disp ~ cyl + wt, data = mtcars)

Coefficients:
(Intercept)          cyl           wt  
    -190.21        37.09        59.51 

# CALL : process를 종료하고, 모델은 disp(배기량)~cyl(실린더개수)+wt(무게)로 모델을 확정하게 되고, 회귀모형을 제시합니다.

 그결과, 기본적인 배기량은 -190. 실린더가 추가될수록 37.09씩, 무게가 1단위 늘어날수록 59.51만큼 배기량이 증가한다는 결과를 도출했습니다.

#오늘은 회귀분석을 R을 통해서 실습해보았는데요! 재밌었죠~ 전에는 조~금지루했다면요 ㅎㅎ

 다음 시간에는 시계열분석의 개념과 간단한 플랏들을 실행해보겠습니다.