在R中使用面板数据执行有序Probit回归的方法及报错排查
在R中实现面板有序Probit回归的正确方法
你代码中的错误点
- 变量名大小写不匹配:数据框里的因变量是
infodemic(小写),但公式里写的是Infodemic(首字母大写),R对大小写敏感,这会导致程序找不到对应变量。 - 参数位置错误:你把
model="oprobit"放到了index参数的向量里,正确写法是index单独指定面板标识,model作为独立参数。更关键的是:plm包本身不支持有序Probit模型,它主要用于线性面板模型(固定/随机效应OLS、FE、RE等),无法直接拟合这类非线性面板模型。
正确实现方案:用ordinal包拟合随机效应有序Probit
对于面板结构的有序因变量,随机效应有序Probit是常用方法,我们可以用ordinal包的clm函数实现,步骤如下:
1. 安装并加载所需包
install.packages("ordinal") library(ordinal)
2. 准备数据
先确保面板分组变量格式正确,将country转为因子类型:
x <- data.frame( year = c(2000,2001,2002,2000,2001,2002,2000,2001,2002), country = c(1,2,3,2,1,3,2,3,1), infodemic = c(1,3,2,4,2,1,3,2,2), democracy = c(3,3,1,2,4,2,1,4,1) ) x$country <- as.factor(x$country)
3. 拟合随机效应有序Probit模型
通过link="probit"指定Probit链接函数,random=~1|country加入个体随机效应:
model <- clm(infodemic ~ democracy, data = x, link = "probit", random = ~1|country) summary(model)
4. 获取概率估计
使用predict函数指定type="prob",即可得到每个观测对应各因变量等级的概率:
# 生成概率估计 prob_estimates <- predict(model, type = "prob") # 合并到原数据中查看 x_with_probs <- cbind(x, prob_estimates) head(x_with_probs)
备选方案:用glmmTMB拟合混合效应有序Probit
如果需要更灵活的模型结构,也可以使用glmmTMB包实现:
install.packages("glmmTMB") library(glmmTMB) # 拟合模型 model_tmb <- glmmTMB(infodemic ~ democracy + (1|country), data = x, family = ordinal_probit()) summary(model_tmb) # 获取概率估计 prob_tmb <- predict(model_tmb, type = "response") x_with_probs_tmb <- cbind(x, prob_tmb)
内容的提问来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

