随机效应的多边形logit与Stata的边际效应

时间:2014-08-27 18:25:28

标签: stata logistic-regression multinomial

我有数据,参与者从中选择三个选项中的一个来解决许多相关问题。对于分析的一部分,我将所有这些答案结合起来,以便我从每个参与者那里得到一些观察结果。我建模的方式是使用多项logit,参与者ID作为随机效果。然后我使用gllamm估算了模型。

我现在被困住了一段时间,我似乎无法从这种回归中提取边际效应。到目前为止,我的搜索建议采用gllapred, mu marg的方法。然而,运行它似乎返回了在我的样本中选择特定选择的总体概率。相反,我想知道我的一个虚拟变量(例如男性)的变化如何改变进行该特定选择的概率。

假设对于这种类型的对象没有办法得到margins的输出之类的东西,有没有办法可以手动获得边际效果?也就是说,我可以估计男性= 0,男性= 1,然后采取差异?我感兴趣的变量是假人,但我确实有一个连续变量(年龄),我可能无法估计这样 - 但是,我也不是那么对它的边际效应感兴趣。

1 个答案:

答案 0 :(得分:1)

我也在学习gllamm并最终开始制作这个小例子,希望有助于讨论(尽管对于OP的原始需求为时已晚)。

这个例子做了三件事:

  1. 使用e(b)的结果来计算a的边际效应 二分变量(在赔率上;需要一些调整 概率;
  2. 演示gllapred varname, mu marg方法的结果,这不符合我们的兴趣;
  3. 比较估计单独(和相关)随机的扩展方法 对不同反应的影响和产生的“天真”方法 只有一个随机拦截。
  4. 这类模型的有用参考是gllamm之前的manual的第9.3节。

    首先是一些假数据。希望这符合OP的描述。

    clear
    set more off
    input id q1 q2 q3 q4 age female
    1 3 1 2 3 10 1
    2 3 1 2 3 12 0 
    3 3 3 1 1 11 0
    4 1 1 2 3 9  1
    5 1 3 1 1 10 1
    6 2 3 1 2 11 1
    7 2 1 1 3 11 1
    8 2 1 3 3 11 1
    9 1 2 3 1 11 1
    10 1 2 3 1 11 1
    11 2 1 3 2 12 0
    12 3 1 1 2 12 1
    13 2 1 2 3 12 0
    14 2 1 1 1 12 0
    15 3 2 1 1 12 0
    end
    reshape long q, i(id) j(item)
    

    这是一个“天真”的模型,只产生一个随机效应方差,尽管估计响应结果= 2(相对于1),响应= 3(相对于1)。

    gllamm q age female,i(id) link(mlogit) family(binomial) base(1)
    

    正如OP指出的那样,gllapred varname, mu marg方法基本上预测了每个响应的每个人的概率。尽管名称相似,但这与Stata的margins命令不同。

    // The -gllapred- approach
    gllapred x1,outcome(1) mu marginal
    gllapred x2,outcome(2) mu marginal
    gllapred x3,outcome(3) mu marginal
    sort id item
    list id item q x1 x2 x3 // same probability for the same individual; x1+x2+x3=1
    

    但是,当使用female的结果修正其他协变量时,我们可以手动估算e(b)的边际效应。首先,我们找出年龄的平均值。

    // fix age at mean
    su age, meanonly // average age
    loca mean_age=r(mean)
    

    然后我们手动减去每个响应的两个预测比值比。

    // response: c2
    loca c2m=exp(_coef[c2:age]*`mean_age'+_coef[c2:_cons])
    loca c2f=exp(_coef[c2:age]*`mean_age'+_coef[c2:female]+_coef[c2:_cons])
    loca diffc2=`c2f'-`c2m'
    di "c2[OR_female - OR_male]=>" %5.3g `c2f' " -" %5.3g `c2m' " =" %5.3g `diffc2'  // "OR" for odds ratio
    
    // response: c3
    loca c3m=exp(_coef[c3:age]*`mean_age'+_coef[c3:_cons])
    loca c3f=exp(_coef[c3:age]*`mean_age'+_coef[c3:female]+_coef[c3:_cons])
    loca diffc3=`cf'-`c3m'
    di "c3[OR_female - OR_male]=>" %5.3g `c3f' " -" %5.3g `c3m' " =" %5.3g `diffc3'  // "OR" for odds ratio
    

    接下来,我们应用扩展模型,该模型产生相同的固定效应估计,但随机效应的两个方差加上它们的协方差。

    sort id item
    gen patt=_n
    expand 3                            // triple number of cases
    sort patt
    rename q response                   // just to match help file
    by patt, sort: gen alt=_n           // create all three potential answers
    gen chosen=response==alt            // mark the case with the chosen answer
    qui tab alt, gen(it)
    eq i2: it2
    eq i3: it3
    
    gllamm alt age female,i(id) nrf(2) eqs(i2 i3) nip(4) expanded(patt chosen m) /*
    */ link(mlogit) family(binomial) trace // compare the random effects to the "naive" model
    

    固定效果与最后一个模型相同,但请注意现在有两个随机效果参数。最后一个模型中的代码可用于计算female的边际效应。

    // fix age at mean
    su age, meanonly
    loca mean_age=r(mean)
    
    // c2
    loca c2m=exp(_coef[c2:age]*`mean_age' + _coef[c2:_cons])
    loca c2f=exp(_coef[c2:age]*`mean_age' + _coef[c2:female]+_coef[c2:_cons])
    loca diffc2=`c2f'-`c2m'
    di "c2[OR_female - OR_male]=>" %5.3g `c2f' " -" %5.3g `c2m' " =" %5.3g `diffc2'  // "OR"=>odds ratio
    
    // c3
    loca c3m=exp(_coef[c3:age]*`mean_age' + _coef[c3:_cons])
    loca c3f=exp(_coef[c3:age]*`mean_age' + _coef[c3:female]+_coef[c3:_cons])
    loca diffc3=`cf'-`c3m'
    di "c3[OR_female - OR_male]=>" %5.3g `c3f' " -" %5.3g `c3m' " =" %5.3g `diffc3'  // "OR"=>odds ratio
    

    希望我能做到这一点。如果发生任何错误,请随时纠正。