반응형

분석사례

어떤 슈퍼마켓에서 고객이 구입하는 상품의 금액과 카운터에서 값을 치르는 데 걸리는 시간 사이에 회귀함수 관계가 있는가를 알아보기 위해 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')

 

 


걸음만 단계. 무한 반복과 많은 연습이 필요.



반응형
Posted by 마르띤
,
반응형

단순 회귀 직선의 기본 가정 중 하나는 주어진 X Y의 기대값을 E(Y)라고 하면,


E(Y)= β0 + β1X


가 성립되는 것이다. 이러한 의미는 관심이 되고 있는 모집단에서 변수 X Y사이에 선형관계가 성립된다고 하는 것이다.


 

1. β0, β1의 신뢰구간

> summary(market.lm)

 

Call:

lm(formula = Y ~ X, data = market)

 

Residuals:

   Min     1Q Median     3Q    Max

-3.600 -1.502  0.813  1.128  4.617

 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept)    -2.2696     3.2123  -0.707 0.499926   

X                  2.6087     0.3878   6.726 0.000149 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 2.631 on 8 degrees of freedom

Multiple R-squared:  0.8497,    Adjusted R-squared:  0.831

F-statistic: 45.24 on 1 and 8 DF,  p-value: 0.0001487

 

# β0 95%신뢰구간

> q.val=qt(0.975,8)

> -2.2696-3.2123*q.val;-2.2696+3.2123*q.val

[1] -9.677177

[1] 5.137977

 

# β1 95%신뢰구간

q.val=qt(0.975,8)

 2.6084-q.val*0.3878 ; 2.6084+q.val*0.3878

[1] 1.714132

[1] 3.502668 


 


2. 추정값의 신뢰 구간을 그려보자

> range(market$X)

[1]  4 12

> pred.frame=data.frame(X=seq(3.5,13.5,0.2))

> pc=predict(market.lm,int='c',newdata=pred.frame) #기대값의 신뢰구간

> pp=predict(market.lm,int='p',newdata=pred.frame) # 새로운 값의 신뢰구간

> head(pc,3);head(pp,3)

       fit      lwr      upr

1 6.860870 2.402421 11.31932

2 7.382609 3.084944 11.68027

3 7.904348 3.765982 12.04271

       fit         lwr      upr

1 6.860870 -0.66731914 14.38906

2 7.382609 -0.05148732 14.81670

3 7.904348  0.56119219 15.24750

> pred.X=pred.frame$X

> plot(market$X, market$Y,ylim=range(market$Y,pp))

> matlines(pred.X,pc,lty=c(1,2,2),col='BLUE')

> matlines(pred.X,pp,lty=c(1,3,3),col='RED')



-> 안쪽 파란색 점섬은 pc의 신뢰구간, 바깥쪽 빨간색 점선은 pp의 신뢰구간. Pp의 신뢰대가 pc의 신뢰대보다 더 넓은 영역을 차지하는 것을 알 수 있다.



> identify(market$X,market$Y)


> market[c(1,2,6),]

  NUMBER  X  Y

1      1  4  9

2      2  8 20

6      6 12 30

> market[c(4,7,9),]

  NUMBER X  Y

4      4 8 15

7      7 6 18

9      9 6 10

-> 1,2,6번 데이터는 pc 신뢰구간 내 있는 데이터, 4,7,9번은 pc 신뢰구간 바깥에 있는 데이터



 

3. β1 검정

귀무가설 H0 : β1 = 0

대립가설 H1 : β1 0

 

위 가설에 대한 검정통계량은, 양측검정이므로 t(n-2; α/2)인 기각값을 구한 후, 만약 |t0| > t(n-2; α/2)이면 귀무가설을 기각하게 된다.

> summary(market.lm)

 

Call:

lm(formula = Y ~ X, data = market)

 

Residuals:

   Min     1Q Median     3Q    Max

-3.600 -1.502  0.813  1.128  4.617

 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept)    -2.2696     3.2123  -0.707 0.499926   

X                  2.6087     0.3878   6.726 0.000149 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 2.631 on 8 degrees of freedom

Multiple R-squared:  0.8497,    Adjusted R-squared:  0.831

F-statistic: 45.24 on 1 and 8 DF,  p-value: 0.0001487

 

결과에서 기울기 β1 추정값 b1 = 2.6087이고, t-


t0= 2.6087 / 0.3878 = 6.726921

 

임을 알 수 있다. P – 값은 다음과 같이 구해진다.


p- = Pr(T > |6.726|) = 2 X (1-Pr (T<6.726)) 이므로


