1

我有数据,参与者为许多相关问题选择了三个选项之一。对于分析的一部分,我将所有这些答案结合起来,这样我就有了来自每个参与者的一些观察结果。我对此建模的方式是使用多项式 logit,参与者 ID 作为随机效应。然后我使用gllamm.

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

假设没有办法获得margins这种类型对象的输出,有没有办法手动获得边际效应?也就是说,我可以估计男性= 0,男性= 1,然后取差吗?我感兴趣的变量是虚拟变量,但我确实有一个连续变量(年龄),我大概无法像这样估计它——但是,我对它的边际效应也不是很感兴趣。

4

1 回答 1

1

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

这个例子做了三件事:

  1. 使用结果e(b)来计算二分变量的边际效应(在赔率上;概率需要一些调整;
  2. 展示该gllapred varname, mu marg方法的结果,这对我们的兴趣是不希望的;
  3. 比较了估计不同响应的单独(和相关)随机效应的扩展方法和只产生一个随机截距的“朴素”方法。

此类模型的有用参考是早期手册的第 9.3 节gllamm

首先是一些假数据。希望这符合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

希望我做对了。如果犯了任何错误,请随时纠正。

于 2014-08-31T06:54:51.803 回答