R与Stata中的Cox比例风险模型

R与Stata中的Cox比例风险模型,r,stata,survival-analysis,R,Stata,Survival Analysis,我试图使用以下数据从Stata复制cox比例风险模型估计 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) C

我试图使用以下数据从Stata复制cox比例风险模型估计

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 

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

sqrt(diag(vcov(surv))* (49/48))
如果我们仍然希望在R中有与Stata相同的标准误差,如不指定nohr时,我们需要知道,当不使用nhr时,我们将获得$exp(\beta)$,其中的标准误差来自于在这些比例中拟合模型。特别是通过将增量方法应用于原始标准误差估计而获得。delta方法通过计算相应的一阶泰勒展开的方差来获得转换变量的标准误差,对于转换$exp(\beta)$相当于将原始标准误差乘以$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
库(msm)

她说了几句话(很可能没有帮助)。对于R结果,渐近和稳健se非常接近,我倾向于认为这是令人放心的,并且可以看到z统计量是从coef/rob.se计算出来的。我似乎无法从stata结果(log(HR)/rob.se)计算z-stat,不是吗?你知道为什么/如何计算吗?表明st.错误已经被转换了可能是??我认为se可能在某种程度上被转换了,但我真的不清楚它们是如何被转换的,或者是否真的被转换了。我猜测得很疯狂,但是你有没有尝试将
nohr
指定给你的stata代码..哈哈。。。知道了!!!和斯塔塔一起挖出了一个老家伙。。添加
noadjust
。使用手册中pg3的调整公式说了几句话
sqrt(diag(vcov(surv))*(49/48))
-可能值得自动化集群的数量。谢谢,对我非常有用。我有STATA的标准误差(0.7),HR(1.88),但是,由于我没有数据,我如何使用R获得R中的标准误差。聚类数是182。我使用“(SE/HR)*(g-1/g)”直接将SE从STATA计算到R SE。以HCTrebels为例,(0.1299916/0.4089758)*(48/49)=0.31136,非常接近R中的0.3146。