> 2*(1-pt(6.726921,8))

[1] 0.0001485319

-> 결론: p- = 0.0001485319로서 매우 작으므로 귀무가설 H0 : β1 = 0을 기각하게 된다.




4. 추정값의 신뢰구간

Ŷ의 분산은 X의 함수로서 X=X bar일 경우 최소. X=X bar를 대칭으로 X의 값이 X bar에서 멀어질수록 커짐. 또한 n이 커져도 Var(Ŷ)이 작아짐을 알 수 있음.



문제: 광고비를 투입할수록 매출액이 커진다고 한다. 이 자료를 바탕올 회귀식을 구했더니 매출액(Ŷ) = -2.2696 + 2.6087 * 광고비가 나왔고, 이 회귀식을 이용하여 광고비 7을 투입할 경우 매출액 15.993을 구하였다. 이 때 매출액 15.993에 대하여 95%의 신뢰구간을 설정하시오.



X

x-xbar

(x-xbar)^2

Y

Ŷ = -2.2696 + 2.6087x

y-Ŷ

(y-Ŷ)^2

4

-4

16

9

8.166

0.834

0.695556

8

0

0

20

18.602

1.398

1.954404

9

1

1

22

21.211

0.789

0.622521

8

0

0

15

18.602

-3.602

12.9744

8

0

0

17

18.602

-1.602

2.566404

12

4

16

30

29.038

0.962

0.925444

6

-2

4

18

13.384

4.616

21.30746

10

2

4

25

23.82

1.18

1.3924

6

-2

4

10

13.384

-3.384

11.45146

9

1

1

20

21.211

-1.211

1.466521

합계

46

합계

55.357

평균x

8

평균y

18.6

 


t(n-2 ; α/2) 은 신뢰수준이 95%이므로 α/2 = 0.025이고, 자유도는 10-2 = 8이다. 해당 값을 t분포표 값에서 찾으면 2.306이다. 이를 R에서 계산하면 아래와 같다.


> anova(market.lm)

Analysis of Variance Table

 

Response: Y

          Df  Sum Sq Mean Sq F value    Pr(>F)   

X             1 313.043  313.04   45.24 0.0001487 ***

Residuals  8  55.357    6.92                     

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> qt(0.975,8)

[1] 2.306004


-> MSE = 6.92, t(10-2 ; 5%/2) = 2.306

= 15.993 ± 2.306 x SQRT ( MSE x (1 + 1/(10-2) + (7-8)^2 / 46))

= 15.993 ± 2.306 x SQRT ( 55.357/8 x (1 + 1/(10-2) + (7-8)^2 / 46))

= 15.993 ± 6.49

 

따라서 매출액 15.993에 대하여 95%의 신뢰구간은 9.503에서 22.483로 예측할 수 있다.

 

반응형
Posted by 마르띤
,
반응형

문제: A제품과 B 제품이 있는데, B 제품의 제품 클레임이 A제품보다 많다고 한다. A, B 두 제품의 품질 간에 유의한 차이가 있는지 독립표본 두 모평균 비교를 수행하라.

 

1. 데이터를 불러오자.

> setwd('c:/Rwork')

> claim<-read.csv('claim.csv',header = T)

> boxplot(ppm~제품, data=claim) 

 

##A B 나누어 살펴보기

> library(dplyr)

> claim.A <- claim %>% filter(제품 == "A")

> claim.B <- claim %>% filter(제품 == "B")

> nrow(claim.A) ; nrow(claim.B)

[1] 105

[1] 40

 

> claim.A$제품 %>% table #질적-명목형 변수

A   B

105   0

> claim.A$ppm %>% summary #양적-이산형 변수

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

3.0    83.0   211.0   259.7   385.0   994.0

> claim.A$ppm %>% sd

[1] 217.4249


> claim.B$ppm %>% summary #양적-이산형 변수

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.

29.00   71.25  145.50  272.60  345.20 1104.00

> claim.B$ppm %>% sd

[1] 279.8323

> par(mfrow=c(1,2))

> claim.A$ppm %>% hist

> claim.B$ppm %>% hist


-> 해석: A의 평균 ppm 259, 표준편차는217, B는 평균이 272, 표준편차 279. BoxplotHistogram만으로는 확연히 B의 클레임 ppm이 높다고는 볼 수 없다.

 


2. R을 이용하여 통계 분석을 해보자.

두 집단의 평균이 같은지를 비교하여 두 집단의 차이를 평가하는 경우 two-sample t-test를 사용하는데, 쌍을 이룬 두 변수 간에 차이의 평균이 0인지 검정하는 paired t-test와는 달리 서로 독립적인 두 집단의 평균의 차이가 0인지를 검정한다. Two-sample t-test는 다음 순서를 따른다.

 

