4-8. Rmarkdown 카이제곱검정, 비모수검정 복습
Untitled
카이제곱 (독립성) 검정 3+1가지 방법
- 범주-범주 교차표를 이용한 연관성 확인
- COPD데이터로 sex별 DM(당뇨)의 연관성 확인
# 데이터 준비
df1 <- read.csv("week4/4주차_코드/COPD_Lung_Cancer.csv", header=T)
head(df1)
## PERSON_ID SEX DTH CTRB_PT_TYPE_CD BMI BP_LWST BLDS TOT_CHOLE HMG
## 1 10000065 1 0 8 25.73 90 112 177 12.2
## 2 10000183 1 0 9 22.77 100 105 177 15.7
## 3 10000269 1 0 8 24.54 70 76 156 13.1
## 4 10000471 1 0 1 21.63 100 70 228 14.0
## 5 10000788 2 0 7 25.65 54 113 199 12.1
## 6 10001096 2 0 3 19.84 60 137 182 12.0
## FMLY_CANCER_PATIEN_YN SMK_STAT_TYPE DRNK_HABIT EXERCI_FREQ lungC copd
## 1 1 1 1 1 0 0
## 2 1 1 5 1 0 1
## 3 1 1 1 1 1 1
## 4 NA 1 1 1 0 1
## 5 1 1 1 1 0 0
## 6 1 1 1 1 0 0
## Asthma DM Tub before_op_score after_op_score
## 1 0 1 0 44 52
## 2 1 1 0 44 53
## 3 0 1 1 37 60
## 4 0 1 0 50 44
## 5 1 1 0 31 43
## 6 0 0 0 34 49
# 방법1 : table( 칼럼인덱싱, 칼럼인덱싱 ) 을 chisq.test()에
chisq.test( table( df1$SEX, df1$DM )) # 0.8943
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(df1$SEX, df1$DM)
## X-squared = 0.017658, df = 1, p-value = 0.8943
# 방법2 : table없이 바로
chisq.test( df1$SEX, df1$DM ) # 0.8943
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: df1$SEX and df1$DM
## X-squared = 0.017658, df = 1, p-value = 0.8943
# 방법3 : xtabs( ~ 칼럼1+칼럼2, data= ) 를 summary()
x <- xtabs( ~ SEX + DM , data = df1 )
summary(x) #0.8412
## Call: xtabs(formula = ~SEX + DM, data = df1)
## Number of cases in table: 944
## Number of factors: 2
## Test for independence of all factors:
## Chisq = 0.04013, df = 1, p-value = 0.8412
# 방법4 : mytable() 칼럼순서 상관x
library(moonBook)
mytable( DM ~ SEX , data= df1) # 0.894
##
## Descriptive Statistics by 'DM'
## ____________________________________
## 0 1 p
## (N=375) (N=569)
## ------------------------------------
## SEX 0.894
## - 1 158 (42.1%) 236 (41.5%)
## - 2 217 (57.9%) 333 (58.5%)
## ------------------------------------
비모수검정 2집단(mann-whitney, wilcoxon rank-sum) 3집단(kruskal wallis)
- COPD 중 100개 행만 뽑아 정규분포를 안이루도록 만든다음
- sex(2집단)별 BMI 평균차이 검정
- SMK_STAT_TYPE(3집단)별 BMI 평균차이 검정
# 데이터 준비
df2 <- df1[1:100,]
head(df2)
## PERSON_ID SEX DTH CTRB_PT_TYPE_CD BMI BP_LWST BLDS TOT_CHOLE HMG
## 1 10000065 1 0 8 25.73 90 112 177 12.2
## 2 10000183 1 0 9 22.77 100 105 177 15.7
## 3 10000269 1 0 8 24.54 70 76 156 13.1
## 4 10000471 1 0 1 21.63 100 70 228 14.0
## 5 10000788 2 0 7 25.65 54 113 199 12.1
## 6 10001096 2 0 3 19.84 60 137 182 12.0
## FMLY_CANCER_PATIEN_YN SMK_STAT_TYPE DRNK_HABIT EXERCI_FREQ lungC copd
## 1 1 1 1 1 0 0
## 2 1 1 5 1 0 1
## 3 1 1 1 1 1 1
## 4 NA 1 1 1 0 1
## 5 1 1 1 1 0 0
## 6 1 1 1 1 0 0
## Asthma DM Tub before_op_score after_op_score
## 1 0 1 0 44 52
## 2 1 1 0 44 53
## 3 0 1 1 37 60
## 4 0 1 0 50 44
## 5 1 1 0 31 43
## 6 0 0 0 34 49
# mann-whitney = wilcoxon rank sum test
# cf) wilcoxon signed rank -> signed = 절대값 = 차이를 이용 = 대응표본t-test의 비모수
wilcox.test( BMI ~ SEX, data = df2) # 0.6791
##
## Wilcoxon rank sum test with continuity correction
##
## data: BMI by SEX
## W = 1189.5, p-value = 0.6791
## alternative hypothesis: true location shift is not equal to 0
wilcox.test( BMI ~ SEX, data = df2, exact = F) # 만약 동률이 생길 경우, exact = F 옵션줄 것
##
## Wilcoxon rank sum test with continuity correction
##
## data: BMI by SEX
## W = 1189.5, p-value = 0.6791
## alternative hypothesis: true location shift is not equal to 0
# kruskal - wallis test
kruskal.test( BMI ~ SMK_STAT_TYPE, data = df2) #0.1803
##
## Kruskal-Wallis rank sum test
##
## data: BMI by SMK_STAT_TYPE
## Kruskal-Wallis chi-squared = 3.4263, df = 2, p-value = 0.1803
'한의대 생활 > └ 통계에 대한 나의 정리' 카테고리의 다른 글
5-1. Tidyverse + Dplyr + Tidyr + Rmarkdown (0) | 2019.02.25 |
---|---|
5. Tableu public 사용해보기 (0) | 2019.02.22 |
4-7. Rmarkdown 비모수검정 3가지 + mytable (0) | 2019.02.22 |
4-6. Rmarkdown 카이제곱 test, Fisher's Exact test, trend test (0) | 2019.02.22 |
4-7. 2집단(t-test), 3집단(ANOVA) : 범주별 숫자형의 평균차이의 비모수 통계 분석 (9) | 2019.02.21 |
4-7. Rmarkdown 비모수검정 3가지 + mytable
Untitled
비모수 검정(Non-parametic)
- 정규성을 만족하지 않거나 데이터가 작을 때 사용한다.
1. Mann-Whitney test (or Wilcoxon rank-sum test)
- 독립표본 t-test (1범주-2집단에 대한 숫자형의 평균차이)에 대한 비모수적 검정
- 2가지 방법이 있다.
# 데이터 준비
library(moonBook)
data(acs)
acs2 <- acs[1:100, ]
head(acs2)
## age sex cardiogenicShock entry Dx EF height weight
## 1 62 Male No Femoral STEMI 18.0 168 72
## 2 78 Female No Femoral STEMI 18.4 148 48
## 3 76 Female Yes Femoral STEMI 20.0 NA NA
## 4 89 Female No Femoral STEMI 21.8 165 50
## 5 56 Male No Radial NSTEMI 21.8 162 64
## 6 73 Female No Radial Unstable Angina 22.0 153 59
## BMI obesity TC LDLC HDLC TG DM HBP smoking
## 1 25.51020 Yes 215 154 35 155 Yes No Smoker
## 2 21.91381 No NA NA NA 166 No Yes Never
## 3 NA No NA NA NA NA No Yes Never
## 4 18.36547 No 121 73 20 89 No No Never
## 5 24.38653 No 195 151 36 63 Yes Yes Smoker
## 6 25.20398 Yes 184 112 38 137 Yes Yes Never
# 방법1 : mann-whitney test 1
# - 물결로 칼럼명만 입력 & exact옵션주기 (a logical indicating whether an exact p-value should be computed.)
# **** exact 옵션 - 순서대로 나열 시, 같은 값이 존재하면 순서를 정하는데 문제가 생겨 디폴트인 exact test로 p-value를 구하지 못하고, 대신 정규 분포에 근사 시켜 p-value를 구한다. Exact=FALSE를 옵션으로 추가하여 정규분포에 근사 시키는 방법을 선택하면 디폴트인 exact test를 시도하지 않으므로 Warning을 없앨 수 있다.
wilcox.test( BMI ~ sex, data = acs2, exact = FALSE )
##
## Wilcoxon rank sum test with continuity correction
##
## data: BMI by sex
## W = 946, p-value = 0.6327
## alternative hypothesis: true location shift is not equal to 0
# 방법2 : mann-whitney test 2
# - 직접 2개 집단(class, 수준)을 인덱싱하여 따로따로 데이터를 만든 뒤, 넣어주기
# - 이 경우는 exact = False옵션을 안주어도 된다.
male_bmi <- acs2[ acs2$sex == "Male", c("BMI")]
female_bmi <- acs2[ acs2$sex == "Female", c("BMI")]
wilcox.test(male_bmi, female_bmi)
##
## Wilcoxon rank sum test with continuity correction
##
## data: male_bmi and female_bmi
## W = 1069, p-value = 0.6327
## alternative hypothesis: true location shift is not equal to 0
2. wilcoxon signed rank test
- 대응표본 t-test(실험 전/후 데이터의 평균차이)에 대한 비모수적 검정
# 데이터 준비( 실험 전/후 -> 데이터 개수 같아야함 )
x1 <- c(51.4, 52.0, 45.5, 54.5, 52.3, 50.9, 52.7, 50.3, 53.8, 53.1)
x2 <- c(50.1, 51.5, 45.9, 53.1, 51.8, 50.3, 52.0, 49.9, 52.5, 53.0)
# wilcoxon signed rank test : paired t-test의 비모수 검정
wilcox.test(x1, x2,
alternative = c("greater"), paired = TRUE, conf.level = 0.95, # 95% 신뢰구간 -> 5%유의수준
exact = F) # 오류나서 내가 추가해준 것
##
## Wilcoxon signed rank test with continuity correction
##
## data: x1 and x2
## V = 52.5, p-value = 0.006172
## alternative hypothesis: true location shift is greater than 0
3. kruskal wallis test 과 사후분ㅅ
- 1way ANOVA의 비모수 검정
# 데이터 준비
head(acs2)
## age sex cardiogenicShock entry Dx EF height weight
## 1 62 Male No Femoral STEMI 18.0 168 72
## 2 78 Female No Femoral STEMI 18.4 148 48
## 3 76 Female Yes Femoral STEMI 20.0 NA NA
## 4 89 Female No Femoral STEMI 21.8 165 50
## 5 56 Male No Radial NSTEMI 21.8 162 64
## 6 73 Female No Radial Unstable Angina 22.0 153 59
## BMI obesity TC LDLC HDLC TG DM HBP smoking
## 1 25.51020 Yes 215 154 35 155 Yes No Smoker
## 2 21.91381 No NA NA NA 166 No Yes Never
## 3 NA No NA NA NA NA No Yes Never
## 4 18.36547 No 121 73 20 89 No No Never
## 5 24.38653 No 195 151 36 63 Yes Yes Smoker
## 6 25.20398 Yes 184 112 38 137 Yes Yes Never
# 1. kruskal wallis test
kruskal.test( weight ~ factor( smoking ), data=acs2)
##
## Kruskal-Wallis rank sum test
##
## data: weight by factor(smoking)
## Kruskal-Wallis chi-squared = 11.699, df = 2, p-value = 0.002882
# 2. 사후분석
# - kruskal wallis test에서 3집단 중 적어도 하나의 집단이 차이가 있다고 할 경우
# 2_1. PMCMR 패키지 : kruskal willis test -> Tukey
# install.packages("PMCMR")
library(PMCMR)
## PMCMR is superseded by PMCMRplus and will be no longer maintained. You may wish to install PMCMRplus instead.
posthoc.kruskal.nemenyi.test(x=acs2$weight, g=as.factor(acs2$smoking), method="Tukey")
## Warning in posthoc.kruskal.nemenyi.test.default(x = acs2$weight, g =
## as.factor(acs2$smoking), : Ties are present, p-values are not corrected.
##
## Pairwise comparisons using Tukey and Kramer (Nemenyi) test
## with Tukey-Dist approximation for independent samples
##
## data: acs2$weight and as.factor(acs2$smoking)
##
## Ex-smoker Never
## Never 0.2784 -
## Smoker 0.3899 0.0019
##
## P value adjustment method: none
# install.packages("PMCMRplus") # 사용할려니 이것으로 깔아라고함( PMCMR은 더이상 지원 안할 예정)
# library(PMCMRplus)
# 2_2. n(on)par(ametic) comp(arison) 패키지 - mctp()함수
# 마찬가지로 Tukey로 하는 것 같다.
# - Estimation Method: Global Pseudo ranks
# - Type of Contrast : Tukey
# install.packages("nparcomp")
require(nparcomp)
## Loading required package: nparcomp
## Loading required package: multcomp
## Loading required package: mvtnorm
## Loading required package: survival
## Loading required package: TH.data
## Loading required package: MASS
##
## Attaching package: 'TH.data'
## The following object is masked from 'package:MASS':
##
## geyser
result=mctp(weight~smoking, data=acs2)
##
## #----------------Nonparametric Multiple Comparisons for relative effects---------------#
##
## - Alternative Hypothesis: True differences of relative effects are less or equal than 0
## - Estimation Method: Global Pseudo Ranks
## - Type of Contrast : Tukey
## - Confidence Level: 95 %
## - Method = Fisher with 33 DF
##
## #--------------------------------------------------------------------------------------#
##
summary(result) # Analysis 탭으로 확인
##
## #----------------Nonparametric Multiple Comparisons for relative effects---------------#
##
## - Alternative Hypothesis: True differences of relative effects are less or equal than 0
## - Estimation Method: Global Pseudo ranks
## - Type of Contrast : Tukey
## - Confidence Level: 95 %
## - Method = Fisher with 33 DF
##
## #--------------------------------------------------------------------------------------#
##
## #----Data Info-------------------------------------------------------------------------#
## Sample Size Effect Lower Upper
## Ex-smoker Ex-smoker 20 0.5054632 0.4243261 0.5863135
## Never Never 39 0.3836336 0.3237192 0.4473026
## Smoker Smoker 37 0.6109032 0.5455423 0.6725069
##
## #----Contrast--------------------------------------------------------------------------#
## Ex-smoker Never Smoker
## Never - Ex-smoker -1 1 0
## Smoker - Ex-smoker -1 0 1
## Smoker - Never 0 -1 1
##
## #----Analysis--------------------------------------------------------------------------#
## Estimator Lower Upper Statistic p.Value
## Never - Ex-smoker -0.122 -0.309 0.074 -1.522 0.289976447
## Smoker - Ex-smoker 0.105 -0.093 0.296 1.296 0.403133946
## Smoker - Never 0.227 0.081 0.364 3.767 0.001777051
##
## #----Overall---------------------------------------------------------------------------#
## Quantile p.Value
## 1 2.443167 0.001777051
##
## #--------------------------------------------------------------------------------------#
mytable()로 한다면? (사후분석은x)
- method = 1 : 정규분포 가정 모수적 -> 2개 평균 +- 표준편차 제시하는 t-test
- method = 2 : 비모수적인 통계방법 가정 -> 중앙값 [ 1, 3] 제시하는 비모수 2개 -> wilcox(대응표본), mann(독립표본)
- method = 3 : 실제로 잔차의 정규성 검정(샤피로) 등등 해놓고 나서 알아서 판단하게 한다
head(acs2)
## age sex cardiogenicShock entry Dx EF height weight
## 1 62 Male No Femoral STEMI 18.0 168 72
## 2 78 Female No Femoral STEMI 18.4 148 48
## 3 76 Female Yes Femoral STEMI 20.0 NA NA
## 4 89 Female No Femoral STEMI 21.8 165 50
## 5 56 Male No Radial NSTEMI 21.8 162 64
## 6 73 Female No Radial Unstable Angina 22.0 153 59
## BMI obesity TC LDLC HDLC TG DM HBP smoking
## 1 25.51020 Yes 215 154 35 155 Yes No Smoker
## 2 21.91381 No NA NA NA 166 No Yes Never
## 3 NA No NA NA NA NA No Yes Never
## 4 18.36547 No 121 73 20 89 No No Never
## 5 24.38653 No 195 151 36 63 Yes Yes Smoker
## 6 25.20398 Yes 184 112 38 137 Yes Yes Never
library(moonBook)
# method = 2 : 강제로 비모수적 검정
# - 2집단 mann-whitney(독립표본), wilcox(대응표본), 3집단 kruskal - willis test
mytable(smoking ~ weight, data = acs2, method = 2) # 0.003 - 직접수행한것에 반올림만 하면 똑같다!
##
## Descriptive Statistics by 'smoking'
## ________________________________________________________________
## Ex-smoker Never Smoker p
## (N=20) (N=42) (N=38)
## ----------------------------------------------------------------
## weight 60.0 [54.0;69.5] 59.0 [50.0;64.0] 65.0 [60.0;71.0] 0.003
## ----------------------------------------------------------------
# - 직접 kruksal
kruskal.test( weight ~ factor( smoking ), data=acs2) # 0.002882
##
## Kruskal-Wallis rank sum test
##
## data: weight by factor(smoking)
## Kruskal-Wallis chi-squared = 11.699, df = 2, p-value = 0.002882
# method = 3 : 잔차의 정규성 검정을 통해 판단후 모수적or비모수적 검정 ( 2집단 : t-test or mann/wilcoxon ) (3집단 : anova or kruskal )
mytable(smoking ~ weight, data = acs2, method = 3) # 직접 모수/비모수인지 잔차로 정규성을 검정한 뒤 -> 그에 따라 검정 -> 평균+-표준편차면 정규성O 모수적 / 중앙값[1Q, 3Q]면 정규성X 비모수적
##
## Descriptive Statistics by 'smoking'
## _________________________________________________
## Ex-smoker Never Smoker p
## (N=20) (N=42) (N=38)
## -------------------------------------------------
## weight 62.6 ± 10.2 57.7 ± 9.0 66.0 ± 9.7 0.001
## -------------------------------------------------
'한의대 생활 > └ 통계에 대한 나의 정리' 카테고리의 다른 글
5. Tableu public 사용해보기 (0) | 2019.02.22 |
---|---|
4-8. Rmarkdown 카이제곱검정, 비모수검정 복습 (0) | 2019.02.22 |
4-6. Rmarkdown 카이제곱 test, Fisher's Exact test, trend test (0) | 2019.02.22 |
4-7. 2집단(t-test), 3집단(ANOVA) : 범주별 숫자형의 평균차이의 비모수 통계 분석 (9) | 2019.02.21 |
4-6. 범주형-범주형의 빈도에 대한 독립성(연관성) 검정(카이제곱, Exact, trend test) (1) | 2019.02.21 |
4-6. Rmarkdown 카이제곱 test, Fisher's Exact test, trend test
Untitled
범주-범주의 교차표(contingency table) 만드는 2가지 방법
- table()
- descr패키지의 CrossTable()
# 데이터 준비
library(moonBook)
data(acs)
# 1. table()
table(acs$sex)
##
## Female Male
## 287 570
table(acs$sex, acs$obesity)
##
## No Yes
## Female 194 93
## Male 373 197
# 2. descr패키지-CrossTable
# install.packages("descr")
library(descr)
a <- CrossTable(acs$sex, acs$obesity) # 빈도 뿐만 아니라 비율도 보여준다.
a
## Cell Contents
## |-------------------------|
## | N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
## ================================
## acs$obesity
## acs$sex No Yes Total
## --------------------------------
## Female 194 93 287
## 0.089 0.175
## 0.676 0.324 0.335
## 0.342 0.321
## 0.226 0.109
## --------------------------------
## Male 373 197 570
## 0.045 0.088
## 0.654 0.346 0.665
## 0.658 0.679
## 0.435 0.230
## --------------------------------
## Total 567 290 857
## 0.662 0.338
## ================================
카이제곱 검정 - 관측값과 특정한 확률(기존의 기대값)와의 적합도 검정
- H0 : 관측값과 기대값이 동일하다 ( chisq.test ( 범주별 빈도, p = 기대값 ))
- 동전의 앞면/뒷면의 확률은 1/2인데, 관측결과 90/200, 110/200 이 나왔다면
- 그게 적합하게 나온 건지 확인하는 것
# 1. 관측값
obs <- c(19, 41, 40) # 19 / 전체 수 로 확률계산이 내부에서 될 것이고, 기대값과 비교할 듯..
# 2. 특정한 확률(기대값)
null.probs <- c(2/10, 3/10, 5/10)
# 3. 적합도 검정
chisq.test(obs, p = null.probs)
##
## Chi-squared test for given probabilities
##
## data: obs
## X-squared = 6.0833, df = 2, p-value = 0.04776
#### acs데이터로 해보기
# 1. table()로 범주의 빈도를 관측값으로 가져오기
smk_type <- table(acs$smoking) # 범주1개를 table()을 이용하여, 범주별 빈도를 변수에 담음
smk_type
##
## Ex-smoker Never Smoker
## 204 332 321
# 2. 기대값(특정확률)은 직접 변수에 입력해주기 (집단의 수만큼)
smk_type_prob <- c(0.3, 0.35, 0.35)
# 3. 관측값(범주별 빈도) + 기대값으로 카이제곱 적합도 검정
chisq.test( smk_type, p = smk_type_prob)
##
## Chi-squared test for given probabilities
##
## data: smk_type
## X-squared = 15.869, df = 2, p-value = 0.0003582
카이제곱 검정(Chisq test) - 2개 범주 독립성 검정의 3가지 방법대
- chisq.test( 칼럼인덱싱, 칼럼인덱싱 )
- H0 : 두 범주 X, Y는 독립이다.
- 범주-범주의 교차표를 바탕으로 2개의 범주의 연관성(독립성)검정
- X-squared : 카이제곱 검정통계량 -> 교차표상 각 cell의 ( (x-E)^2 / E)를 구해서 다 더한 것
# 1. 교차표(table) 생성 후 검정
table( acs$sex, acs$obesity )
##
## No Yes
## Female 194 93
## Male 373 197
chisq.test(table( acs$sex, acs$obesity ))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(acs$sex, acs$obesity)
## X-squared = 0.30627, df = 1, p-value = 0.58
# 2. 바로 검정
chisq.test(acs$sex, acs$obesity)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: acs$sex and acs$obesity
## X-squared = 0.30627, df = 1, p-value = 0.58
# 3. xtabs(교차표) & summary로 검정
xtabs( ~ sex + obesity, data = acs )
## obesity
## sex No Yes
## Female 194 93
## Male 373 197
summary( xtabs( ~ sex + obesity, data = acs ) )
## Call: xtabs(formula = ~sex + obesity, data = acs)
## Number of cases in table: 857
## Number of factors: 2
## Test for independence of all factors:
## Chisq = 0.3968, df = 1, p-value = 0.5288
카이제곱 검정 다중비교 - 범주-범주이나, 독립변수의 집단이 3개 이상이어서 nC2로 -> 종속변수(2집단)에 독립인지 아닌지 본다.
- fifer 패키지의 chisq.post.hoc( table() )
# 깃허브로 설치
# library(devtools)
# install_github("cran/fifer")
# 다중검정 in 3x3
library(fifer)
## Loading required package: MASS
table( acs$smoking, acs$Dx )
##
## NSTEMI STEMI Unstable Angina
## Ex-smoker 42 66 96
## Never 50 97 185
## Smoker 61 141 119
chisq.post.hoc( table( acs$smoking, acs$Dx ) )
## Adjusted p-values used the fdr method.
## comparison raw.p adj.p
## 1 Ex-smoker vs. Never 0.1112 0.1112
## 2 Ex-smoker vs. Smoker 0.0233 0.0350
## 3 Never vs. Smoker 0.0000 0.0000
chisq.post.hoc( table( acs$Dx, acs$smoking ) )
## Adjusted p-values used the fdr method.
## comparison raw.p adj.p
## 1 NSTEMI vs. STEMI 0.2964 0.2964
## 2 NSTEMI vs. Unstable Angina 0.0114 0.0172
## 3 STEMI vs. Unstable Angina 0.0000 0.0000
Fisher’s exact Test
- 범주-범주의 교차표에서 각 cell의 Expected(기대값)이 5가 안되는 것이 25%이상(1/4이상)시 사용
# 교차표
table(mtcars$carb, mtcars$cyl)
##
## 4 6 8
## 1 5 2 0
## 2 6 0 4
## 3 0 0 3
## 4 0 4 6
## 6 0 1 0
## 8 0 0 1
# 카이검정제곱 -> 카이제곱 approximation은 정확하지 않을수도 있습니다 -> Fisher로!
chisq.test(table(mtcars$carb, mtcars$cyl))
## Warning in chisq.test(table(mtcars$carb, mtcars$cyl)): Chi-squared
## approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: table(mtcars$carb, mtcars$cyl)
## X-squared = 24.389, df = 10, p-value = 0.006632
# fisher's exact test
fisher.test(mtcars$carb, mtcars$cyl)
##
## Fisher's Exact Test for Count Data
##
## data: mtcars$carb and mtcars$cyl
## p-value = 0.0003345
## alternative hypothesis: two.sided
Trend test
- 순서를 가진 3집단이상의 범주(독립변수)에 대해 종속변수(2집단의 범주)가
- H0 : 비율이 동일하다(일정하다)
- H1 : 증가/감소 추세가 있다
# 1. trend-test 기본
# 독립변수가 열 / 종속변수의 2개 집단이 행으로 나열된 교차표를 생각하자.
# 독립변수의 집단이 3개라고 가정 -> 3열
# 종속변수의 집단 2개 -> 2행
prop.trend.test( c(15, 10, 30), # 종속변수 집단1
c(35, 22, 44)) # 종속변수 집단2
##
## Chi-squared Test for Trend in Proportions
##
## data: c(15, 10, 30) out of c(35, 22, 44) ,
## using scores: 1 2 3
## X-squared = 5.2588, df = 1, p-value = 0.02184
# 2. DescTools 패키지 - CochranArmitageTest()
# install.packages("DescTools")
library("DescTools")
# 데이터(matrix) 준비 2행 3열(독립변수 집단개수 = 열)
test <- matrix(c(2372,1859,2373, 3065,2837,3065), byrow=TRUE, nrow=2)
# Desc( test )
# trend test
CochranArmitageTest(test)
##
## Cochran-Armitage test for trend
##
## data: test
## Z = 0.011174, dim = 3, p-value = 0.9911
## alternative hypothesis: two.sided
'한의대 생활 > └ 통계에 대한 나의 정리' 카테고리의 다른 글
4-8. Rmarkdown 카이제곱검정, 비모수검정 복습 (0) | 2019.02.22 |
---|---|
4-7. Rmarkdown 비모수검정 3가지 + mytable (0) | 2019.02.22 |
4-7. 2집단(t-test), 3집단(ANOVA) : 범주별 숫자형의 평균차이의 비모수 통계 분석 (9) | 2019.02.21 |
4-6. 범주형-범주형의 빈도에 대한 독립성(연관성) 검정(카이제곱, Exact, trend test) (1) | 2019.02.21 |
4-5. 상관관계(계수, 산점도), t-test, anova 간단 복습 (0) | 2019.02.21 |
02. 22 학부연구생인턴 프로그램 수료식
5명의 발표자가 있었고, 나는 해당사항이 없었다.
나는 거의 BioInformatics에 필요한 기초 자료 학습에 집중하였고, 나만의 분석라이브러리도 만들었다. 또한, 민감한 의료데이터의 샘플을 받아 처리과정도 살펴보았다.
어느 인턴들보다 많은 학습을 했다고 자부하고, 교수님 & 연구실분들에게 크게 감사하고 있다.특히 논문에 사용되는 통계기법들을 학습하고 직접 r로 구현해본 것.
내 논문실험에 직접 대입해본 것
데이터를 보는 눈이 생긴 것
sql을 학습해본 것
등등 이다.
발표에 당선된 연구들은 거의다 해당 연구실의 대학원생들이 진행하던 연구를 그대로 받아온 것 같다. Figure나 연구결과들은 단기간(인턴기간)동안 나올 수 있는 결과물이 아니었다..
나는 직접 계획하고 실험하여 머신러닝 딥러닝 연구를 한의학에 적용하였지만, 의과학과 연구발표와는 거리가 있으므로 크게 발표나 수상에 염려를 두지 않았다.
하지만, 연구실마다 다양한 발표가 있었고, 그분들은 직접 실험하는데 보조를 했을 것이다.
나는 수상은 못했지만, 경험하지 못했고, 앞으로도 경험할 수 없는 것들을 얻고 간다!
부상으로 서울대 마크의 독서대를 받았다!
'한의대 생활 > 본4 - SNUBI 인턴생활' 카테고리의 다른 글
02. 19 분석 피드백 (0) | 2019.02.20 |
---|---|
02. 07 새로운 의료데이터 받기 (0) | 2019.02.09 |
02. 01 첫 cdm 스터디 (0) | 2019.02.01 |
01. 29 식권 대량구매 (0) | 2019.01.30 |
01. 24 Pandas세미나 듣고옴 (0) | 2019.01.24 |
4-7. 2집단(t-test), 3집단(ANOVA) : 범주별 숫자형의 평균차이의 비모수 통계 분석
비모수 통계 분석 ( Non parametic )
모집단의 분포가 정규분포가 아님
-> 표본은 도저히 정규분포를 가정 불가능- 표본의 수가
n < 10
으로 도저히 정규분포가 될 수 없는 경우 10 <= n <= 30
이나 but정규성 검정(shapiro test)
를 통과 못한 경우순서를 가진 경우
모수
: 모평균, 모표준편차, 모분산 -> 현실적으로는 추출된 표본의 평균,표준편차,분산으로 -> 모집단의 모수들을 추정
모수 검정
: 정규성=모수적 특성=정규분포를 따르니, 서로 다른집단이라도 정규성을 이용하여 평균차이로 집단의 차이
를 밝힌다. 표본이 정규성을 만족한다면, 모집단도 정규분포 -> 표본 집단들의 평균차이 = 모집단들의 평균차이 = 모집단들이 차이난다
비모수 검정
: 실제 표본들로 만들어진 평균이 아니라 표본들을 나열한 뒤, 부호,절대값(signed)이나 순위(rank)를 이용해서 검정
한다. 대신 검졍력은 모수적 방법들에 비해 떨어진다.
제시 통계량
: 모수 검정시에는 평균 +- 표준편차
을 제시, 비모수 검정시에는 중앙값 + [1QR, 3QR]
을 제시
cf)
비모수 통계 분석의 종류
1~2집단에 대한 숫자형의 평균차이
대응표본 t-test
->Wilcoxon signed rank test
독립표본 t-test
->Mann-Whitney test or Wilcoxon rank-sum test
3집단의 숫자형의 평균차이(요인1개)
one way ANOVA
->Kruskal-Wallis test
1. Wilcoxon signed rank test ( 대응표본 t-test의 비모수 검정 )
H0 : before와 after의 크기가 같다.
- 짝지어전 실험 전/후 자료를 빼서
diff
를 구한다. - diff에
절대값(signed)
를 취한 뒤,크기를 내림차순(rank)
나열한다 동률 처리
로서 절대값 diff값이 같은 애들은 순서를 더해서 평균을 준다.- 예를들어, 1 -1 -> rank 1, 2 -> rank 1.5, 1.5
- 절대값을 취하기전의 부호끼리 그 순위들을 다 더한다(
diff순위의 부호별 합
).- diff가 양이었던 애들의 순위들 합 vs 음이었던 애들의 순위들 합
- 양의 순위합과 음의 순위합을 비교하여 크기 차이가 있는지 검정(자세한 내용 확인필요)
2. Mann-Whitney test ( 독립표본 t-test의 비모수 검정 )
Wilcoxon rank-sum test라고도 하는 것 같다.
H0 : 두군의 크기가 같다
- 독립된
2집단의 자료들을 집단 관계없이 모두 섞는다
(n수 늘리는 작업) 내림차순으로 정렬하여 순위(rank)
동률 처리
섞기전의 집단별로 순위들의 합(rank-sum)
을 구한다- 집단별로 순위합을 비교하여 크기 차이가 있는지 검정
3. Kruskal-wallis test( one way ANOVA의 비모수 검정 )
H0 : 세군의 평균이 모두 같다
3집단의 자료들을 집단과 관계없이 모두 섞는다.
내림차순으로 정렬한다.
동률처리는 더해서 평균
다시 집단별 순위합의
평균
비모수라도 사후검정이 가능
하다.
'한의대 생활 > └ 통계에 대한 나의 정리' 카테고리의 다른 글
4-7. Rmarkdown 비모수검정 3가지 + mytable (0) | 2019.02.22 |
---|---|
4-6. Rmarkdown 카이제곱 test, Fisher's Exact test, trend test (0) | 2019.02.22 |
4-6. 범주형-범주형의 빈도에 대한 독립성(연관성) 검정(카이제곱, Exact, trend test) (1) | 2019.02.21 |
4-5. 상관관계(계수, 산점도), t-test, anova 간단 복습 (0) | 2019.02.21 |
4-4. Rmarkdown 칼럼명변경 +range() + 사용자정의함수로 scaling (0) | 2019.02.21 |