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)
'자격증 > ADSP' 카테고리의 다른 글
[ADSP] 오답노트: 3-4.통계분석 (0) | 2024.02.22 |
---|---|
[ADSP] 오답노트: 3-5.데이터마이닝 (0) | 2024.02.20 |
[ADSP] 오답노트: 3-1 데이터 분석 개요, 3-2 R프로그래밍 기초 (0) | 2024.02.20 |
[ADSP] 오답노트: 3-3.데이터마트 (0) | 2024.02.19 |
[ADSP]오답노트: 2. 데이터분석기획 (0) | 2024.02.19 |