본문 바로가기
자격증/ADSP

[ADSP] 오답노트: 3-R의 활용

by kime2 2024. 2. 21.

fit$scores

T-검정 

두 집단 간 평균의 차이기 유의미 한지 검정

 

1. 일 표본 t-검정

한 집단의 평균이 어떤 특정한 값과 차이가 있는지 검정

특정 가설을 확인하거나 평균이 기대값과 일치하는지 여부 평가

 

1) 일표본 단측 t검정

특정 방향으로 차이를 검정하는 통계적 방법

대립가설이 어느 방향으로 특정회어 있을 때 사용

대립가설이 '크다'또는 '작다'와 같이 어떤 특정 방향을 가리킬 때 유용

# 어떤 훈련 프로그램이 평균적으로 시험 성적을 향상시킬 것이라고 가정했을 경우
# 귀무가설 (H0): 훈련 전후의 평균 시험 성적에 유의미한 차이가 없다.
# 대립가설 (H1): 훈련 후의 평균 시험 성적이 훈련 전보다 더 높다.

# 가상의 데이터 생성
> set.seed(123)
> before_training <- c(75, 78, 80, 72, 76)
> after_training <- c(80, 82, 85, 78, 81)

# 일 표본 단측 t-검정 수행
> result <- t.test(after_training, mu = mean(before_training), alternative = "greater")

# 결과 출력
> result

	One Sample t-test 

data:  after_training
t = 4.3193, df = 4, p-value = 0.006227
alternative hypothesis: true mean is greater than 76.2
95 percent confidence interval:
 78.73221      Inf
sample estimates:
mean of x
      81.2

# 검정통계량 t = 4.3193 , 자유도 df = 4 , p-value = 0.006227
# 결과에서 나온 p-value를 통해 귀무가설을 기각할지 여부를 판단할 수 있다.

 

 t.test(after_training, mu = mean(before_training), alternative = "greater") -> 일표본 단측 검정

 

2) 일표본 양측 t검정

모수값이 ~이다/이~아니다와 같이 방향성이 없는 경우에 수행

주로 두 집단의 평균이 서로 다르다는 것을 확인하고자 할때 사용

# 어떤 과자의 평균 무게가 200g인지 확인하고자 한다고 가정했을 경우
# 귀무가설 (H0): 과자의 평균 무게는 200g이다.
# 대립가설 (H1): 과자의 평균 무게는 200g과 다르다.

# 가상의 데이터 생성
> set.seed(123)
> cookie_weights <- c(198, 201, 199, 202, 200, 198, 201, 199, 200, 201)

# 일 표본 양측 t-검정 수행
> result <- t.test(cookie_weights, mu = 200, alternative = "two.sided")

# 결과 출력
> result

	One Sample t-test

data:  cookie_weights
t = -0.23077, df = 9, p-value = 0.8227
alternative hypothesis: true mean is not equal to 200
95 percent confidence interval:
198.9197 200.8803
sample estimates:
mean of x
199.9

# 값이 유의수준(보통 0.05)보다 작다면 귀무가설을 기각하게 된다.
# 값이 유의수준(보통 0.05)보다 크다면 귀무가설을 기각할 수 없다.

 

 t.test(cookie_weights, mu = 200, alternative = "two.sided") -> 일표본 양측검정

 

2. 이(독립) 표본 t-검정

독립된 그룹간에 평균 차이가 있는지 검정하기 위한 통계적 방법

두 그룹이 서로독립되어 있고, 각각의 그룹에서의 관측치들이 서로 영향을 미치지 않는 경우에 사용

두 그룹의 분산이 서로 같음을 의미하는 등분산성을 만족해야 하므로 이 표본t-검정을 수행하기 전에 등분산검정(F검정)을 먼저 수행

 

1) 이 표본 단측 t 검정

두 그룹에 대하여 모수 비교를 할 때 ~이 보다 크다/~이 보다 작다 같이 대소가 있는 경우 사용

# A 집단의 성적이 B 집단의 성적보다 같거나 더 높다는 귀무가설을 수립했다고 가정

# 가상의 데이터 생성
> set.seed(123)
> group_A <- c(75, 78, 82, 85, 80)
> group_B <- c(80, 85, 88, 90, 87)

# 표본 단측 t-검정 (예상 방향: A 집단의 평균이 같거나 높다)
> result <- t.test(group_A, group_B, alternative = "less")

# 결과 출력
> result

	Welch Two Sample

 t-testdata:  group_A and group_B
t = -2.4914, df = 8, p-value = 0.01872
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
      -Inf -1.521615
sample estimates:
mean of x mean of y
       80        86

