土耳其选前一周,我把三份民调误差带摊开核对

伊斯坦布尔时间周一晚,三家机构在同一周内发布的选前民调摆在我面前:A机构样本量 2,400、面访;B机构 1,800、电话;C机构 3,000、线上混合。三份对同一组政党联盟的支持率差距最大到 4.1 个百分点,而它们各自标注的误差带只有 ±2 左右。这就是我要处理的具体现象:不是谁对谁错,而是误差带被写得比实际分歧窄。

我的做法是先把每份民调的元数据抽成一张表,再做可比化,而不是直接比数字。片段如下,能直接套用:

import pandas as pd
polls = pd.read_csv("polls_tr.csv")
# 字段:firm, n, mode, field_start, field_end, margin, share
polls["field_days"] = (pd.to_datetime(polls.field_end) - pd.to_datetime(polls.field_start)).dt.days
polls["design_effect"] = polls["mode"].map({"face":1.3,"phone":1.5,"online":1.8})
polls["se_adj"] = (polls["margin"] / 1.96) * polls["design_effect"].pow(0.5)
polls["ci_low"] = polls["share"] - 1.96 * polls.se_adj
polls["ci_high"] = polls["share"] + 1.96 * polls.se_adj

设计效应系数是我按面访、电话、线上三类执行方式给的粗略折算,不是机构口径;它的作用只是把「同一误差带」拉回到同一量纲。第二步是把 fieldwork 窗口对齐:只保留同一周内的样本,跨周的合并会掩盖事件冲击。第三步把三家的调整后区间并排画出来,看重叠区,而不是看点估计。

为什么这样做:民调误差带通常只写抽样误差,不含设计效应和无应答偏差,所以公开的 ±2 实际可能是 ±3 到 ±4。代价是我引入了自己的系数,结论不再是「谁的民调准」,而是「在什么假设下三份数据能共存」。这比给一个排名更慢,但能避免把噪声当信号。

失效的地方很具体:小党支持率低于 5% 时,区间会宽到没有判别力;线上样本在年轻群体中过采样,我的 1.8 系数偏保守,可能仍低估偏差;另外 fieldwork 跨过突发事件时,任何调整都救不回来——我踩过的坑是把一次跨周末的样本合并,结果区间完全错位。

你手上如果有某家机构公开的问卷全文,能不能告诉我它加权用的年龄分层是几档?这决定了我上面那个设计效应系数该往哪边调。

0
赞同度 100% · 0 条评论 · 1 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。