두 집단의 분산이 같은지 검정하자.

> var.test(ppm~제품, data=claim)

F test to compare two variances

 

data:  ppm by 제품

F = 0.6037, num df = 104, denom df = 39, p-value = 0.04555

alternative hypothesis: true ratio of variances is not equal to 1

95 percent confidence interval:

  0.3454412 0.9901513

sample estimates:

  ratio of variances

0.6037024

-> 해석:

귀무가설 H0: 두 모형의 분산이 같다.

대립가설 H1: 두 모형의 분산이 다르다.

F = 0.6037, num df = 104, denom df = 39, p-value = 0.04555

두 분산의 비율이 0.6배이고, p값이 0.05보다 작으므로 두 분산이 같다는 귀무가설을 기각, 즉 두 모집단이 다르다, 분산이 다른 경우 에는 welch t.test를 한다.

 

분산이 다른 경우 에는 welch t.test 실시한다.

> t.test(ppm~제품,data=claim)

 

Welch Two Sample t-test

 

data:  ppm by 제품

t = -0.26303, df = 57.854, p-value = 0.7935

alternative hypothesis: true difference in means is not equal to 0

95 percent confidence interval:

  -111.13697   85.32268

sample estimates:

  mean in group A mean in group B

259.7429        272.6500

-> 해석:

귀무가설 H0: μ1-μ2 = 0,

대립가설 H1: μ1-μ2 ≠ 0

검정통계량 T(df=57.854)=-0.26303

p-value 0.7935 > 0.05


평균이 같다는 귀무가설을 기각하지 못한다. 즉 제품 A와 제품B간에는 유의수준 5%에서 품질 차이가 없다고 결론지을 수 있다.



아직 R과 통계 공부 걸음마 단계인데 어서 익숙해지고 싶다.

반응형
Posted by 마르띤
,
반응형

목표변수가 연속형인 경우 -> 선형 회귀모델, ex) 광고비 투입 대비 매출액

목표변수가 두 개의 범주를 가진 이항형인 경우 -> 로지스틱 회귀모형, ex) 좋다1, 나쁘다0


 

2.1 선형회귀모형(linear regression model)

① 모형의 정의


Y= β0 + β1X1i + β2X2i +…..+ βpXpi + εi,   i = 1,…, n


- β0, β1, β2, …. Βp 를 회귀 모수(regression parameters) 또는 회귀 계수(regression coefficients)로서 알려지지 않는 상수이다.

εi Yi의 근사에서 오차(error)

 

회귀 모수의 추정

림에서 보듯이 주로 각 관측치로부터 회귀직선까지의 수직거리 제곱의 합을 최소화하는 회귀모수를 찾는 최소제곱추정법(LSE: least square estimation)을 이용한다. 즉 오 εi= Y - β0 - β1X1i - β2X2i -…..- βpXpi의 제곱합이다.


이 오차의제곱합을 최소화하는 추정값을 이용한 최소제곱회귀직선(least square regression line) 다음과 같으며, 오차항εi은 없다.



회귀 계수의 해석

회귀계수 βj 다른 입력 변수들이 일정할 j번째 입력변수가 단위 변동할 대응하는 Y 변동 양으로 해석. , βj 다른 입력변수를 보정한 후에 Y 대한 Xj 기여도. 회귀계수 βj 양수이면 Xj 증가할 Y 증가하고, 반대로 βj 음수이면, Xj 증가할 Y 감소함을 의미한다.


 

④ 입력 변수의 중요도




t값의 절대 값이 클수록 영향력이 크다고 할 수 있다. P-값이 유의수준 (보통 0.05)보다 작을 때 

귀무가설 H0 : β1 = 0

대립가설 H1 : β1 0

 

귀무가설을 기각하여, Xj의 영향력이 있다고 말할 수 있다.

 

⑤ 모형의 적합도 – F

모형의 상수항 β0을 제외한 모든 회귀계수가 0인지 아닌지를 검정하는 측도를 F-값이라 한다.

F-값은 회귀직선에 의해 평균적으로 설명할 수 있는 부분(MSR: mean squared regression)을 설명할 수 없는 부분(MSE: meas squared erroe)으로 나눈 값.

F =

MSR

=

SSR/p

MSE

SSE/(n-p-1)

 

