Stata中的综合判别指数(IDI)

Stata中的综合判别指数(IDI),stata,Stata,我得到了两个非常不同的综合歧视改善(IDI)结果 如果我使用nriidi.pkg包并运行idi我会得到这个输出 . idi totaloutcome grace_prob, prvars(allelecount) ---------------------------------------------------- IDI | Estimate Std. Err. P-value ----------+--------------------

我得到了两个非常不同的综合歧视改善(IDI)结果

如果我使用nriidi.pkg包并运行
idi
我会得到这个输出

    . idi totaloutcome grace_prob, prvars(allelecount)

----------------------------------------------------
      IDI |     Estimate     Std. Err.       P-value
 ----------+-----------------------------------------
           |     -0.01116       0.00430       0.00946
 ----------------------------------------------------
但是当我使用Mark Lunt程序中的
idi

 . net from http://personalpages.manchester.ac.uk/staff/mark.lunt

 . idi totaloutcome allelecount grace_prob

 Integrated Discrimination Improvement for allelecount = 0.0017
 Standard Error                                        = 0.0022
 z                                                     = 0.7615
 P-value (one-sided)                                   = 0.2232
 P-value (two-sided)                                   = 0.4464

有人能解释为什么会发生这种情况,或者指出为什么一个软件包可能比另一个更好吗?

两者给出了相同的答案。例如,请参阅下面使用Stata的
癌症
数据

sysuse cancer
对于Pent
idi
命令:

Syntax

        idi outcomevar new_marker varlist [if] [in]


The command idi calculates the Integrated Discrimination Improvement (IDI) due to
    a new marker new_marker, where the old model predicted outcomevar from varlist.
    The definition of the IDI is given by Pencina et al (2008). It can be thought of
    as the average improvement in sensitivity across all possible cutoffs.

idi died drug age

Integrated Discrimination Improvement for drug = 0.2044
Standard Error                                 = 0.0575
z                                              = 3.5554
P-value (one-sided)                            = 0.0002
P-value (two-sided)                            = 0.0004
在上面的例子中,新的标记物是药物,因此您可能正在测试改进,因为:

对于Byberg提供的
idi

Syntax

    idi depvar varlist1 [, options]


    options                  description
    ----------------------------------------------------------------------------------
    Main

      prvars(varlist2)        variable list of new predictor variables

 prvars() is not optional; see below.


Description

    idi calculates the integrated discrimination improvement, which is, as is nri, a
    measure that compares the discrimination ability between two logistic regression
    prediction models. The command assumes a binary numerical depvar and two sets of
    numerical and/or categorical covariates for the two models. The xi function is not
    yet available and dummy variables for categorical covariates with more than two
    categories need to be specified by the user.
    Output are estimated IDI with standard error and p value for test of the null
    hypothesis that IDI in the population is zero.
    Also see: nri


这里,新标记为
prvars

