Регрессия Кокса с взвешиванием для лечения обратной склонности

Нормальная регрессия Кокса выглядит следующим образом:

coxph(formula = Surv(time, status) ~ v1 + v2 + v3, data = x)

Я рассчитал баллы по взвешиванию обратной склонности (IPTW) с последующими баллами склонности.

Баллы предрасположенности можно рассчитать следующим образом:

ps<-glm(treat~v1+v2+v3, family="binomial", data=x)

Веса, используемые для IPTW, рассчитываются следующим образом:

weight <- ifelse (treat==1, 1/(ps), 1/(1-ps))

Каждый субъект в наборе данных может быть взвешен с помощью вышеупомянутого метода (каждый субъект действительно получает определенный вес, рассчитанный, как указано выше), но я не вижу места для определения весов в «нормальной» формуле регрессии Кокса.

Существует ли формула регрессии Кокса, по которой мы можем оценить рассчитанные веса для каждого субъекта, и какой пакет или код R используется для этих вычислений?


r cox
person Kweetvannix    schedule 29.05.2018    source источник


Ответы (2)


Метод взвешивания оценки склонности (метод взвешивания обратной вероятности) R был использован для следующего статистического анализа.

  • Загрузите следующие пакеты R:

    library(ipw)
    library(survival)
    
  • Оцените оценку склонности для каждого идентификатора во фрейме данных (base_model) на основе переменных.

    Оценка предрасположенности - это вероятность назначения лечения при наличии заданных ковариат (v). Как показано в ваших данных,

    PS estimation
    ps_model <- glm(treatment~v1+v2+v3...., family = binomial, data = base_model)
    summary(ps_model)
    
    # view propensity score values
    pscore <- ps_model$fitted.values
    dataframe$propensityScore <- predict(ps_model, type = "response")
    
  • Рассчитать веса

          #estimate weight for each patient
          base_model$weight.ATE <- ifelse((base_model$treatment=="1"),(1/base_model$propensityScore), (1/(1-base_model$propensityScore)))
    
          base_weight <- ipwpoint(exposure = treatment, family = "binomial", link="logit", numerator = ~1,  denominator =~v1+v2+v3....vn, data = base_model, trunc=0.05) #truncation of 5% for few extreme weights if needed
    
  • Анализ выживаемости: регрессия Кокса

          #time to event analysis with weights
          HR5 <- coxph(Surv(time, event)~as.factor(treat_group), weights = weights.trunc, data = base_model) 
          summary(HR5)
    

Аргумент weights был добавлен на основе ранее оцененных весов.

  • Пакеты cobalt или tableOne помогут вам просмотреть баланс характеристик до и после взвешивания оценок склонностей.

Удачи!

person pathadka    schedule 07.08.2019

Вы можете сделать это, используя набор данных DIVAT из пакета iptwsurvival:

##Generate ID
DIVAT$ID<- 1:nrow(DIVAT)

Мы можем рассчитать IPTW как средний эффект лечения, а не как средний эффект лечения среди пролеченных

DIVAT$p.score <- glm(retransplant ~ age + hla, data = DIVAT, 
                 family = "binomial")$fitted.values

DIVAT$ate.weights <- with(DIVAT, retransplant * 1/p.score + (1-retransplant)* 1/(1-p.score))

Чем мы можем выполнить регрессию Кокса

####COX without weight
coxph(Surv(times, failures)~ retransplant, data=DIVAT)->fit
summary(fit)

Добавить вес довольно просто

###COX with weight naive model
coxph(Surv(times, failures)~ retransplant, data=DIVAT, weights = ate.weights)->fit
summary(fit)
###COX with weight and robust estimation
coxph(Surv(times, failures)~ retransplant + cluster(ID), data=DIVAT, weights = ate.weights)->fit
summary(fit)

Однако в этом случае оценка стандартной ошибки смещена (см. Остин, Питер С. «Оценка дисперсии при использовании взвешивания обратной вероятности лечения (IPTW) с анализом выживаемости». Статистика в медицине 35.30 (2016): 5642-5655. ). Остин предложил положиться на оценку начальной загрузки. Однако я тоже запутался, так как не могу найти способ выполнить такого рода анализ. Если вы нашли ответ, дайте мне знать.

person ChinaskyM    schedule 31.03.2019