# 값이 유의수준(보통 0.05)보다 작다면 귀무가설을 기각하게 된다.
# 값이 유의수준(보통 0.05)보다 크다면 귀무가설을 기각할 수 없다.

t.test(group_A, group_B, alternative = "less") -> 이표본 단측 t검정

 

2) 이 표본 양측 t 검정

두 그룹의 모수를 비교할 때 '두 그룹이 같다'/'다르다'와 같이 두 그룹 사이에 대소가 없는 경우 수행

# A 집단과 B 집단의 평균 성적이 서로 다르다는 가설 테스트

# 가상의 데이터 생성
> set.seed(123)
> group_A <- runif(30, min = 60, max = 90)  # A 그룹의 수학 성적
> group_B <- runif(30, min = 65, max = 95)  # B 그룹의 수학 성적

# 표본 양측 t-검정
> result <- t.test(group_A, group_B, alternative = "two.sided")

# 결과 출력
> result

      Welch Two Sample t-test

data:  group_A and group_B
t = -0.43848, df = 57.999, p-value = 0.6627
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -5.494026  3.519583
sample estimates:
mean of x mean of y
 77.17200  78.15923

# 값이 유의수준(보통 0.05)보다 작다면 귀무가설을 기각하게 된다.
# 값이 유의수준(보통 0.05)보다 크다면 귀무가설을 기각할 수 없다.

 

t.test(group_A, group_B, alternative = "two.sided") -> 이표본 양측 t 검정

 

3. 대응 표본 t 검정(paired t -TEST)

동일한 대상에 대해 두 가지 관측치가 있는 경우 이를 비교하여 차이가 있는지 검정할 때 사용

실험 전후의 효과를 비교할 때 사용

결과적으로 두 변수의 변화가 우연에 의한 것인지, 아니면 특정한 처리나 조건에 의해 유발된 것인지 알 수 있음

# before와 after라는 두 가지 조건에서 얻은 가상의 데이터를 생성 후
# 그 차이를 나타내는 after 데이터를 만들기

# 가상의 데이터 생성
> set.seed(123)
> before <- runif(20, min = 25, max = 35) 
> after <- before + runif(20, min = -2, max = 2)

# 대응 표본 t-검정
> result <- t.test(before, after, paired = TRUE)

# 결과 출력
> result

        Paired t-test

data:  before and after
t = -1.1969, df = 19, p-value = 0.2461
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 -0.8435527  0.2297860
sample estimates:
mean difference
     -0.3068834

# 값이 유의수준(보통 0.05)보다 작다면 귀무가설을 기각하게 된다.
# 값이 유의수준(보통 0.05)보다 크다면 귀무가설을 기각할 수 없다.

 

t.test(before, after, paired = TRUE) -> 대응표본 t검정

 

분산분석(ANOVA)

여러 그룹간의 평균을 비교하는 검정 방법

분산분석에는 (집단 간 분산) % (집단 내 분산)으로 계산되는 F-value가 사용됨

 

1) 일월 분산분석

# 컴퓨터 A,B,C의 속도 차이가 있는지 여부 확인
# 귀무가설 : A,B,C 라는 세 대의 신형 핸드폰 간의 속도 차이는 없다.
# 대립가설 : 그룹 간 평균의 차이가 존재한다.

> ComputerSpeed <- runif (45, min=75, max=100)
> Computer <- rep(c('A','B','C'),15)
> ComputerData <- data.frame(ComputerSpeed, Computer)

#분산분석 수행
> result <- aov ( data = ComputerData, ComputerSpeed~Computer)
> summary (result)
            Df Sum Sq Mean Sq F value Pr(>F)
Computer     2     68   33.98   0.685   0.51
Residuals   42   2085   49.64

#p-value 값이 0.51로 0.05 보다 작지 않으므로 귀무가설을 기각할 수 없다.

 

aov ( data = ComputerData, ComputerSpeed~Computer) -> 일원 분산분석(anova)

aov(연속형~번주형)으로 입력

 

 

상관분석

# datasets 패키지의 mtcars라는 데이터셋 사용
# 마일(mpg), 총마력(hp)의 상관관계 분석

> data(mtcars)
> a <- mtcars$mpg
> b <- mtcars$hp
> cov(a,b) # 공분산
[1] -320.7321
> cor(a,b) # 상관계수
[1] -0.7761684
> cor.test(a,b,method="pearson")
	    Pearson's product-moment correlation
data:  a and b
t = -6.7424, df = 30, p-value = 1.788e-07
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.8852686 -0.5860994
sample estimates:
       cor
 -0.7761684

