截断泊松与Hurdle模型泊松部分估计值差异原因问询
结果差异的核心原因
你遇到的probit部分估计值一致、泊松部分差异极大的问题,由三个明确问题共同导致,其中前两个是核心诱因:
1. 手动两部分模型的第二阶段代码存在根本性错误
你当前写的poisson_doc回归完全不符合“对至少有一次就诊的样本拟合就诊次数”的设定:因变量错误设置为
I(doc > 0),这是和第一阶段probit完全一致的0-1二值变量(代表是否就诊),根本不是医生就诊次数的原始计数变量;同时没有筛选doc > 0的样本,直接用全样本估计,本质是用二值因变量跑泊松回归,拟合的是就诊概率而非就诊次数,结果和Hurdle模型的计数部分完全没有可比性。
修正后的第二阶段普通泊松代码应为:poisson_doc <- glm(doc ~ phi + gender + age + health + educ + smoke + logthinc + wave + AUS + GER + SWE + NED + ESP + ITA + FRA + DEN + GRE + SWI + BEL + ISR + CZE + POL + LUX + HUN + POR + SVN + EST + CRO + LIT + BUL + CYP + FIN + LVA + MAL + ROM, data = allwaves[allwaves$doc > 0, ], family = poisson)2. 即便代码修正,普通泊松与Hurdle模型的计数部分分布设定存在本质差异
你调用的hurdle()(来自pscl包)的计数部分采用的是左截断在0的泊松分布,直接拟合条件分布$P(Y=y|Y>0)$,似然函数是专门针对“排除0值的截断计数”构造的,参数对应的是截断后分布的特征。
而你在筛选后的子样本上跑普通glm(..., family=poisson)时,模型默认假设数据服从从0开始的完整泊松分布,只是你人为删除了y=0的样本,没有告知模型数据存在左截断,估计出的参数对应完整泊松分布的特征,和截断泊松的估计值本身就存在系统性偏差,不可能完全相等。如果要手动复现Hurdle模型的计数部分结果,需要自定义左截断泊松的似然函数做估计,不能直接用普通泊松命令。3. Hurdle模型的计数部分变量存在遗漏
对比模型公式可以发现:hd_doc的公式中|分隔符前(对应计数部分的自变量)在age之后直接接了educ,漏掉了你手动模型中包含的核心变量health,health仅出现在|之后的第一阶段probit部分。两个模型计数部分的解释变量集合不一致,也会直接带来估计结果的差异。
内容的提问来源于stack exchange,提问作者DaS
相关产品推荐
相关产品推荐

