You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含交叉分类随机效应的GAMLSS:候选人姓名对负面偏好票占比的影响估计

交叉嵌套数据下用GAMLSS拟合BEINF模型的实操方案

嘿,针对你要估计候选人姓名对负面偏好票占比影响的需求,结合交叉嵌套的数据结构和已经选定的BEINF分布,我整理了一套落地步骤和关键注意点:

一、交叉嵌套随机效应的处理逻辑

你的观测值同时嵌套在市政当局和候选人中(交叉结构,比如同一个候选人可能在多个市政参选,或同一个市政有多名候选人),GAMLSS的random()函数可以直接支持这种交叉随机效应的设定,不需要额外复杂的语法就能控制聚类带来的异质性。

二、BEINF模型的拟合代码示例

BEINF模型需要同时建模四个核心参数:Beta分布的均值mu、离散度sigma,以及零膨胀概率nu、一膨胀概率tau。我们把候选人姓名作为核心自变量,同时加入市政和候选人的随机截距来控制聚类效应:

library(gamlss)

# 假设你的数据框为vote_data,包含以下关键变量:
# negative_preference_votes:因变量,取值0-1
# candidate_name:候选人姓名(分类变量)
# municipality_id:市政当局唯一标识
# candidate_id:候选人唯一标识

fit_beinf <- gamlss(
  formula = negative_preference_votes ~ candidate_name +
    random(~1 | municipality_id) +  # 市政层面的随机截距
    random(~1 | candidate_id),       # 候选人层面的随机截距
  family = BEINF(),
  data = vote_data,
  trace = FALSE  # 关闭拟合过程输出,如需查看迭代细节可设为TRUE
)

三、模型结果解读与诊断

  1. 核心结果查看
    运行summary(fit_beinf)可以看到四个参数的估计值,重点关注candidate_name对应的系数——它会分别在mu、sigma、nu、tau四个部分给出结果,分别代表姓名对中间比例部分的均值、离散度,以及零票、全票(100%被划掉)概率的影响。
    若要单独检验姓名的显著性,可使用wald检验:

    wald.test(fit_beinf, term = "candidate_name")
    
  2. 拟合质量诊断
    务必检查模型的拟合合理性,避免模型误设:

    # 绘制残差图与Q-Q图,直观判断拟合效果
    plot(fit_beinf)
    # 检查参数收敛情况
    conv.check(fit_beinf)
    

四、关键注意事项

  • 初始值适配:BEINF模型对初始值较为敏感,若拟合报错或不收敛,可手动设置初始参数:
    fit_beinf <- gamlss(
      # 沿用上述formula与family设置
      start.values = list(mu = 0.3, sigma = 1.5, nu = 0.05, tau = 0.05),
      data = vote_data
    )
    
  • 随机斜率扩展:如果认为姓名的影响在不同市政存在差异,可加入随机斜率,比如random(~candidate_name | municipality_id),但需确保样本量足够支撑更复杂的模型。
  • 分布合理性验证:确认你的因变量确实存在大量0和1的取值,若只有少量甚至没有这类极端值,换成普通Beta分布(BE())会更合适。

内容的提问来源于stack exchange,提问作者Lea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:48:15