이번 게시글에선 주어진 txt파일을 분석해보겠습니다.
3개의 txt파일에 대한 정보입니다.
## ex1.txt
# 대상자 번호 pid
# 당뇨측정시점 redcap_event_name
# 당화혈색소 HbA1c
# HbA1c(당화혈색소) ≥ 6.5% : 당뇨 정의
## ex2.txt
# 체중_대상자 번호 BW_myhealth_id
# 체중_측정 일시 BW_date_measured
# 체중_측정값 BW_value
## ex3.txt
# 대상자 번호 pid
# 대상자 나이 age
# 대상자 성별 sex
1. 데이터 불러오기
input1 = read.table("exam302_1.txt", header=T, sep="\t")
input2 = read.table("exam302_2.txt", header=T, sep="\t")
input3 = read.table("exam302_3.txt", header=T, sep="\t")
3개의 파일을 각각 다른 변수에 할당합니다.
2. 데이터 전처리
input1 = input1[,c("pid","hba1c")]
input2 = input2[,c("pid","BW_value")]
input3 = input3[,c("pid","age")]
분석에 필요한 변수만 추출합니다.
data = merge(input3,input1,by="pid")
data = merge(data,input2,by="pid")
대상자번호(pid) 기준으로 하나의 테이블로 합칩니다.
data = data[data$"BW_value"<300 & data$"BW_value">0,]
체중이 비정상정으로 크거나 0인 행을 제거합니다.
data = na.omit(data)
결측값을 제거합니다.
mainData = data[!duplicated(data$pid),]
mainData = aggregate(cbind(BW_value, hba1c) ~ pid+age, data, mean)
pid 기준, 중복되는 행들이 많습니다. 체중과 당화혈색소를 평균내서 중복을 제거합니다.
가설 1 : 당뇨인 군과 당뇨가 아닌 군의 평균체중은 차이가 있다.
1. 데이터 불러오기
ret1 = mainData
ret1$"hba1c" = ifelse(ret1$"hba1c">=6.5,1,0)
가설1의 결과를 담을 변수 ret1에 전처리된 데이터를 저장합니다.
또한, 당뇨여부를 판단해야하므로 hba1c 열을 당뇨여부를 표시하도록 변경합니다.
2. 정규분포성 검사
qqnorm(ret1$BW_value[ret1$BW_value=="0"])
qqnorm(ret1$BW_value[ret1$BW_value=="1"])
..
샘플이 5000개보다 많으므로, 정규분포를 가정합니다.
3. 분산 비교
var.test(BW_value~hba1c,ret1)
var.test 결과 p-value > 0.05 이므로, 분산이 같다는 결과를 얻습니다.
4. 평균 비교
t.test(BW_value~hba1c,ret1,var.equal=T)
t.test 결과 p-value > 0.05 이므로, 평균이 같다는 결과를 얻습니다.
5. 함의
당뇨 여부와 평균체중은 통계적으로 유의한 차이가 없다.
두 집단의 평균체중 차이는 약 0.2 정도이다.
가설 2 : 당뇨환자의 연령그룹이 (,40) [40,60) [60,) 라면, 그룹별 평균체중은 차이가 있다.
1. 데이터 불러오기
ret2 = mainData[mainData$"hba1c">=6.5,]
가설2의 결과를 담을 변수 ret2에 전처리된 데이터를 저장합니다.
2. 정규분포성 검사
샘플이 5000개보다 많으므로, 정규분포를 가정합니다.
3. 등분산 검사
bartlett.test(BW_value~factor(gp),ret2)
bartlett.test 결과 p-value < 0.05 이므로, 분산이 다르다는 결과를 얻었습니다.
4. 평균 비교
oneway.test(BW_value~factor(gp), ret2, var.equal=F)
oneway.test 결과 p-value < 0.05 이므로 평균이 다르다는 결과를 얻었습니다.
5. 사후검정
pairwise.t.test(ret2$BW_value, ret2$gp, p.adjust.method="bonferroni")
해당 테스트 결과, 2,3 그룹에서 통계적으로 유의한 차이가 보였습니다.
만약 등분산이었다면..
result = aov(BW_value ~ gp, ret2)
plot(TukeyHSD(result))
그래프에서, 0을 포함하지 않는다면 통계적으로 유의한 차이를 보인 것이다.
'R' 카테고리의 다른 글
R을 활용한 데이터 분석 (0) | 2024.12.08 |
---|---|
R을 활용한 공공데이터 분석 (6) | 2024.10.20 |