F-값이 크면 p개 입력변수 중에 최소한 하나는 유의하다(회귀계수가 0이 아니다)라는 뜻이고, F-값이 작아서 p-(보통 0.05) 보다 크면 모든 입력변수가 유의하지 않아서 회귀선이 쓸모가 없다.

 

⑤ 모형의 적합도 결정계수 R2

모형의 적합도(goodness-of-fit)를 결정계수(coefficient of determination) R2으로 측정할 수 있다.

결정계수 R2는 설명할 수 있는 부분의 총합을 변동의 총합으로 나눈 값으로 0 1사의 값을 지닌다.

R2=

SSR

= 1 -

SSE

SST

SST

 

R2 1에 가까울수록 모형이 데이터에 더 잘 적합되었다(fitted), 또는 회귀직선이 설명력이 높다라고 말할 수 있다.

 

다만, 모형에 포함된 변수의 수(p)가 증가하면 할수록 R2은 증가하므로 변수의 수가 다른 모형을 비교할 때는 수정된(adjusted) R2를 사용

Ra2=

Adjusted R2

= 1 -

n-1

n-p-1

 

Ra2은 변수의 수가 증가한다고 항상 증가하지는 않는다.

 

⑤ 모형의 적합도 – AIC

입력변수의 수가 다른 모형을 비교 평가하는 기준으로 AIC(Akaike information criterion)을 사용한다.


AIC = nlog(SSE/n) + 2p

 

SSE는 오차제곱합으로 작을수록 모형이 적합이 잘 되었다고 할 수 있다. 입력변수의 수가 증가할수록 SSE는 감소하지만, 벌점 2p를 더한 AIC는 항상 감소하지는 않는다. 여러 후보 모형 중에서 AIC가 가장 작은 모형을 선택한다.

 

모형을 이용한 예측

주어진 데이터에 기반하여 회귀식 Ŷ을 얻었다고 하자. 임의의 객체 i*에 대해 관측한 입력변수의 값 x1i*, x2i*, …, xpi*를 그 회귀식에 대입하여 목표변수의 예측치 Ŷix를 얻을 수 있다.


즉, 기존 고객 데이터로 회귀식을 얻은 후, 수집한 새로운 고객의 입력변수 값을 회귀식에 대입하여 새로운 고객의 목표변수값을 예측하는 데 이용할 수 있다.


 

⑦ 예측력

목표변수가 연속형인 경우에 모형의 예측력 측도로서 MSE(mean squared error)를 주로 사용. 시각적으로 관측치(yi)와 예측치 Ŷi의 차이를 확인하기 위해서는 이들을 가로축 및 세로축에 놓고 그린 산점도가 45도 대각선을 중심으로 모여 있으면 예측력이 좋다고 할 수 있다.



반응형
Posted by 마르띤
,
반응형

회귀분석(regression analysis): 독립변수와 종속변수 간의 함수 관계를 규명하는 통계적인 분석방법


Ŷ=f(X)+ε


 - 독립변수(independent variable) 또는 설명변수(explanatory variable): 다른 변수에 영향을 주는 변수, 흔히 Y= β0 + β1X 공식에서 X

 - 종속변수(dependent variable) 또는 반응변수(response variable): 독립 변수에 의해 영향을 받는다는 변수, 흔히 Y= β0 + β1X 공식에서 Y

 

회귀(回歸)라는 말은다시 본디의 자리로 돌아온다라는 뜻으로 통계 분석에 처음 사용한 사람은 영국의 우생학자 Galton. 완두콩 실험을 통해 부모콩의 무게를 X, 자식콩의 무게를 Y축으로 산점도를 그리자, 이들의 관계식은 양이 관계이나 1보다 작아서 자식의 무게는 평균 무게로 회귀하려는 경향이 있다는 사실을 발견하고 이를 회귀(regression)으로 표현. 당시에 Galton 연구실에서 일하던 동료 연구원 Karl Pearson 이를 계량적으로 처음으로 분석하여 발표.

 

1. 데이터를 불러와서 산점도 그래프를 그리기

> market=read.table('market-1.txt',header=T)

> head(market,3)

NUMBER X  Y

1      1 4  9

2      2 8 20

3      3 9 22

> plot(market$X,market$Y,xlab='광고료',ylab='총판매액',pch=19)

> title('광고료와 판매액의 산점도')


 

2. 단순 회귀 분석 실시

> market.lm=lm(Y~X,data=market)

> summary(market.lm)

 

 

해석

추정값은 Coefficients: Estimate에서 확인. 추정된 회귀식은 Ŷ=-2.27 + 2.6 X

 


3. 산점도 위에 회귀직선을 그리자 - 회귀선의 추정

> abline(market.lm)

