同一数据的内部和评估者间可靠性

机器算法验证 状态 可靠性 协议统计 类内相关
2022-04-08 09:50:35

我在这里阅读了一些答案(特别是“序数或区间数据的评分者间可靠性”之一)。不过我还是有点迷茫!

我有 4 位评估者的数据,他们分别对每个受试者的 CT 扫描进行了两次评估,以确定是否存在 9 个体征。两个读数由一个清除期分开。因此,我的数据如下所示(对于每个符号/变量):

A1  A2  B1  B2  C1  C2  D1  D2
0   1    1   1   0   1   0   0
1   1    0   0   1   1   1   1
etc

A1 代表评分者 A 的第一个读数,A2 代表第二个读数,依此类推。计算内部信度很容易,但对于 inter-,我得到了 Fleiss Kappa 并使用 bootstrapping 来估计 CI,我认为这很好。除了,显然这将给定评分者的每个“评分”视为不同的“评分者”。我考虑过将 ICC 与 WinPepi 功能一起使用,该功能可以为固定评估者提供评估者协议,但我怀疑它可能不适合二进制数据?

你会得到 Fleiss 并报告它吗?

PS:StasK在下面提供的答案非常出色,并且确实澄清了一些事情,但是由于原始问题的含糊不清,这并不是我想要的...

1个回答

我假设 A 到 D 是不同的症状,比如说,1 和 2 是两个评估者。当您在 Stata 中标记此内容时,我将构建一个 Stata 示例。让我们首先模拟一些数据:我们有一堆具有两个不相关特征的受试者,以及一系列针对这些特征的问题。两位评估者对每个特征有不同的敏感度:第一位评估者比第二位评估者更有可能对问题 A 给出肯定回答,但对问题 B 给出肯定回答的可能性略小,等等。

    clear
    set seed 10101
    set obs 200

    * generate orthogonal individual traits
    generate trait1 = rnormal()
    generate trait2 = rnormal()

    * raters' interecepts for individual questions
    local q1list 0.3 0.7 -0.2 -0.4
    local q2list 0.5 0.5 0 -0.5

    * prefixes
    local letters a b c d

    forvalues k = 1/4 {
      local thisletter : word `k' of `letters'
      local rater1     : word `k' of `q1list'
      local rater2     : word `k' of `q2list'
      generate byte `thisletter'1 = ( `k'/3*trait1 + (3-`k')/5*trait2 + 0.3*rnormal() > `rater1' ) 
      generate byte `thisletter'2 = ( `k'/3*trait1 + (3-`k')/5*trait2 + 0.3*rnormal() > `rater2' ) 
    }

这应该产生类似的东西

      . list a1-d2 in 1/5, noobs

       +---------------------------------------+
      | a1   a2   b1   b2   c1   c2   d1   d2 |
      |---------------------------------------|
      |  1    1    0    0    1    0    1    1 |
      |  0    0    0    0    0    1    1    1 |
      |  0    0    0    0    0    0    0    0 |
      |  1    0    0    1    1    1    1    1 |
      |  0    0    0    1    1    1    1    1 |
      +---------------------------------------+

我希望它与您的数据相似,至少在现有变量方面。

可以通过将二进制表示转换为十进制表示来构建评分者间一致性的完全非参数摘要。结果a1=0,b1=0,c1=0,c4=0为0000b=0;第一次观察的结果是 1011b = 11,等等。让我们产生这个编码:

      generate int pattern1 = 0
      generate int pattern2 = 0
      forvalues k = 1/4 {
        local thisletter : word `k' of `letters'
        replace pattern1 = pattern1 + `thisletter'1 * 2^(4-`k')
        replace pattern2 = pattern2 + `thisletter'2 * 2^(4-`k')
        tab pattern*
      }

这应该产生类似的东西

      . list  a1- d2 pat* in 1/5, noobs

        +-------------------------------------------------------------+
        | a1   a2   b1   b2   c1   c2   d1   d2   pattern1   pattern2 |
        |-------------------------------------------------------------|
        |  1    1    0    0    1    0    1    1         11          9 |
        |  0    0    0    0    0    1    1    1          1          3 |
        |  0    0    0    0    0    0    0    0          0          0 |
        |  1    0    0    1    1    1    1    1         11          7 |
        |  0    0    0    1    1    1    1    1          3          7 |
        +-------------------------------------------------------------+

现在,这些模式完全可以使用kap

        . kap pattern1 pattern2


        Agreement   Exp.Agrmt    Kappa     Std. Err.      Z        Prob>Z
        -----------------------------------------------------------------
        54.00%        17.91%     0.4396     0.0308      14.25      0.0000

