분석사례
어떤 슈퍼마켓에서 고객이 구입하는 상품의 금액과 카운터에서 값을 치르는 데 걸리는 시간 사이에 회귀함수 관계가 있는가를 알아보기 위해 10명의 고객을 임의로 추출하여 데이터를 얻었다. R을 이용하여 회귀 모형을 적합해 보자.
1. 자료를 읽어 산점도를 그려보자.
> setwd('c:/Rwork')
> super=read.table('supermarket.txt',header=T)
> head(super)
price time
1 6.4 1.7
2 16.1 2.7
3 42.1 4.9
4 2.1 0.3
5 30.7 3.9
6 32.1 4.1
> length(price)
[1] 10
> a<-1:10
> attach(super)
> plot(price,time,pch=a)
2. 회귀모형과 분석분석표 구하기
> super.lm=lm(time~price,data=super)
> plot(super$price,super$time)
> abline(super.lm,lty=2,col='BLUE')
> summary(super.lm)
Call:
lm(formula = time ~ price, data = super)
Residuals:
Min 1Q Median 3Q Max
-0.37928 -0.32771 -0.04431 0.32231 0.56126
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.396460 0.191488 2.07 0.0722 .
price 0.115982 0.008979 12.92 1.22e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.3925 on 8 degrees of freedom
Multiple R-squared: 0.9542, Adjusted R-squared: 0.9485
F-statistic: 166.9 on 1 and 8 DF, p-value: 1.221e-06
> anova(super.lm)
Analysis of Variance Table
Response: time
Df Sum Sq Mean Sq F value Pr(>F)
price 1 25.7036 25.7036 166.85 1.221e-06 ***
Residuals 8 1.2324 0.1541
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> qf(0.95,1,8)
[1] 5.317655
> 1-pf(166.85,1,8)
[1] 1.220851e-06
데이터 해석을 해 보자
① 회귀계수 추정값은 time hat = 0.396 + 0.116 X price
② 기울기에 대한 t-값은 12.92이고, p-값은 1.221e-06 = 1.221 X 1106 로 그 값이 매우 적기 때문에 유의하다.
③ F-값은 166.85 이고, 이에 대한 p-값은 1.221e-06으로서 적합된 회귀직선이 유의하다는 것을 알 수 있다.
F0 = 166.85 > F 기각역 F(1,8;0.05)의 값 qf(0.95,1,8) = 5.317655
이므로 귀무가설 H0 : β1 = 0을 기각한다. 따라서 구해진 회귀직선이 유의하다.
유의 확률 값은 1-pf(166.85,1,8) = 1.22081 X 106
로서, 유의확율 p-값을 이용한 검정은 유의확률 p-값 < 유의수준 α(=0.05)이면 회귀방정식이 유의하다는 것을 나타낸다.
④ 추정값의 표준오차(standard error of estimate) = 0.3925 = MSE의 제곱근 sqrt(0.1541)
⑤ 결정 계수는 0.9542 = SSR / SST = 25.7036 / (25.7036 + 1.2324), 총 변동 중에서 회귀 방정식으로 설명되는 부분이 95.42%라는 것을 나타낸다.
3. 잔차, 추정값 보기 및 잔차 그림 그리기
> names(super.lm)
[1] "coefficients" "residuals" "effects" "rank"
[5] "fitted.values" "assign" "qr" "df.residual"
[9] "xlevels" "call" "terms" "model"
> cbind(super,super.lm$resi,super.lm$fit)
price time super.lm$resi super.lm$fit
1 6.4 1.7 0.56125840 1.138742
2 16.1 2.7 0.43623742 2.263763
3 42.1 4.9 -0.37928275 5.279283
4 2.1 0.3 -0.34002095 0.640021
5 30.7 3.9 -0.05709314 3.957093
6 32.1 4.1 -0.01946730 4.119467
7 7.2 1.2 -0.03152683 1.231527
8 3.4 0.5 -0.29079696 0.790797
9 20.8 3.3 0.49112416 2.808876
10 1.5 0.2 -0.37043203 0.570432
> plot(price,super.lm$resi,pch=19)
> abline(h=0,lty=2)
-> time은 실제 소요 시간, super.lm$fit은 추정값, super.lm$resi는 잔차. 잔차는 실제값과 추정값 차이
abline(h=0,lty=2)은 잔차가 0인 선을 그리되, 라인 타입을 점선(lty=2)으로 그리라는 명령이다. 그림에서 보면 잔차는 0을 중심으로 일정한 범위 내에 있으므로 회귀에 대한 기본 가정을 만족한다고 할 수 있으나, X가 증가함에 따라 곡선관계를 보여주고 있다. 따라서 2차 곡선 회귀식 Ŷ = b0 + b1X = b2X2을 구해보는 것도 의미가 있으리라 생각된다.
4. 추정값의 신뢰대 그리기
> p.x = data.frame(price=c(1,45))
> pc = predict(super.lm,int='c',newdata=p.x)
> pred.x=p.x$price
> plot(super$price,super$time,ylim=range(super$time,pc))
> matlines(pred.x,pc,lty=c(1,2,2),col='BLUE')
걸음만 단계. 무한 반복과 많은 연습이 필요.
'KNOU > 2 회귀모형' 카테고리의 다른 글
제2장 중회귀모형 - 표준화된 중회귀분석, 추정과 검정, 변수 추가 (0) | 2016.09.18 |
---|---|
제2장 중회귀모형 - 중회귀모형 추정, 신뢰성 (0) | 2016.09.14 |
제1장 단순회귀모형 - 단손회귀의 추정과 검정 (0) | 2016.09.12 |
제1장 단순회귀모형 - 회귀모형, 회귀선의 추정, 회귀모형의 정도 (0) | 2016.08.26 |