> identify(market$X,market$Y)

[1]  4  5 10

# Identify는 재미있는 함수인데, 본 함수를 입력하고 마우스로 점을 클릭하면 그림처럼 값을 알 수 있다.


> xbar = mean(market$X)

> ybar = mean(market$Y)

> xbar

[1] 8

> ybar

[1] 18.6

> points(xbar,ybar,pch=17,cex=2.0,col='RED')

> text(xbar,ybar,"(8,18.6)")

> fx <- "Y-hat = -2.27 + 2.6*X "

> text(locator(1),fx) #locator(1) 마우스로 클릭하면서 지정


 


4. 회귀식 특징

> names(market.lm)

[1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values"

[6] "assign"        "qr"            "df.residual"   "xlevels"       "call"        

[11] "terms"         "model"       

> market.lm$resid

1          2          3          4          5          6          7          8

0.8347826  1.4000000  0.7913043 -3.6000000 -1.6000000  0.9652174  4.6173913  1.1826087

9         10

-3.3826087 -1.2086957

> resid=market.lm$residual

> sum(resid) #특징1. 잔차의합은 0이다

[1] 0

> sum(market$X*resid) #특징2. 잔차들의 Xi 의한 가중합은 0이다

[1] 2.220446e-15

> sum(market.lm$fitted*resid) #특징3. 잔차들의 Yi 의한 가중합은 0이다

[1] -1.24345e-14

> names(market.lm)

 [1] "coefficients"  "residuals"     "effects"       "rank"         

 [5] "fitted.values" "assign"        "qr"            "df.residual"  

 [9] "xlevels"       "call"          "terms"         "model"        

> sum(market.lm$fitted.values)

[1] 186

> sum(market$Y)

[1] 186

#특징4. 추정값Yhat의 값과 관찰값Yi의 값은 같다.


5. 회귀모형의 정도

 - 산점도 위에 회귀직선을 그려 회귀선의 정도를 대략 짐작할 있으나, 이러한 경우는 독립변수가 하나인 경우에만 유용하게 쓰일 있다. 추정된 회귀선의 정도를 측정하는 여러 가지 측도(measure) 중에서 널리 이용되는 세가지를 알아보자

 ① 분산분석표에 의한 F-검정

 ② 결정계수

 ③ 추정값의 표준오차 

 ④ 상관계수와 결정계수


① 분산분석표에 의한 F-검정

요인

자유도

제곱합

평균제곱

F0

회귀

1

SSR(회귀제곱합)

MSR=SSR

MSR/MSE

잔차

n-2

SSE(잔차제곱합)

MES=SSE/n-2

 

n-1

SST( 제곱합)

 

 

- SST(Total sum of squares): 제곱합

- SSR(Sum of squares due to regression): 회귀제곱합, 설명되는 편차

- SSE(Sum of squares due to residual errors): 잔차제곱합, 설명되지 않는 편차

 

귀무가설 H0 : β1 = 0

대립가설 H1 : β1 0

 

F0 > F(1, n-2 ; α )이면 귀무가설 H0 : β1 = 0 기각하고, 회귀직선이 유의하다고 말한다. R분석 결과에서는 검정통계량 F0 대한 유의확률 p값이 제공된다. p < 유의확률 α이면 귀무가설 H0 : β1 = 0 기각한다

 

분산분석표

> anova(market.lm) #분산분석표

 

요인

자유도

제곱합

평균제곱

F0

회귀

1 = 1

SSR(회귀제곱합)

= 313.04

MSR=SSR

= 313.04

MSR/MSE

= 45.24

잔차

10-2 = 8

SSE(잔차제곱합)

= 55.36

MSE(잔차 평균제곱)  = SSE/n-2= 6.92

 

10-1 = 9

SST( 제곱합)

= 368.4

 

 

p값은0.0001487p < 유의확률 α 이므로 귀무가설  H0 : β1 = 0 기각한다, 따라서 회귀식은 유의하다.

 

> qf(0.95,1,8)

[1] 5.317655

유의수준 α =0.05에서 F-기각역 F(1,8;0.05)의 값은 5.32, " F0 = 45.24 > 5.32"이므로 귀무가설 기각, 회귀선은 유희하다

 

> 1-pf(45.25,1,8)

[1] 0.0001485485

유의확률 p값을 이용한 검정은 0.0001485485 이 값이 주어진 유의수준 α =0.05 보다 작을수록 귀무가설을 기각한다.

 


결정계수


R2=SSR/SST =1-SSE/SST


R2 결정계수(coefficient of determination)라고 부른다.


R2=SSR/SST = 313.04/368.4= 84.97%


이는 총변동 주에서 회귀직선에 의하여 설명되는 부분이 84.97%라는 의미로서, 추정된 회귀선의 정도가 높다는 것을 있다.

 

R 통해서도 있는데, Multiple R-squared 0.8497임을 있다.

> summary(market.lm)  



 

 추정값의 표준오차

선형회귀모형 Y= β0 + β1X + ε 을 표본의 자료로부터 적합시킬 때,


Y의 기댓값은 E(Y) = β0 + β1X, 분산은 σ2로 가정,


하였다. 따라서 Y의 측정값들이 회귀선 주위에 가깝게 있다면 σ의 추정값은 작아질 것이다. 

분산분석표에서 잔차평균제곱 MSE는 σ2의 불편추정량이 된다. 따라서 MSE의 제곱근을 추정값의 표준오차(standard error of estimate)라고 부르며, 다음과 같이 표현한다.



SY•X = SQRT(MSE) = SQRT(SSE/n-2) = 2.63


 

R 통해서도 있는데, Residual standard error 2.631임을 있다.

> summary(market.lm) 


 


상관계수와 결정계수

상관계수는 연속인 변수 간의 선형관계(linear relationship) 어느 정도인가를 재는 측도로서, 단순 회귀 분석에서는 상관계수 r 다음과 같이 구할 있다.


r = ±SQRT(R2 )


즉 상관계수는 결정계수 R2 제곱근이며, 만약 추정된 회귀선의 기울기 b1 양이면 양의 상관계수를 갖고, 기울기b1 음이면 음의 상관계수를 갖는다. 회귀식 Ŷ=-2.27 + 2.6 X에서 b1 2.6으로 양이므로 상관계수는 0.8497 sqrt , 0.9217임을 있다.

반응형
Posted by 마르띤
,
반응형

데이터 마이닝 기법의 구분

데이터마이닝에서 사용되는 기법은 크게 지도학습(supervised learning)과 자율학습(unsupervised learning)으로 나눌 수 있음

 

 - 지도학습의 목표는 입출력 간의 관계를 결정하는 시스템에 대한 유용한 근사 시스템을 구하는 것으로 정의할 수 있음. Y = aX + b

- 자율학습에서는교사의 역할에 해당하는 실제 출력값이 존재하지 않음. 따라서 데이터에 존재하는 여러 가지 형태의 특징을 찾는 데 그 목표를 둔다.

 

<데이터 마이닝의 기법>



 


독일신용평가 데이터 셋

독일신용평가 데이터(German Credit Data)는 머신러닝 저장소에 탑재되어 있는 데이터로 분류의 예제로 많이 활용된다.

> setwd('c:/Rwork')

> german<-read.table('germandata.txt')

> head(german,2) # 값들의 변수명이 없음.


> names<-c("check","duration","history","purpose","credit","savings","employment","installment",   "personal",   "debtors",    "residence",  "property",   "age", "others",       "housing",    "numcredits", "job", "residpeople",      "telephone",       "foreign"     ,"y")

> colnames(german)<-names

> head(german,2)

 

> german$y<-factor(german$y,levels=c(1,2),labels=c('good','bad'))

> head(german,2)

  

> summary(german)

#  residence,numcredits,residpeople 실제 범주형이지만 수치형으로 인식. 범주형으로 변환 필요

 

> class(german$residence) #integer 수치형

[1] "integer"

> class(german$check) #factor 범주형

[1] "factor"

> german$residence = factor(german$residence)

> german$numcredits = factor(german$numcredits)

> german$residpeople = factor(german$residpeople)

> class(german$residence) #factor 변환

[1] "factor"

> class(german$numcredits) #factor 변환

[1] "factor"

> class(german$residpeople) #factor 변환

[1] "factor"

> table(german$residence)

1   2   3   4

130 308 149 413 

 

출처: 데이터마이닝, 장영재

반응형
Posted by 마르띤
,
반응형

매일 1%의 노력을 하였을 때 몇 일이 지나면 처음보다 2배의 실력이 늘어날까?


> n<-c(1:100)

> efforts<-1.01^n

> plot(efforts,xlab='days')

> abline(h=2.0)

> efforts[70]

[1] 2.006763

> abline(v=70)

매일 1%의 노력을 하였을 때 약 70일이 지나면 처음보다 2배의 실력이 늘어난다.



반응형
Posted by 마르띤
,
반응형

어느 집단에서 10명의 표본을 추출하여 다음과 같은 4개 문항에 대하여 설문조사를 실시했다.

문항 1: 귀하의 성별은? 1) 남자 2) 여자

