2

对于综合歧视改进(IDI),我得到了两个非常不同的结果。

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

    . idi totaloutcome grace_prob, prvars(allelecount)

----------------------------------------------------
      IDI |     Estimate     Std. Err.       P-value
 ----------+-----------------------------------------
           |     -0.01116       0.00430       0.00946
 ----------------------------------------------------

但是当我使用idiMark Lunt 的程序时

 . 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

谁能解释为什么会发生这种情况或指出为什么一个包可能比另一个包更好?

4

2 回答 2

4

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

  1. 为什么有两个idi程序?很简单:两位独立工作的作者编写了两个同名的程序,然后将他们的程序发布在自己的网站上。没有机制可以阻止这种情况的发生。怎么会有?如果作者都试图通过Stata Journal或 SSC 网站(help ssc供参考)发表文章,那么第二位发帖作者将被要求更改与同一网站上已有程序冲突的任何程序的名称。但没有人有义务以其中任何一种方式发布。(此外,使用searchfindit作者可以在 Internet 上查找具有给定名称的已发布程序以避免冲突。)

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

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

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

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

    • 如果这对您来说是新的,让我强调这些是 Stata 命令;不需要浏览器,尽管某些地方的人如果在防火墙后面将无法执行此操作。

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

  4. 一个程序更好吗?这很难判断,但我个人的看法是,与 Stata 标准相比,Lunt 程序编写得更好,质量也更高。Byberg 程序做了一些不必要的事情,最重要的是不处理ifin限定符。

  5. OP的结果如何?我们看不到 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
于 2013-08-09T01:35:50.943 回答
1

两者都给出相同的答案。例如,请参见下面使用cancer来自 Stata 的数据。

sysuse cancer

对于 Pentidi命令:

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

在上面的示例中,新标记是药物,因此您可能正在测试改进,因为:

对于idi来自 Byberg 的:

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

.

idi died age, prvars(drug)

----------------------------------------------------
      IDI |     Estimate     Std. Err.       P-value
----------+-----------------------------------------
          |      0.20436       0.05748       0.00038
----------------------------------------------------

在这里,新的标记是 as prvars

于 2013-08-08T18:36:30.590 回答