# 공분산 -320.7321
# 상관계수 -0.7761684
# mpg와 hp는 공분산으로 음의 방향성을 가짐을 알 수 있고,
# 상관계수로 강한 음의 상관관계가 있음을 알 수 있다.
# p-value 가 1.788e-07로 유의수준 0.05보다 작기 때문에 mpg와 hp가 상관관계가 있다고 할 수 있다.

 

회귀분석

 

회귀분석에서의 검토사항

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

 

  • 회귀계수들이 유의미한가
  • -> 회귀 계수의 t-통계량의 p값 또는 이들의 신뢰구간을 확인한다

 

  • 모형이 얼마나 설명력을 갖는가
  • -> 결정계수(R^2)를 확인한다. 결정계수는 0에서 1사이의 값을 가지며, 높은 값을 가질수록 추정된 회귀식의 설명력이 높다
  • -> 설명력이 좋다는 의미는 데이터들의 분포가 회귀선에 밀접하게 분포하고 있다는 것
  • -> 즉, 결정계수는 회귀모델이 주어진 데이터를 얼마나 잘 설명하는지를 나타내는 통계적 척도
  • *다변량 회귀분석에서 독립변수의 숙다 많아지면 결정계쑤가 높아지므로 독립변수가 유의하든, 유의하지 않든 독립변수의 수가 많아지면 결정계수가 높아지는 단점
  • -> 수정된 결정계수

 

  • 모형이 데이터를 잘 적합하고 있는가
  • -> 잔차를 그래프로 그리고 회귀진단

1. 단순선형회귀분석

<단순회귀분석>

함수: lm()

> set.seed(2)
> x=runif (10,0,11)
> y=2 + 3*x + rnorm(10,0,0.2)
> dfrm=data.frame (x, y )
> dfrm
           x         y
1   2.033705  8.127599
2   7.726114 25.319934
3   6.306590 20.871829
4   1.848571  7.942608
5  10.382233 33.118941
6  10.378225 33.218204
7   1.420749  6.458597
8   9.167937 29.425272
9   5.148204 17.236677
10  6.049821 20.505909

> lm(y~x, data=dfrm)
Call:
lm(formula = y ~ x, data = dfrm)
Coefficients:
(Intercept)            x
      2.213        2.979

# 이 경우 회귀방정식은 y=2.213x + 2.979로 추정된다.

 

<단순회귀분석 2>

> library(MASS)
> head(ChickWeight)
  weight Time Chick Diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1

# 1번 닭에게 식이요법 방법 1을 적용한 데이터만 조회하여 chick 변수에 할당한다.
> Chick <- ChickWeight[ChickWeight$Diet==1,]
> Chick
    weight Time Chick Diet
1       42    0     1    1
2       51    2     1    1
3       59    4     1    1
... (중략)
217     98   16    20    1
218    107   18    20    1
219    115   20    20    1
220    117   21    20    1

# chick 데이터세트에서 1번 닭만 조회한다.
> Chick <-ChickWeight[ChickWeight$Chick==1,]
> Chick
   weight Time Chick Diet
1      42    0     1    1
2      51    2     1    1
3      59    4     1    1
4      64    6     1    1
5      76    8     1    1
6      93   10     1    1
7     106   12     1    1
8     125   14     1    1
9     149   16     1    1
10    171   18     1    1
11    199   20     1    1
12    205   21     1    1

# 시간의 경과에 따른 닭들의 몸무게를 단순회귀분석을 해본다.
> lm(weight~Time, data=Chick)

Call:
lm(formula = weight ~ Time, data = Chick)
Coefficients:
(Intercept)         Time
     24.465        7.988

# 여기서 회기식은 weight=7.988Time+24.465로 추정된다.
> summary(lm(weight~Time, data=Chick))

Call:
lm(formula = weight ~ Time, data = Chick)

Residuals:
      Min       1Q   Median       3Q      Max
 -14.3202 -11.3081  -0.3444  11.1162  17.5346

 Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  24.4654     6.7279   3.636  0.00456 ** 
Time          7.9879     0.5236  15.255 2.97e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 12.29 on 10 degrees of freedom
Multiple R-squared:  0.9588,	Adjusted R-squared:  0.9547 
F-statistic: 232.7 on 1 and 10 DF,  p-value: 2.974e-08

<해석>

F통계량 = 232.7

P값 = 2.2974e-08

-> 유의수준 5%이하에서 추전된 회귀모형이 통계적으로 매우 유의함

(수정된)결정계수 = 0.9547

-> 결정계수가 매우 높은 편으로 이 회귀식이 데이터의 95%정도로 설명하고 있다

회귀계수들의 p값 < 0.05

