2017-09-11 4 views
1

R에 KM 곡선을 그려야하지만 먼저 생존 개체에 맞춰야합니다. 나는 각 행이 그룹 A 또는 그룹 B에있는 환자에 해당하는 100 개의 행으로 구성된 데이터 세트를 가지고 있습니다. 그룹 A에 대한 KM 곡선 대 (동일한 플롯에서) 플롯 할 수 있습니다. 그룹 B 대 그룹 A + B (모두들). 내가 가지고있는 문제는 그룹 변수를 만드는 방법을 알아내는 것입니다. 난 당신이 하나의 변수에서 그것을 할 수 없다고 가정하고 그래서 이것이 제대로 작동하지 않는 것 같지만 (그룹 A와 B의 모든 사람들을 얻지는 못한다).생존 모델에 대한 그룹화 변수 만들기 R

set.seed(4) 

n = 100 
x = runif(n,0,1500) 
y = runif(n,0,5) 
survival = runif(n,1,1000) 
censor = rbinom(n,1,.5) 

dat = data.frame(x=x,y=y,survival=survival,censor=censor) 

### Create a group indicator variable 
# 1: Group A 
# 2: Group B 
# 3: Everyone else 
group = rep(3,nrow(dat)) 
group[which(dat$x < 730.5)] = 1 
group[which(dat$y >= 2)] = 2 


### Kaplan Meier curves 
# Need new group indicator variables 
A = ifelse(group == 1,1,0) 
B = ifelse(group == 2,1,0) 
AB = ifelse(group != 3,1,0) 


### Overall survival 
os = survfit(Surv(dat$survival,dat$censor)~A + B + AB,data=dat) 

당신이 볼 수 os 당신이 예와 유형을 실행 그렇다면 그 무엇을 내가 원하는 것은 17 + 56 = 73이고 AB = 27 샘플 크기.

+1

샘플 값을 추가하고 시나리오로 데이터를 재현 할 수 있습니까? –

+0

@bhavesh 예를 들어 – RustyStatistician

+0

을 추가하면 어느 조건도 만족시키지 못하기 때문에 A와 B 모두를 얻지 못할 것입니다. 제 8 행은 x = 1359.13823이고 y = 1.06이다. 그래서 어떻게 그룹화 할 수 있습니까? –

답변

2

한 가지 간단한 방법은 행이 속한 그룹 (A 또는 B)을 나타내는 새 열을 만들고이 열을 전체 채우기 (A + B)와 바인딩하는 것입니다. 그런 다음 그룹에 대해 모델을 실행하기 만하면됩니다.

# Create a new variable to indicate the group and drop the group you don't need. 
dat$group = "C" 
dat$group = ifelse(dat$x < 730.5, "A", dat$group) 
dat$group = ifelse(dat$y >= 2, "B", dat$group) 
dat = subset(dat, dat$group != "C") 

# Bind the sample with the population 
dat2 = dat 
dat2$group = "AB" 
data = rbind(dat2, dat) 

table(data$group) 
# A AB B 
# 17 73 56 

# Plot 
plot(survfit(Surv(data$survival,data$censor)~group,data=data)) 
관련 문제