本文将讨论如何使用STAN实现动态贝叶斯模型来预测美国大选,并考虑了一些调整过的国家民调数据、民意影响、相关各州的选举先验结果和相关投票的误差。
下面是原模型的引用:
Linzer, D. 2013. “Dynamic Bayesian Forecasting of Presidential Elections in the States.” Journal of the American Statistical Association. 108(501): 124-134.
自2016年4月1日起,数据共有1268有效投票(包括960年揍民意调查和308年全国民意调查)。源码地址:http://github.com/pkremp/polls
选举团
注意:该模型不考虑在缅因州和内布拉斯加州的特定选举人的选票分配规则。
全国票选
这个图表显示了希拉里•克林顿(Hillary Clinton)和特朗普票选结果,通过来自潜在的各州投票意向的加权平均来计算得分(使用相同的状态重量在2012年的总统选举中,调整国家成人人口增长在2011年和2015年之间)。在模型中(在下面描述),国家投票的意图被定义为:
$$ \pi^{clinton}[t, US] = \sum_{s \in S} \omega_s \cdot \textrm{logit}^{-1} (\mu_a[t] + \mu_b[t, s]) $$
粗线代表国家投票意向的平均后验分布;浅蓝色区域表示置信区间为90%。薄蓝线代表后验分布的边界。
从今天到11月8日,希拉里克林顿的全国选票份额预计将部分收缩到先验基准(如图黑色虚线所示)。
每次全国民调(未经民意领袖影响调整的原始数据)被表示为一个点(暗点指示误差较小)。平均而言,希拉里•克林顿(Hillary Clinton)的全国民调数字似乎在以略低于各州投票情况的水平运行着。
各州票选
下面的图表显示各州选民民意(薄蓝线为从后验分布的100次抽样结果):
$$\pi^{clinton}[t,s] = \textrm{logit}^{-1} (\mu_a[t] + \mu_b[t, s])$$
以克林顿在选举日的各州估计得分排序。
目前各州票选意向预测
各州概率
选举地图
民调机构带动效应
大多数支持希拉里的选票:
票源地 | 中位数 | P95 | P05 |
---|---|---|---|
Saint Leo University | 2.6 | 1.4 | 4.0 |
Public Religion Research Institute | 1.8 | 0.7 | 2.9 |
AP | 1.7 | 0.4 | 3.1 |
Michigan State University | 1.7 | -0.3 | 3.8 |
RABA Research | 1.7 | 0.5 | 3.0 |
GQR | 1.4 | 0.4 | 2.4 |
ICITIZEN | 1.4 | 0.2 | 2.7 |
McClatchy | 1.4 | 0.1 | 2.9 |
Baldwin Wallace University | 1.2 | -0.6 | 3.2 |
Siena | 1.2 | -0.2 | 2.7 |
大多数支持川普的选票:
票源地 | 中位数 | P95 | P05 |
---|---|---|---|
Rasmussen | -2.4 | -3.0 | -1.8 |
UPI | -1.9 | -2.4 | -1.3 |
Remington Research Group | -1.8 | -2.7 | -0.9 |
Clout Research | -1.7 | -3.7 | 0.2 |
Hampton University | -1.7 | -3.2 | -0.2 |
PPIC | -1.7 | -3.3 | -0.3 |
Emerson College Polling Society | -1.6 | -3.1 | -0.1 |
IBD | -1.6 | -2.7 | -0.6 |
InsideSources | -1.6 | -3.6 | 0.3 |
Dixie Strategies | -1.5 | -3.1 | -0.1 |
全国与各州加权平均民调得分之差
数据
在处理数据之前,可以用runmodel.R
脚本下载来自HuffPost Pollster
网站上的.csv文件。模型忽略了第三方候选人和选民。
我限制每个调查的样本的投票意向必须是克林顿或川普,因此有
$$N = N^{clinton} + N^{trump}$$
(此公式不包含犹他州)
当多个民调可用同样的民意,在同一日期,和同样的状态,我选择选民的投票,而不是登记选民,
和民意调查Nclinton + NtrumpNclinton + Ntrump是最小的(假设这些都是调查问题的受访者给出的选项选择一个第三方的候选人,而不是问题的受访者只要求选择两位领先的候选人)。
当多个选票可能同一天出自在同一个州的同一个投票人时,我只计算 通过 $$N = N^{clinton} + N^{trump}$$ 最小值作为最可能的投票数而不是登记时的投票者。(假设此时这些受访者选择一个除了上述候选人之外的第三人)
如果同一个投票者在同一个州多天重复投票,那么重复的部分将不会计算,只会取最近一天的投票情况。
为了统计过去若干天实际的投票情况,我设置投票日期中点为一天的开始和结束之间。
模型
模型在 polls.stan
文件中,它的后向部分可以用来自未观测的潜在投票意愿聚合投票历史,前向部分可以用来预测这些潜在投票意愿将在选举当天如何表现。前向后向组件通过关于投票意愿演进的先验关联在一起:在每个州,潜在投票意向服从随机游走规律。随机游走的逆向始点是最后一个州的投票意向,它是通过一系列基于时间序列为基本面的先验推断选举预测模型。
该模型融合了各州与全国的历史数据作为先验概率来决定投票意向的演变过程并预测最终选举结果。
向后部分:聚合选票
对于选票$i$,
$N^{clinton}_{i}$ 表示受访者宣称他们打算给希拉里的投票数量,并且它服从二项分布:
$$N^{clinton}_i \sim \textrm{Binomial}(N_i, \pi^{clinton}_i)$$
$N_i$ 表示样本大小,$π^{clinton}_π$ 表示克林顿在这些投票中的得票份额。模型将区别对待全国与各州的选票。
州的民意调查
如果选票$i$是州选票, 这里就选用日/州/投票人的多因子模型:
$$\textrm{logit} (\pi^{clinton}_i) = \μ_a[t_i] + \μ_b[t_i, s_i] + \μ_c[p_i] + u_i + e[s_i]$$
这里就是通过log函数将 $π^{clinton}_π$ 用似然函数与先验概率加法简化表示。其中,$μ_a[t_i]$表示全国选票的概率,
$mu_b[t_i, s_i]$表示各州选票的概率,$mu_c[p_i]$表示民调机构带动效应,$u_i$表示整体的一个随机误差,$ e[s_i]$表示各州投票的一个随机误差。($e$越大,希拉里•克林顿(Hillary Clinton)的真实民调分数被高估得越多)。
$t_{last}$ 表示最后投票日的投票情况,因此,就全国而言 $μ_a[tlast]$会被置为0, 因此这个希拉里在指导选举日的各州选票$s$应该如下(去除了机构效应和测量噪声的影响)
$pi^{clinton}_{ts} = textrm{logit}^{-1} (μ_b[t, s])$
为了减少参数的数量,该模型只需要每周值$μ_b$,所以有:
$$\μ_b[t, s] = \μ_b^{weekly}[w_t, s]$$
其中$w_t$表示一周中的第$t$天。
英文原文地址