在一项病例对照研究中,我用体重来估计存活率.所以所有箱子的重量都等于1. 当绘制估计曲线并将它们与未加权估计进行比较时,我注意到情况下的KM曲线不重叠.

这是"生存"包中数据的代码.

library(dplyr)
library(tidyverse)
library(survival)
library(broom)
library(WeightIt)
library(survey)


a <- survival::ovarian

#Calculation of weghts:

weights <- WeightIt::weightit(rx ~ age + ecog.ps + resid.ds, int = T, estimand = "ATT", data = a, method = "glm" , stabilize = F, missing = "saem") 
a$weights <- weights$weights
a$ps <- weights$ps

design <- svydesign(ids = ~ 1, data = a, weights = ~weights)

KM_PFS <- survfit(Surv(futime, fustat > 0)~rx, a) # KM naive 
KM_PFS_w_TT <- survfit(Surv(futime, fustat > 0)~rx, a, weights = weights, robust = T)
KM_PFS_w <- svykm(Surv(futime, fustat > 0)~rx, design = design,se=T)


par(mfrow=c(1,1))
plot(KM_PFS_w[[2]], lwd=2, col=c("red"),xlab="Time (months)",ylab="PFS",#svykm treated
     xaxt="n", ci=F)
#lines(KM_PFS_w[[1]],col=c("blue"),lwd=2)
lines(KM_PFS,col=c("black","black"),lwd=2,lty=c(0,2)) #km naive treated
lines(KM_PFS_w_TT,col=c("orange","violet"),lwd=2,lty=c(0,1))#km TT treated

cas_km_w_TT <- tidy(KM_PFS_w_TT)%>%filter(strata == "rx=1")
cas_km <- tidy(KM_PFS)%>%filter(strata == "rx=1")
cas_km_w <- do.call("rbind", lapply(names(KM_PFS_w), \(x) {
  data.frame(strata = x, do.call("cbind", KM_PFS_w[[x]]))
})) %>% filter(strata ==1)

推荐答案

这与svykm(..., se=TRUE)的计算不同--如果你不要求那里有标准误差,曲线就会匹配.正如svykm的文档所解释的那样:

当计算标准误差时,生存曲线实际上是Aalen(基于风险)估计,而不是Kaplan-Meier估计.

还要注意的是,这些包不使用相同的"权重",heresurvey的作者,解释了差异(但这只对方差估计有影响).

R相关问答推荐

卸载安装了BRM的模型发出的警告

如何替换R中数据集列中的各种字符串

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

如何根据组大小应用条件过滤?

gganimate在使用shadow_mark选项时不保留所有过go 的标记

在ggplot2中更改小提琴情节的顺序

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

仅 Select 超过9行的CSV文件

如何指定我的函数应该查找哪个引用表?

使用RSelenium在R中抓取Reddit时捕获多个标签

在保留列表元素属性的同时替换列表元素

观察器中的inaliateLater的位置

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

删除字符串R中的重复项

计算Mean by分组和绑定到R中的数据集

按镜像列值自定义行顺序

排序R矩阵的行和列

roxygen2正在处理太多的文件

使用dqur在不同变量上创建具有多个条件的变量

R:部分修改矩阵对角线的有效方法