这里将各种问题捆绑在一起

  • 为什么有两个
    idi
    程序?简单:两位独立工作的作者用相同的名字写了两个程序,然后在他们自己的网站上发布了他们的程序。没有任何机制可以阻止这种情况的发生。怎么会有呢?如果两位作者都试图通过Stata期刊或SSC网站发表文章(
    帮助SSC
    获取信息),则第二位发帖作者将被要求更改与同一网站上现有程序冲突的任何程序的名称。但没有人有义务以这两种方式发表。(此外,作者可以使用
    search
    findit
    在互联网上查找具有给定名称的已发布程序,以避免冲突。)

  • 那么,您如何同时使用这两个程序呢?您可以将这两个程序复制到单独的目录或文件夹中,并在它们之间移动。更好的方法是更改两个程序中至少一个程序的名称

    • 例如,我可以通过进入Stata从Mark Lunt安装
      idi
      程序

      . copy http://personalpages.manchester.ac.uk/staff/mark.lunt/idi.ado idi_l.ado
      
    • 然后我需要编辑程序文件
      idi_l.ado
      ,以便标题行读取
      program idi_l

    • 您还需要编辑相应的帮助文件,尽管您可以使用上面的
      copy
      命令样式的
      type
      远程访问它

    • 如果这对你来说是新的,让我强调这些是Stata命令;不需要浏览器,尽管有些地方的人如果在防火墙后面就无法使用浏览器

  • 为什么程序产生不同的答案?答案很简单,您必须查看代码。就比较两个ado文件而言,Stata在这里是开源的,因此在这方面与R完全相同。程序之间的主要区别在于,在运行两个
    logistic
    命令后,Byberg程序从对
    ci
    的两次调用中获得标准错误,而Lunt程序从调用
    ttest
    并使用
    不等
    选项获得标准错误。这两个结果通常很接近,但可能会有很大的不同。正如@Metrics所指出的,您应该使用
    viewsource
    或喜爱的文本编辑器查看代码

  • 一个项目更好吗?这很难判断,但我个人的观点是,与Stata标准相比,Lunt程序编写得更好,质量也更高。Byberg程序会做一些不必要的事情,最重要的是不会处理
    if
    in
    限定符

  • 手术结果如何?我们无法看到OP的数据,因此无法发表评论

  • 为了便于比较,我早些时候重写了Byberg程序,但不保证回答更多关于它的问题

     *! 1.0.0 NJC 9 Aug 2013 
     * modifying idi (Liisa Byberg) from http://www.ucr.uu.se/sv/images/stories/downloads
     program idi_b, rclass  
     version 10.1
     syntax varlist(numeric min=2) [if] [in] , PRvars(varlist numeric min=1)
    
     quietly {
         marksample touse
         tokenize "`varlist'" 
         args out
         tempvar pred1 pred2 diffpred 
         tempname mdiffprednonevents sediffprednonevents mdiffpredevents sediffpredevents
         tempname idi seidi zidi pidi
    
         logistic `varlist' if `touse'
         predict `pred1' if `touse' 
         logistic `varlist' `prvars'  if `touse'
         predict `pred2' if `touse' 
         gen `diffpred' = `pred2' - `pred1'
    
         ci `diffpred' if `out' == 0 
         scalar `mdiffprednonevents' = r(mean)
         scalar `sediffprednonevents' = r(se)
         ci `diffpred' if `out' == 1
         scalar `mdiffpredevents' = r(mean)
         scalar `sediffpredevents' = r(se)
    
         scalar `idi' =  `mdiffpredevents' - `mdiffprednonevents'
         scalar `seidi' =  sqrt(`sediffprednonevents'^2 + `sediffpredevents'^2)
         scalar `zidi' = `idi'/`seidi'
         scalar `pidi' = 2*(1-normal(abs(`zidi')))
       }
    
       di _n "IDI" 
       di "  Estimate  "   %9.5f `idi'
       di "  Std. Err. "   %9.5f `seidi' 
       di "  z         "   %9.5f `zidi' 
       di "  P-value   "   %9.5f `pidi' 
    
       return scalar idi_b_p = `pidi' 
       return scalar idi_b_z = `zidi' 
       return scalar idi_b_se = `seidi' 
       return scalar idi_b = `idi' 
    
       end
    

    使用
    net fromhttp://www.ucr.uu.se/sv/images/stories/downloads
    对于nriidi.pkgI,我已经复制了癌症数据集所做的工作,我确实从两方面得到了相同的答案,但对于我的数据,我得到了不同的输出,这对我来说毫无意义。我不知道为什么这两个软件包使用相同的
    idi
    ;在不卸载另一个的情况下运行一个是不可能的(可能有一种简单的方法来处理)。你的建议是看看他们在变量方面有什么要求。例如,来自Byberg的
    idi
    命令假定两个模型有一个二进制数值depvar和两组数值和/或分类协变量。不幸的是,Lundt程序没有具体说明变量要求。Byberg指定我的变量不应该是问题。有没有一种简单的方法来查看每个程序是如何执行计算的?我在想,如果我能看到代码,我就能看到他们是如何计算数字的,我就能看到差异所在。我知道在R中,您可以看到每个程序的实际代码。您可以使用
    viewsource idi.ado
    查看实际代码。为此,您可能需要尝试
    打开跟踪设置
    (完成后需要
    关闭跟踪设置
     *! 1.0.0 NJC 9 Aug 2013 
     * modifying idi (Liisa Byberg) from http://www.ucr.uu.se/sv/images/stories/downloads
     program idi_b, rclass  
     version 10.1
     syntax varlist(numeric min=2) [if] [in] , PRvars(varlist numeric min=1)
    
     quietly {
         marksample touse
         tokenize "`varlist'" 
         args out
         tempvar pred1 pred2 diffpred 
         tempname mdiffprednonevents sediffprednonevents mdiffpredevents sediffpredevents
         tempname idi seidi zidi pidi
    
         logistic `varlist' if `touse'
         predict `pred1' if `touse' 
         logistic `varlist' `prvars'  if `touse'
         predict `pred2' if `touse' 
         gen `diffpred' = `pred2' - `pred1'
    
         ci `diffpred' if `out' == 0 
         scalar `mdiffprednonevents' = r(mean)
         scalar `sediffprednonevents' = r(se)
         ci `diffpred' if `out' == 1
         scalar `mdiffpredevents' = r(mean)
         scalar `sediffpredevents' = r(se)
    
         scalar `idi' =  `mdiffpredevents' - `mdiffprednonevents'
         scalar `seidi' =  sqrt(`sediffprednonevents'^2 + `sediffpredevents'^2)
         scalar `zidi' = `idi'/`seidi'
         scalar `pidi' = 2*(1-normal(abs(`zidi')))
       }
    
       di _n "IDI" 
       di "  Estimate  "   %9.5f `idi'
       di "  Std. Err. "   %9.5f `seidi' 
       di "  z         "   %9.5f `zidi' 
       di "  P-value   "   %9.5f `pidi' 
    
       return scalar idi_b_p = `pidi' 
       return scalar idi_b_z = `zidi' 
       return scalar idi_b_se = `seidi' 
       return scalar idi_b = `idi' 
    
       end