문항 2: 귀하의 나이는? (단위: )

문항 3: 귀하의 교육 정도는? 1) 무학 2) 초등졸 3) 종졸 4) 고졸 5) 대졸

문항 4: 귀하의 월 수입은? (단위: 만 원)


설문조사를 실시하여 얻은 응답 데이터를 csv 파일로 저장하고 간단한 작업을 해보자.

 

> setwd('c:/Rwork')

> survey<-read.csv('설문조사 데이터.csv',header=T,sep=',')

> survey

일련번호 변수.1.성별. 변수.2.나이. 변수.3.교육정도. 변수.4..수입.

1         1            1           21                4             100

2         2            2           22                5             100

3         3            1           33                2             200

4         4            2           33                4             120

5         5            1           28                4              70

6         6            1           21                5             100

7         7            2           39                4             190

8         8            1           32                5             220

9         9            2           44                1             170

10       10            1           55                3             310

> summary(survey)

일련번호      변수.1.성별변수.2.나이변수.3.교육정도. 변수.4..수입.

Min.   : 1.00   Min.   :1.0   Min.   :21.0   Min.   :1.00     Min.   : 70.0 

1st Qu.: 3.25   1st Qu.:1.0   1st Qu.:23.5   1st Qu.:3.25     1st Qu.:100.0 

