범주형데이터 분석

주울·2022년 12월 8일

데이터분석

목록 보기
7/7

https://bioinformaticsandme.tistory.com/296 참고

데이터 확인

install.packages("survival")
library(survival)

# 대장암에 영향을 주는 요인들
# 환자id
# status(반응변수): 대장암 재발 또는 사망인 경우 1, 병에 안걸린게 0
# obstruct: 종양에 의한 장의 폐쇄가 됐으면 1 ,아니면 0
# perfor:장의 천공
# adhere: 인접장기와 유착
str(colon)
View(colon)
library(descr)
b = colon

# 범주형 변수 빈도 확인
a1 = freq(b$status)
a1
View(a1)
a2 = freq(b$obstruct)
a2
View(a2)

범주형 변수를 빈도로 테이블 만들기

## 종속변수 status와 독립변수 obstruct간의 빈도 table 만들기

a3 = table(b$obstruct, b$status)
a3
View(a3)

만들어진 테이블을 열퍼센트,행퍼센트로 보기

install.packages("Rcmdr")
library(Rcmdr)
rowPercents(a3) #가로로 100퍼센트
colPercents(a3) #세로로 100퍼센트

CrossTable 만들기

## 종속변수 status와 독립변수 obstruct 간의 CrossTable 만들기

a4 = CrossTable(b$obstruct, b$status)
a4
#2번째는 row percent, 3번째는 col percent, 4번째는 전체퍼센트

## 열퍼센트로 해석(결과(status)를 알고 해석)
# 살아있는 경우에 장이 폐쇄된 경우가 17.4프로
# 재발,사망 경우에 장이 폐쇄된 경우가 21.4프로
# 두 퍼센트가 통계적으로 유의한지

## 로우퍼센트로 해석(영향을 주는 요인을 볼때는 이렇게 해석)
# 장이폐쇄된경우, 살아있는 사람들 43.3프로
# 장이 폐쇄된 경우, 죽은 사람들 54.7프로
# 두 퍼센트가 통계적으로 유의한지

chi-square test

## 종속변수 status와 독립변수 obstruct 간의 카이제곱테스트 해보기

chisq.test(b$obstruct,b$status)

O.R: odds ratio

## 장이 폐쇄된 경우가 폐쇄x인 경우보다 몇배 더 재발하거나 사망한다. 를 확인해보자.

freq(b$obstruct)
freq(b$perfor)
freq(b$adhere)
freq(b$nodes) #결측 36개
hist(b$nodes)
summary(b$nodes)
hist(b$nodes, breaks = seq(0,35,by=1))
freq(b$differ)
freq(b$extent)
freq(b$surg)

# chi-square test
CrossTable(b$obstruct, b$status)
chisq.test(b$obstruct,b$status)

CrossTable(b$perfor, b$status)
chisq.test(b$perfor,b$status) #p-value 0.05보다 큼. 영향주지 x

CrossTable(b$adhere, b$status)
chisq.test(b$adhere,b$status)

CrossTable(b$differ, b$status)
chisq.test(b$differ,b$status)

b$nodes_gr = ifelse(b$nodes >2,1,0)
CrossTable(b$nodes_gr, b$status)
chisq.test(b$nodes_gr,b$status)

####logistic regression Model
#GLM
result = glm(status~sex + age + obstruct + perfor+adhere + nodes + differ + extent+ surg, family=binomial,data=b)
summary(result)

dim(b)
data1 = na.omit(colon) #결측 처리
dim(data1)

result = glm(status~sex + age + obstruct + perfor+adhere + nodes + differ + extent+ surg, family=binomial,data=data1)
summary(result) # 전체 indep가 다 들어갔을 때 AIC: 2286.7 
# age,sex는 유의성 없음. obstruct는 유의성 사라짐. 

#differ, extent => gr
result = glm(status~sex + age + obstruct + perfor+adhere + nodes +
               factor(differ) + factor(extent)+ surg, family=binomial,data=data1)
summary(result)

#변수들 걸러내기
# AIC 가 작아지도록 변수를 빼야됨
step(result) # call위가 최종 모델.. none 위의 것들을 하나씩 빼감
step(result, direction = "backward")
step(result, direction = "forward")
m=step(result, direction = "backward")
summary(m)

m = step(result, direction = "backward")
m = step(result, direction = "both")

#Odds Ratio
ORtable = function(x,digits=2){
  suppressMessages(a<-confint(x))
  result = data.frame(exp(coef(x)),exp(a))
  result = round(result,digits)
  result = cbind(result, round(summary(x)$coefficient[,4],3))
  colnames(result)=c("OR","2.5%","97.5%","p")
  result
}
ORtable(m) #장이 폐쇄된 경우가 아닌경우에 비해 대장암의 재발,사망이 1.26배 커진다. freq(colon$extent)
# interval을 1포함하면 유의성이 없다.

0개의 댓글