R语言实现带固定效应的有序Logit模型方法咨询
R中双向固定效应有序Logit模型的实现方案
针对需要纳入国家、年份双维度固定效应的有序Logit建模需求,无需局限于为MASS::polr开发自定义拓展,以下是实测可行的落地方案,按运行效率、易用性排序:
- 优先选择
fixest包的feglm函数
这是目前R中固定效应模型运行效率最高的工具链之一,新版本已原生支持有序Logit/Probit的固定效应估计,不需要手动生成国家、年份虚拟变量,会自动通过FWL算法吸收固定效应,你这个150国、50年量级的样本基本可以秒出结果,同时原生支持聚类标准误、边际效应计算、异质性回归等常用面板分析功能。
基础调用语法如下,注意因变量需要提前转为有序因子类型:library(fixest) # 公式结构:有序因变量 ~ 核心解释变量 + 控制变量 | 固定效应1 + 固定效应2 fe_ologit <- feglm( y ~ x1 + x2 + x3 | country + year, data = your_data, family = ordinal("logit") ) # 按国家聚类输出稳健标准误 summary(fe_ologit, cluster = ~country) bife包专门适配固定效应有序响应模型
这个包是专门针对固定效应二值/有序离散选择面板模型开发的,内置了偶发参数偏差的校正逻辑,长、短面板场景都适用,同样支持多维度固定效应的自动吸收,不需要手动构造虚拟变量,估计结果稳健性强。缺点是配套的后处理功能比fixest少,拓展性稍弱。
基础语法:library(bife) bife_ologit <- bife( y ~ x1 + x2 + x3 | country + year, data = your_data, model = "ologit" ) summary(bife_ologit)- 基于
MASS::polr手动纳入固定效应(兼容原生polr逻辑)
如果你需要完全匹配polr的基础估计逻辑,可以直接将国家、年份转换为因子变量放入回归公式,R会自动生成虚拟变量并剔除基准组。你需要控制的固定效应总共不到200个,总样本量在数千量级,完全满足估计的自由度要求,且因为你的数据时间维度接近50,属于长面板,偶发参数偏差的影响极小。
基础语法:
这个方案的缺点是回归结果会附带一长串国家、年份的虚拟变量系数,结果冗余,且聚类标准误、边际效应等需要手动额外计算,后处理成本高。library(MASS) # 提前将固定效应维度转为因子 your_data$country <- as.factor(your_data$country) your_data$year <- as.factor(your_data$year) polr_fe <- polr( y ~ x1 + x2 + x3 + country + year, data = your_data, Hess = TRUE ) - 备选方案:
ordinal包的clm函数
作为polr的增强版本,clm支持更灵活的有序模型设定,内置比例优势假设检验、可变阈值等功能,可以通过将国家、年份作为因子纳入公式控制固定效应,适合需要做大量模型设定检验的场景,缺点是大样本下运行速度远低于前两种固定效应自动吸收的方案。
注意:如果数据中存在仅出现1期的国家/年份样本,固定效应估计时会自动剔除这类无法识别组内效应的观测,建模前要留意样本量变动。如果需要估计有序Probit模型,上述前三个方案仅需替换对应的分布参数即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Yusuf
相关产品推荐
相关产品推荐