Median : 5.50   Median :1.0   Median :32.5   Median :4.00     Median :145.0 

Mean   : 5.50   Mean   :1.4   Mean   :32.8   Mean   :3.70     Mean   :158.0 

3rd Qu.: 7.75   3rd Qu.:2.0   3rd Qu.:37.5   3rd Qu.:4.75     3rd Qu.:197.5 

Max.   :10.00   Max.   :2.0   Max.   :55.0   Max.   :5.00     Max.   :310.0 

> colnames(survey)<-c('변수','성별','나이','교육정도',' 수입')

> survey

변수 성별 나이 교육정도 수입

1     1    1   21        4     100

2     2    2   22        5     100

3     3    1   33        2     200

4     4    2   33        4     120

5     5    1   28        4      70

6     6    1   21        5     100

7     7    2   39        4     190

8     8    1   32        5     220

9     9    2   44        1     170

10   10    1   55        3     310

> plot(survey$나이, survey$` 수입`)

 


 

> par(mfrow=c(1,2))

> plot(survey$나이, survey$` 수입`,pch=20)

> plot(survey$나이, survey$` 수입`,pch="+")

  

반응형

'KNOU > 1 통계학개론' 카테고리의 다른 글

변수의 종류  (0) 2016.06.28
Posted by 마르띤
,
반응형

통계학 관련 공부를 할 때 모든 책의 첫번째 챕터에서 변수의 종류를 다룬다. 처음 통계를 공부할 때 읽으면 아~ 이런게 있구나 하고 별것 아닌걸로 생각하고 변수들의 정의와 개념을 잘 익히지 않고 그냥 넘어가자 후반부로 가면 갈 수록 다시 책을 앞으로 넘겼다, 뒤로 넘겼다를 반복하였다. 통계학을 공부 할 때 반드시 알아야 할 변수의 종류. 아무리 강조해도 지나치지 않을 변수의 개념 공부.

 

1. 질적 변수(qualitative variable): 조사 대상을 특성에 따라 범주로 구분하여 측정된 변수로 범주형 변수(categorical data)라고도 함. 이러한 질적 변수에 대해 덧셈 등 수학적 연산결과는 아무런 의미가 없기 때문에 연산의 개념을 적용시킬 수 없다. 즉 남자 =1, 여자 =2 변수에서 1.5는 아무런 의미가 없다. 전화번호나 생일 역시 더하거나 나눈다고 하여 의미 있는 값을 얻을 수 없다. 질적 변수가 분석 대상일 때는 각 범주에 속한 개수나 퍼센트 등을 다룬다. 보통 원그래프나, 막대그래프를 이용한다.

 - 명목형(nominal): 변수나 크기가 순서에 대한 의미가 없고 이름만 의미를 부여할 수 있는 경우

   예) 성별(남자 = 1, 여자 =2), 자동차 브랜드(현대=1, 기아=2, 르노삼성=3, GM=4)

 - 순서형(ordinal) – 변수가 어떤 기준에 따라 순서에 의미를 부여할 수 있는 경우

   예) 교육수준(초졸=1, 중졸=2, 고졸=3, 대졸 이상=4), 건강 상태(양호=3, 보통=2, 나쁨=1)

 

