作者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/m.aspx?n=bbs/Statistics/M.1560720580.A.A4C.html
※ 編輯: raiderho (114.35.73.213 臺灣), 06/18/2019 07:01:04