gpt4 book ai didi

r - R vs Stata 中的 Cox 比例风险模型

转载 作者:行者123 更新时间:2023-12-04 10:08:14 26 4
gpt4 key购买 nike

我正在尝试使用以下数据在 R 中复制来自 Stata 的 cox 比例风险模型估计 http://iojournal.org/wp-content/uploads/2015/05/FortnaReplicationData.dta

stata中的命令如下:

stset enddate2009, id(VPFid) fail(warends) origin(time startdate)
stcox HCTrebels o_rebstrength demdum independenceC transformC lnpop lngdppc africa diffreligion warage if keepobs==1, cluster(js_country)

Cox regression -- Breslow method for ties

No. of subjects = 104 Number of obs = 566
No. of failures = 86
Time at risk = 194190
Wald chi2(10) = 56.29
Log pseudolikelihood = -261.94776 Prob > chi2 = 0.0000

(Std. Err. adjusted for 49 clusters in js_countryid)
-------------------------------------------------------------------------------
| Robust
_t | Haz. Ratio Std. Err. z P>|z| [95% Conf. Interval]
--------------+----------------------------------------------------------------
HCTrebels | .4089758 .1299916 -2.81 0.005 .2193542 .7625165
o_rebstrength | 1.157554 .2267867 0.75 0.455 .7884508 1.699447
demdum | .5893352 .2353317 -1.32 0.185 .2694405 1.289027
independenceC | .5348951 .1882826 -1.78 0.075 .268316 1.066328
transformC | .5277051 .1509665 -2.23 0.025 .3012164 .9244938
lnpop | .9374204 .0902072 -0.67 0.502 .7762899 1.131996
lngdppc | .9158258 .1727694 -0.47 0.641 .6327538 1.325534
africa | .5707749 .1671118 -1.92 0.055 .3215508 1.013165
diffreligion | 1.537959 .4472004 1.48 0.139 .869834 2.719275
warage | .9632408 .0290124 -1.24 0.214 .9080233 1.021816
-------------------------------------------------------------------------------

使用 R,我使用以下内容:
data <- read.dta("FortnaReplicationData.dta")
data4 <- subset(data, keepobs==1)
data4$end_date <- data4$`_t`
data4$start_date <- data4$`_t0`
levels(data4$o_rebstrength) <- c(0:4)
data4$o_rebstrength <- as.numeric(levels(data4$o_rebstrength[data4$o_rebstrength])
data4 <- data4[,c("start_date", "end_date","HCTrebels", "o_rebstrength", "demdum", "independenceC", "transformC", "lnpop", "lngdppc", "africa", "diffreligion", "warage", "js_countryid", "warends")]
data4 <- na.omit(data4)
surv <- coxph(Surv(start_date, end_date, warends) ~ HCTrebels+ o_rebstrength +demdum + independenceC+ transformC+ lnpop+ lngdppc+ africa +diffreligion+ warage+cluster(js_countryid), data = data4, robust = TRUE, method="breslow")

coef exp(coef) se(coef) robust se z p
HCTrebels -0.8941 0.4090 0.3694 0.3146 -2.84 0.0045
o_rebstrength 0.1463 1.1576 0.2214 0.1939 0.75 0.4505
demdum -0.5288 0.5893 0.4123 0.3952 -1.34 0.1809
independenceC -0.6257 0.5349 0.3328 0.3484 -1.80 0.0725
transformC -0.6392 0.5277 0.3384 0.2831 -2.26 0.0240
lnpop -0.0646 0.9374 0.1185 0.0952 -0.68 0.4974
lngdppc -0.0879 0.9158 0.2060 0.1867 -0.47 0.6377
africa -0.5608 0.5708 0.3024 0.2898 -1.94 0.0530
diffreligion 0.4305 1.5380 0.3345 0.2878 1.50 0.1347
warage -0.0375 0.9632 0.0405 0.0298 -1.26 0.2090

Likelihood ratio test=30.1 on 10 df, p=0.000827
n= 566, number of events= 86

我得到相同的风险比系数,但标准误差看起来不一样。 Z 和 p 值接近但不完全相同。为什么 R 和 Stata 中的结果可能不同?

最佳答案

正如 user20650 所注意到的,当在 Stata 选项中包含“nohr”时,您会得到与 R 中完全相同的标准误差。使用集群时,标准误差仍然存在微小差异。 user20650 再次注意到给出了差异是因为 Stata 默认标准误差乘以 g/(g − 1),其中 g 是集群的数量,而 R 不调整这些标准误差。因此,解决方案只是在 Stata 中包含 noadjust 或通过执行以下操作在 R 中调整标准误差:

sqrt(diag(vcov(surv))* (49/48))

如果我们仍然希望在 R 中具有来自 Stata 的相同标准误差,就像未指定 nohr 时一样,我们需要知道当 nhr 被忽略时,我们将获得 $exp(\beta)$ 以及通过拟合模型产生的标准误差那些规模。特别是通过将 delta 方法应用于原始标准误差估计而获得的。 “delta 方法通过计算相应的一阶泰勒展开的方差来获得变换变量的标准误差,对于变换 $exp(\beta)$ 相当于将 oringal 标准误差乘以 $exp(\hat{\beta})$。这种计算技巧产生了与在估计之前转换参数然后重新估计相同的结果”(Cleves 等人 2010)。在 R 中,我们可以使用:
library(msm)
se <-diag(vcov(surv)* (49/48))
sapply(se, function(x) deltamethod(~ exp(x1), coef(surv)[which(se==x)], x))

HCTrebels o_rebstrength demdum independenceC transformC lnpop lngdppc africa diffreligion warage
0.1299916 0.2267867 0.2353317 0.1882826 0.1509665 0.0902072 0.1727694 0.1671118 0.4472004 0.02901243

关于r - R vs Stata 中的 Cox 比例风险模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com