您可以使用样本量或评估者之间的差异来产生不重要的答案:)。这个 kappa 有一个严重的缺点:它没有反映有一些共同项目的事实:模式 0001 和 0000,即使它们匹配了 75%,在这种方法中也会被认为是不匹配的。因此,它是评估者间协议的一个极其保守的衡量标准。

要获得所有 ICC 的公平估计,您需要运行交叉分类的混合模型。让我们首先reshape让数据成为可能:

        generate long id = _n

        * reshape the raters
        reshape long a b c d , i(id) j(rater 1 2)

        * reshape the items
        forvalues k = 1/4 {
          local thisletter : word `k' of `letters'
          rename `thisletter' q`k'
        }
        reshape long q , i(id rater) j(item 1 2 3 4)

现在,我们可以在这些数据上运行xtmelogit(或者gllamm如果你更喜欢它):

        . xtmelogit q || _all : R.rater || _all: R.item || _all: R.id, nolog

        Note: factor variables specified; option laplace assumed

        Mixed-effects logistic regression               Number of obs      =      1600
        Group variable: _all                            Number of groups   =         1

                                                        Obs per group:
        min =      1600
        avg =    1600.0
        max =      1600

        Integration points =   1                        Wald chi2(0)       =         .
        Log likelihood = -697.55526                     Prob > chi2        =         .

        ------------------------------------------------------------------------------
        q            |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
        -------------+----------------------------------------------------------------
        _cons        |  -.7795316   .9384147    -0.83   0.406    -2.618791    1.059727
        ------------------------------------------------------------------------------

        ------------------------------------------------------------------------------
        Random-effects Parameters    |   Estimate   Std. Err.     [95% Conf. Interval]
        -----------------------------+------------------------------------------------
        _all: Identity               |
        sd(R.rater)                  |   .1407056   .1627763      .0145745    1.358408
        -----------------------------+------------------------------------------------
        _all: Identity               |
        sd(R.item)                   |   1.797133   .6461083      .8882897    3.635847
        -----------------------------+------------------------------------------------
        _all: Identity               |
        sd(R.id)                     |    3.18933   .2673165      2.706171    3.758751
        ------------------------------------------------------------------------------
        LR test vs. logistic regression:     chi2(3) =   793.71   Prob > chi2 = 0.0000

        Note: LR test is conservative and provided only for reference.
        Note: log-likelihood calculations are based on the Laplacian approximation.

这是一个具有三个随机效应的交叉分类模型:主题、评分者和项目,假设它们不相关(这对于该数据是错误的;见下文)。现在让我们估计ICC:

        . local Vrater ( exp(2*_b[lns1_1_1:_cons]) )
        . local Vitem ( exp(2*_b[lns1_2_1:_cons]) )
        . local Vid ( exp(2*_b[lns1_3_1:_cons]) )
        . nlcom `Vrater' / (`Vrater' + `Vitem' + `Vid' + _pi*_pi/3 )

        -----------------------------------------------------------------------
        q     |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
        ------+----------------------------------------------------------------
        _nl_1 |   .0011847   .0027384     0.43   0.665    -.0041824    .0065519
        -----------------------------------------------------------------------

        . nlcom `Vid' / (`Vrater' + `Vitem' + `Vid' + _pi*_pi/3 )

        ------------------------------------------------------------------------
        q     |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
        ------+----------------------------------------------------------------
        _nl_1 |   .6086839   .0903816     6.73   0.000     .4315393    .7858285
        ------------------------------------------------------------------------

        . nlcom `Vitem' / (`Vrater' + `Vitem' + `Vid' + _pi*_pi/3 )

        -----------------------------------------------------------------------
        q     |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
        ------+----------------------------------------------------------------
        _nl_1 |    .193265   .1121376     1.72   0.085    -.0265206    .4130506
        -----------------------------------------------------------------------

提示:我通过 . 找出了参数的名称matrix list e(b)。)

这些是分别对应于评分者、主题和项目的 ICC。评估者的零 ICC 实际上在数据生成方式的背景下是有意义的:在某个评估者始终比其他评估者更好或更差的情况下,没有系统性影响。评分者和项目之间存在交互,但模型没有反映它。忠于生活就像

 xtmelogit q ibn.item##ibn.rater, nocons || id:

使用此规范,您将不得不通过更复杂的方差分量组合和模型固定效应部分的点估计来获得 ICC。

如果您有耐心(或功能强大的计算机),您可以指定intp(7)或类似的东西来获得比拉普拉斯近似(随机效应分布模式下的一个点)更准确的近似值。