作者raiderho (冷颜冷雨)
看板Statistics
标题[讨论] 绿营初选民调分析1
时间Mon Jun 17 05:29:39 2019
原文发在八卦版,与本版主题相关,因此稍作改写转来此处。
本文属於检查模型与抽样结果的合理性,
(讨论: 若根据客观公正的抽样模型,五家民调数字相当一致的可能性多大)
没再横生枝节讨论模型的外部问题
(不讨论抽样合理性、机构效应,有兴趣回头请移驾到八卦版看相关推文回文)。
下一篇我将继续报告更深入的实验结果。
※ [本文转录自 Gossiping 看板 #1T1KJhKc ]
作者: raiderho (冷颜冷雨) 看板: Gossiping
标题: Re: [新闻] 绿初选民调5家结果超整齐 民调专家当场大笑三声
时间: Sun Jun 16 03:20:07 2019
游盈隆可能在民调上确实有经验,
然而,他只有实务经验,没有最初等的理论知识。
他习惯的是千人初的样本,
将这个经验直接套入此次各民调机构皆三千人的样本,
对真实情况的推估一定会出错。
三千人样本标准差大概是千人样本标准差的六成左右,
因此,五个机构的民调数字会比「他认定的民调数字分散程度」集中。
不酸游盈隆了,但是还是要回覆一下他质疑的点。还是请出陈水扁吧:
https://www.ftvnews.com.tw/news/detail/2019614P08M1
将陈水扁的观点具体化,配合民调数字,他的质疑是:
每一个候选人在这五家民调支持度全距非常小,
(陈水扁说法是 2%, 事实上约莫是 2.5%)
陈水扁认为这个事件发生的可能性很小,真是如此吗?
先给个
简单结论:
在正常的抽样程序下,
「五项机构民调最高最低差距 < 2.5%」的可能性至少有五成 (最低都超过 50.4%),
这是大概率事件。
想用阴谋论解释民调结果的人,提点别的论证吧。
===
正式论证:
我们只看 (蔡韩柯) 这组对比结果,因为,同时纳入 (蔡韩柯) 与 (赖韩柯)
涉及投票行为的策略,需要对模型做更多假设。
本篇旨不在此,相关处理留到下一篇。
(直觉上,两组投票结果是高度相关的,假设策略性投票的人不多,
若一组民调差距有限,另一组的民调差距也有限。)
假设三个人的支持度如同民进党中央给的 (v1, v2, v3)。
(底下的模型2 可以看到,这个假设其实不重要。)
问题:
这三个人在五项民调的最高最低差异皆不到 2.5% 的可能性。
一次实验:
以 multinomial(3000*5, (v1, v2, v3, 1-v1-v2-v3)) 分配抽出 outcome,
若各候选人在5机构3000样本获得的最高与最低支持度的差距皆 < 2.5%,
称为 True.
可能性:
进行一百万次实验 (一百万个平行世界,每个世界都用同样方式实施民调),
计算有多少个 True, 则 可能性 = True / 1000000.
模型1: 对称考量
考量五项民调都不低於 (v1-0.0125, v2-0.0125, v3-0.0125),
都不高於 (v1+0.0125, v2+0.0125, v3+0.0125), 问可能性为何?
实验跑出来结果约是 0.175
模型2: 不对称考量
放松考量,五项民调的上下差距不超过 2.5%,
不用拘泥於以 (v1, v2, v3) 为中心,这样的可能性为何?
实验结果大幅提高到 0.571
由於模型2 不用拘泥於对称性,
对参数的变化比模型1 更不敏感,
暗示着 (v1, v2, v3) 的「确切真实值」不是很重要,
模型2 可以避免了模型1 的真实参数估计问题,
因此是更稳健的模型。
我对模型2 在所有合理参数区间作了测试,发现可能性至少都有 0.504.
因此,目前可以初步回答,只看一组民调对比结果,在正常的抽样程序下,
「五项机构民调最高最低差距 < 2.5%」是很可能发生的。
python code:
import numpy as np
diff = 0.025
v1, v2, v3 = 0.3568, 0.2451, 0.2270
v4 = 1 - v1 - v2 - v3
para = np.array([v1, v2, v3, v4])
lower_bound = np.array([[v1 - diff/2, v2 - diff/2, v3 - diff/2, 0]] * 5)
upper_bound = np.array([[v1 + diff/2, v2 + diff/2, v3 + diff/2, 1]] * 5)
round = 1000000
sample_size = 3000
agency = 5
''' model 1: symmetric '''
result_1 = 0
for i in range(round):
poll = np.random.multinomial(sample_size, para, agency) / sample_size
q = np.all(np.greater_equal(poll, lower_bound)) *
np.all(np.less_equal(poll, upper_bound))
result_1 += q
prob_1 = result_1 / round # prob_1 is around 0.175
''' model 2: asymmetric '''
result_2 = 0
for i in range(round):
poll = np.random.multinomial(sample_size, para, agency) / sample_size
q = np.all((np.ptp(poll[:,:-1], axis = 0)) < diff)
result_2 += q
prob_2 = result_2 / round # prob_2 is around 0.571
''' update '''
专门测试模型2 合理参数空间中,事件发生最低可能性的程式码:
import numpy as np
import time
def poll_check(para, diff, round, sample_size, agency):
result = 0
for i in range(round):
poll = np.random.multinomial(sample_size, para, agency) / sample_size
q = np.all((np.ptp(poll[:,:-1], axis = 0)) < diff)
result += q
return result / round
diff = 0.025
round = 10000
sample_size = 3000
agency = 5
prob_list = []
start = time.time()
for v3 in np.arange(0.2, 0.285, 0.005):
for v2 in np.arange(v3, 0.335, 0.005):
for v1 in np.arange(v2, 0.385, 0.005):
v4 = 1 - v1 - v2 - v3
para = np.array([v1, v2, v3, v4])
prob = poll_check(para, diff, round, sample_size, agency)
prob_list.append(prob)
end = time.time()
print(end - start)
prob_min = min(prob_list) # prob_min is slight above 0.504
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: raiderho (101.136.218.198 台湾), 06/17/2019 05:29:39
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1560720580.A.A4C.html
※ 编辑: raiderho (114.35.73.213 台湾), 06/18/2019 07:01:04