-> 회귀계수들의 추정치들이 통계적으로 유의하다

따라서 time에 대한 회귀계수가 7.99로 time이 1 증가할때 weight가 7.99만큼 증가한다고 해석할 수 있다

weight = 7.99*time + 24

 

2. 다중 선형 회귀분석

여러개의 독립변수(u,v,w)와 하나의 반응변수(y)생성하고, 이들 강에 선형관계가 있다고 생각

 

1) 후진제거법

> set.seed(2)
> u=runif(10,0, 11)
> v=runif (10, 11,20)
> 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
             y         u        v         w
1  -25.6647952  2.033705 15.97407 20.195064
2   -6.5562326  7.726114 13.15005 12.238937
3  -36.4858791  6.306590 17.84462 25.269786
4   12.4472764  1.848571 12.62738  5.364542
5    0.1638434 10.382233 14.64754 11.070895
6   -3.9124946 10.378225 18.68194 15.174424
7   26.6127780  1.420749 19.78759  5.328159
8   -3.9238295  9.167937 13.03243 11.354815
9  -53.0331805  5.148204 15.00328 28.916677
10  12.4387413  6.049821 11.67481  4.838788

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

Call:
lm(formula = y ~ u + v + w)

Coefficients:
(Intercept)            u            v            w
     3.0417       0.1232       1.9890      -2.9978
  
# 이 경우 회귀식은 y=3.0417+0.1232u+1.9890v-2.9978w로 추정된다.
> summary(m)

Call:
lm(formula = y ~ u + v + w)

Residuals:
       Min        1Q    Median        3Q       Max
 -0.188562 -0.058632 -0.002013  0.080024  0.143757

Coefficients:
             Estimate Std. Error  t value Pr(>|t|)
(Intercept)  3.041653   0.264808   11.486 2.62e-05 ***
u            0.123173   0.012841    9.592 7.34e-05 ***
v            1.989017   0.016586  119.923 2.27e-11 ***
w           -2.997816   0.005421 -552.981 2.36e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1303 on 6 degrees of freedom
Multiple R-squared:      1,   	Adjusted R-squared:      1
F-statistic: 1.038e+05 on 3 and 6 DF,  p-value: 1.564e-14

<해석>

F-통계량 = 1.038e+05

P-value = 1.564e-14

유의수준 5%하에서 추정된 회귀모형이 통계적으로 매우 유의하다결정계수도 모두 1로 이 회귀식이 데이터를 매우 잘 설명하고 있다회귀계수 u,v,w의 p-값들도 0.01보다 작으므로 회귀계수들의 추정히들이 통계적으로 유의미하다

-> y=3.0417 +0.1232u+1.9890v-2.9978w

 

최적회귀방정식

1. 후진제거법

Y를 반응변수로 하고 x1,x2,x3,x4,를 설명변수로 하는 선형회귀모형

 

> 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)
  X1 X2 X3 X4     Y
1  7 26  6 60  78.5
2  1 29 15 52  74.3
3 11 56  8 20 104.3
4 11 31  8 47  87.6
5  7 52  6 33  95.9
6 11 55  9 22 109.2

> a <- lm(Y~X1+X2+X3+X4, data=df)
> a

Call:
lm(formula = Y ~ X1 + X2 + X3 + X4, data = df)
Coefficients:
(Intercept)           X1           X2           X3           X4
    62.4054       1.5511       0.5102       0.1019      -0.1441

> summary(a)

Call:
lm(formula = Y ~ X1 + X2 + X3 + X4, data = df)

Residuals:
     Min      1Q  Median      3Q     Max
 -3.1750 -1.6709  0.2508  1.3783  3.9254 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  62.4054    70.0710   0.891   0.3991
X1            1.5511     0.7448   2.083   0.0708
X2            0.5102     0.7238   0.705   0.5009
X3            0.1019     0.7547   0.135   0.8959
X4           -0.1441     0.7091  -0.203   0.8441
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.446 on 8 degrees of freedom
Multiple R-squared:  0.9824,	Adjusted R-squared:  0.9736 
F-statistic: 111.5 on 4 and 8 DF,  p-value: 4.756e-07

 

<해석>y = 62.4054 + x1*1.5511 + x2*0.5102 + x3*0.1.19 + x4*(-0.1441)F통계량 = 111.5P값 = 4.745e-07유의수준 5%하에서 추정된 회귀모형이 매우 유의함 결정계수 = 0.9736 추정된 회귀식 데이터를 97% 적절하게 설명하고 있다설명변수의 p-value중 x3의 유의확률이 가장 높아 이들 중 가장 유의하지 않아 x3을 제가하고 다기 회귀분석을 하는 것이 바람직함

 