2. 양적 변수(quantitative variable): 길이, 무게와 같이 양적인 수치로 측정되거나 몇 개인가를 세어 측정하는 변수로 덧셈, 뺄셈 등의 연산이 가능하다. 히스토그램, 줄기-잎 그림, 점 도표, 시계열 그래프 등을 이용한다.

 - 이산형(discrete): 변수가 취할 수 있는 값을 하나하나 셀 수 있는 경우

   예) 방 갯수, 퀴즈 문제 중 맞힌 개수, 보험 설계사가 계약을 체결할 때 까지 만난 사람 수

 - 연속형(continuous): 변수가 구간 안의 모든 값을 가질 수 있는 경우

 예) 실수 구간 안의 모든 값. 신생아의 키

 

 

어떤 변수의 경우는 이산형 또는 연속형으로 취급되는데, 나이가 그 좋은 예이다. 나이는 시간이 지남에 따라 계속 늘어나는 연속형 변수이지만, 1년 단위로 측정되면 이산형 변수이다. 

 

(1) 파이썬 코드

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 예제 데이터 생성
data = pd.DataFrame({
    'Gender': ['Male', 'Female', 'Male', 'Female', 'Male', 'Female'],
    'Age': [25, 30, 22, 35, 28, 40],
    'Height': [175, 160, 180, 155, 170, 165]
})

# 질적 변수: 성별(Gender)
# 양적 변수: 나이(Age), 키(Height)

# 질적 변수 시각화 (막대 그래프)
plt.figure(figsize=(10, 5))
sns.countplot(x='Gender', data=data)
plt.title('Count of Individuals by Gender')
plt.show()

 

 

# 양적 변수 시각화 (히스토그램)
plt.figure(figsize=(10, 5))
sns.histplot(data['Age'], bins=20, color='skyblue')
plt.title('Distribution of Age')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()

 

# 양적 변수 시각화 (상자 그림)
plt.figure(figsize=(10, 5))
sns.boxplot(x='Height', data=data, color='lightgreen')
plt.title('Box Plot of Height')
plt.xlabel('Height')
plt.show()

 

 

 

반응형
Posted by 마르띤
,
반응형

Stars plot 이용한 다변량 데이터의 시각화

> total<-read.table('성적.csv',header=T,sep=',')

> total

이름 국어 영어 수학 국사 화학 물리

1 박지영   90   85   55   88   91   79

2 김태함   70   65   80   75   76   89

3 김효섭   92   95   76   65   89   91

4 임경희   76   89   88   95  100   91

5 권혁진   97   87   83   91   86   91

6 하혜진   80   86   97   85   69   77

7 이준원   80   30   40   50   70   90

8 윤정웅   70   82   54   56   58   60

9 주시현   90   95  100   85   89   92

 

> row.names(total)<-total$이름 #학생 별로 성적을 불러오기 위한 작업

> total

이름 국어 영어 수학 국사 화학 물리

박지영 박지영   90   85   55   88   91   79

김태함 김태함   70   65   80   75   76   89

김효섭 김효섭   92   95   76   65   89   91

임경희 임경희   76   89   88   95  100   91

권혁진 권혁진   97   87   83   91   86   91

하혜진 하혜진   80   86   97   85   69   77

이준원 이준원   80   30   40   50   70   90

윤정웅 윤정웅   70   82   54   56   58   60

주시현 주시현   90   95  100   85   89   92

> total<-total[,2:7]

> total

국어 영어 수학 국사 화학 물리

박지영   90   85   55   88   91   79

김태함   70   65   80   75   76   89

김효섭   92   95   76   65   89   91

임경희   76   89   88   95  100   91

권혁진   97   87   83   91   86   91

하혜진   80   86   97   85   69   77

이준원   80   30   40   50   70   90

윤정웅   70   82   54   56   58   60

주시현   90   95  100   85   89   92

 

 

그래프 그리기

> stars(total,flip.labels = FALSE, draw.segments = FALSE, frameplot=TRUE, full=TRUE, main='성적 분석-Star Chart')

 


> stars(total,flip.labels = FALSE, draw.segments = TRUE, frameplot=TRUE, full=TRUE, main='성적 분석-Nightingale Chart')

 


> stars(total,flip.labels = FALSE, draw.segments = TRUE, frameplot=TRUE, full=FALSE, main='성적 분석-Nightingale Chart')

 


> stars(total,flip.labels = FALSE, draw.segments = TRUE, frameplot=TRUE, full=FALSE, main='성적 분석-Nightingale Chart',scale=T,key.loc=c(10,2))


반응형
Posted by 마르띤
,