20대 성장기/공부

논문 쓰는데 필요한 R 프로그래밍 코드 정리 : 기초, 정규화

방구석주희 2021. 11. 5. 14:45
728x90

1단계 데이터 수집

2단계 데이터 클린징(결측치 확인 등)

3단계 정규성 검정

4단계 정규성에 따른 변수 변환(변수를 정규분포를 하는 형태로 변환)

5단계 T-test, 카이스퀘어 검정

6단계 상관분석, 회귀분석


res <- read.csv("", header=T, sep=",")

#작업폴더지정
setwd("C://Users//ncufo//OneDrive//바탕 화면")

#현재작업폴더확인
getwd()

str(res)
#데이터세트의 구조 : 숫자형(number), 정수형(integer), 문자형(character), 요인형(factor), 논리형(TRUE/FULSE)

head(res, 3)
#데이터세트 res에서 3개의 데이터만 보려고 할 때

#변수의 평균값
mean(데이터세트$변수명)
mean(res$age)
#결측치가 있는 경우 제거
mean(res$age, na.rm=TRUE)

#표준편차
sd(res$age)

#히스토그램
hist(res$age)
plot(res$age)
boxplot(res$age)

#상관매트릭스

library(corrplot)

corrplot(res2, method="circle")
#데이터세트에서 원하는 데이터만 선택하고자 할 때 
res3 <- subset(res, res$age>=65)

예제)
res$HE_glu에서 결측치가 있는 변수를 제외하고 새로운 데이터세트를 만들어보기
res3<-subset(res, is.na(res$HE_glu)==FALSE)
#is.na(변수명)은 변수가 결측치(NA)면 TRUE값이 됨

#결측치 개수 확인
table(is.na(res$HE_glu)

#결측치 제거
na.omit(res)

#데이터세트에서 새로운 조건으로 데이터를 추가할 때
예제)
나이가 65세 이상이면 1, 미만이면 0인 age65인 변수를 만들어보기
res$age65 <- ifelse(res$age >=65, 1, 0)

#변수의 특성을 바꿀때
#숫자형으로 저장된 변수를 요인형으로 바꾸기, 데이터세트$변수명 <-as.factor(데이터세트$변수명)

#명목변수의 % 구하기
#res$sex변수를 명목변수로 바꾼다.
res$sex<- as.factor(res$sex)
c=table(res$sex)
prop.table(c)

 

 

*통계기법 선택하기*

1) 변수의 특성 파악하기

 

문제_고혈압진단 여부에 따른 수축기고혈압의 차이

1_고혈압진단 여부(독립변수, 명목변수), 수축기고혈압(종속변수, 연속변수)

 

2) 명목변수 개수 확인하기

2_고혈압진단여부의 명목변수는 2개(고혈압진단=예, 아니오)

 

3) 정규분포인지 비정규분포인지 확인하여 통계기법 선택

*명목변수는 정규성검정이 필요하지 않음

 

  종속변수
  변수의 특성 변수개수 연속변수 명목변수
독립변수 명목변수 2 정규분포 비정규분포 카이스퀘어검정
t-test Mann-Whitney U test
3 ANOVA Kruskal-Wallis test
연속변수   회귀분석/상관분석 로짓회귀분석

 

*정규화*

 

1) 정규성 검정 -> 정규분포 O -> t-test

2) 정규성 검정 -> 정규분포 X -> log변환, 1/변환, 루트변환 -> t-test

*재검정 했는데도 정규분포가 아니면 비모수 검정

 

#정규성검정

shapiro.test(res$age)p-value값이 <0.05이면 정규분포 X, 변환해서 재검정p-value값이 <0.05가 아니면 정규분포 O

 

*t-test는 모집단의 정보를 알지 못하면서 분산이 같을 것을 가정한 검정이기 때문에 분산이 같은지 검정해야 한다. 분산이 다르면 Welch's test 해서 비교1) 두 집단의 분산이 같은지 검정 : var.test()var.test(res$age~res$CKD)결과값이 p<0.05가 아니면 분산이 같다는 귀무가설을 기각할 수 없음. = 분산이 같음 t-test 진행 가능1-1) t-test 진행t.test(age~CKD, var.equal=TRUE, data=res)결과값이 p<0.05이 아니면 두 군의 평균값의 차이가 유의미하지 않다는 귀무가설을 기각하지 못함1-2) Welch's testt.test(age~CKD, data=res)

 

#비율비교대상 수가 10개 미만인 경우 fisher's exact test, 10개 이상이면 카이스퀘어 검정1) 대상 수가 10개 미만이면 fisher.test(명목변수, 명목변수)문제_성별에 따른 교육정도의 차이를 chisq.test를 통해 검증하고자 한다.chisq.test(res$incm, res$sex)

결과값이 p<0.05이면 성별에 따른 교육정도의 비율 차이가 있다고 판단한다.

 

#상관분석 : 연속변수 사이의 상관성 확인

#회귀계수 coef(lm)

#신뢰구간 exp(confint(lm))

 

#로지스틱회귀분석 : 종속면수가 명목변수(예.아니오)일 때 독립변수의 영향을 관찰

ex) 고혈압진단 여부(예.아니오)에 때한 체중(연속변수)의 영향 등

 

728x90