2)전진선택법

step(lm~

> step(lm(Y~1,data=df), scope=list(lower=~1, upper=~X1+X2+X3+X4), direction="forward")
Start:  AIC=71.44
Y ~ 1

       Df Sum of Sq     RSS    AIC
+ X4    1   1831.90  883.87 58.852
+ X2    1   1809.43  906.34 59.178
+ X1    1   1450.08 1265.69 63.519
+ X3    1    776.36 1939.40 69.067
<none>              2715.76 71.444

Step:  AIC=58.85
Y ~ X4

       Df Sum of Sq    RSS    AIC
+ X1    1    809.10  74.76 28.742
+ X3    1    708.13 175.74 39.853
<none>              883.87 58.852
+ X2    1     14.99 868.88 60.629

Step:  AIC=28.74
Y ~ X4 + X1

       Df Sum of Sq    RSS    AIC
+ X2    1    26.789 47.973 24.974
+ X3    1    23.926 50.836 25.728
<none>              74.762 28.742

Step:  AIC=24.97
Y ~ X4 + X1 + X2

       Df Sum of Sq    RSS    AIC
<none>              47.973 24.974
+ X3    1   0.10909 47.864 26.944

Call:
lm(formula = Y ~ X4 + X1 + X2, data = df)

Coefficients:
(Intercept)           X4           X1           X2
    71.6483      -0.2365       1.4519       0.4161

최종회귀식은 y = 71.648 + x4*(-0.2365) + X1*1.4519 + x2*0.4161

후진선택법과 다른 결과

 


주성분분석

> library(datasets)
> data(USArrests)
> summary(USArrests)
        Murder          Assault         UrbanPop          Rape       
Min.   : 0.800   Min.   : 45.0   Min.   :32.00   Min.   : 7.30   
1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50   1st Qu.:15.07   
Median : 7.250   Median :159.0   Median :66.00   Median :20.10   
Mean   : 7.788   Mean   :170.8   Mean   :65.54   Mean   :21.23   
3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75   3rd Qu.:26.18   
Max.   :17.400   Max.   :337.0   Max.   :91.00   Max.   :46.00  
> fit <- princomp(USArrests, cor = TRUE) # 주성분분석 함수 + 상관계수행렬(True)
> summary(fit)
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4
Standard deviation     1.5748783 0.9948694 0.5971291 0.41644938
Proportion of Variance 0.6200604 0.2474413 0.0891408 0.04335752
Cumulative Proportion  0.6200604 0.8675017 0.9566425 1.00000000
> loadings(fit)

Loadings:
         Comp.1 Comp.2 Comp.3 Comp.4
Murder    0.536  0.418  0.341  0.649
Assault   0.583  0.188  0.268 -0.743
UrbanPop  0.278 -0.873  0.378  0.134
Rape      0.543 -0.167 -0.818       
               Comp.1 Comp.2 Comp.3 Comp.4
SS loadings      1.00   1.00   1.00   1.00
Proportion Var   0.25   0.25   0.25   0.25
Cumulative Var   0.25   0.50   0.75   1.00
> plot(fit,type="lines")

 

주성분분석 함수 = princomp / cor = True -> 주성분분석을 공분산 행렬이 아닌 상관계수 행렬로 수행(true가 없어도 결과는 동일)

제1주성분과 제2주성분까지의 누적 분산비율은 대략 86.8%로 2개의 주성분 변수를 활용하여 전체 데이터의 86.8%를 설명할 수 있다

 

 

주성분분석의 시각화 -> 스크리그림(scree plot)

주성분의 분산 감소가 급격하게 줄어들어 주성분의 개수를 늘릴때 얻게되는 정보의 양이 상대적으로 미미한 지점에서 주성분의수를 정함

또는  총 분산의 비율이 70~90% 사이가 되는 주성분의 개수를 선택

> fit$scores
                    Comp.1      Comp.2      Comp.3       Comp.4
Alabama         0.98556588  1.13339238  0.44426879  0.156267145
Alaska          1.95013775  1.07321326 -2.04000333 -0.438583440
Arizona         1.76316354 -0.74595678 -0.05478082 -0.834652924
Arkansas       -0.14142029  1.11979678 -0.11457369 -0.182810896
...

> biplot(fit)

 

 

fit$scores는 각 관측치를 주성분들로 표현한 값

biplot은 관측치들을 첫번째와 두번째 주성분의 좌표에 그린 그림

첫번째 주성분 계산법 (Alabama X 0.98556588) + (Alaska X 1.95013775) + (Arizona X 1.76316354) + (Arkansas X -0.14142029)