[Python] Yuriko Koike Berechnen Sie die Anzahl der Stimmen, die Sie benötigen [matplotlib]

Überblick

Die Wahl des Gouverneurs von Tokio fand statt, aber der vorläufige Bericht von Yuriko Koike kam ziemlich früh heraus. Plötzlich dachte ich: "Wie viele Stimmen soll ich öffnen?", Also gebe ich eine grobe Schätzung. Das erste, was Sie wissen müssen, ist, dass ** die Anzahl der Stimmen, die erforderlich sind, um das richtige Ergebnis zu erzielen, davon abhängt, wie nah das Spiel ist **. Wenn es Leute gibt, die die Anzahl der Stimmen mit überwältigender Mehrheit gewonnen haben, scheint dies sofort entschieden zu werden, und wenn der 1. und 2. Platz nahe beieinander liegen, kann man sich vorstellen, dass Sie es nicht wissen werden, wenn Sie nicht viele Stimmen eröffnen. Angesichts der Wahlen zum Gouverneur von Tokio im Juli 2020 werden wir uns diesmal auf Yuriko Koike (1. Platz) und Kenji Utsunomiya (2. Platz) konzentrieren.

Siehe aktuelle Ergebnisse

Schauen wir uns nun die Ergebnisse an. Ich habe auf die folgende Seite verwiesen. https://www3.nhk.or.jp/news/html/20200705/k10012497581000.html Betrachtet man dies, so scheint Yuriko Koike auf dem 1. Platz ungefähr 60% und Kenji Utsunomiya auf dem 2. Platz ungefähr 15% zu sein.

Ermitteln Sie das Konfidenzintervall mithilfe von Statistiken

Was ist überhaupt "** wahrscheinlich **"? Lassen Sie uns von diesem Punkt aus denken. Um dies festzustellen, müssen wir den "Fehler" oder das "Konfidenzintervall" berücksichtigen. Wenn Sie beispielsweise 100 Stimmen von der Gesamtzahl öffnen und Yuriko Koike 60 Stimmen hat, können Sie sehen, dass "Yuriko Koike ungefähr 60% beträgt". Es ist jedoch gefährlich, allein damit genau 60% zu entscheiden. Wenn alle Stimmen geöffnet sind, können es tatsächlich etwas mehr als 62% oder 59% sein. Wenn entschieden wird, dass es zwischen 59-61% liegen wird, sagen wir "60% Fehler ± 1%". Dies ist ein Schreibstil, den Sie auch in der Grundschule Mathematik lernen können. Auf der anderen Seite, wenn es sich um eine Methode handelt, die eine Methode verwendet, die als statistischer Test bezeichnet wird Wir sagen: "Es besteht eine 95% ige Chance, dass die Stimmenquote von Yuriko Koike zwischen 59 und 61% liegt." Zu diesem Zeitpunkt wird der Abschnitt 59-61 als Vertrauensabschnitt bezeichnet. Diesmal habe ich dies in Python implementiert. Wenn das Konfidenzintervall XX% beträgt und die Abstimmungsrate infolge des Öffnens von N Stimmen r% beträgt, können die oberen und unteren Grenzen des Konfidenzintervalls durch das folgende Verfahren erhalten werden. Ich werde die detaillierten Formeln vorerst belassen, aber da sie aus fast jedem Statistiklehrbuch abgeleitet werden können, denke ich, dass diejenigen, die interessiert sind, ihr Verständnis von Statistik vertiefen werden. Beispielsweise können die folgenden Websites hilfreich sein:

def getR(r, N):
    """
    return:Vertrauen x%Unter- und Obergrenze der Abstimmungsrate in,Rückgabe in der Reihenfolge der unteren und oberen Grenze
    r:Abstimmungsrate berechnet aus dem Ergebnis der Eröffnungsstimmen
    N:Anzahl der geöffneten Stimmen
Konfidenzintervall(x)Wie man sich entscheidet
    k = 1.96 :Konfidenzintervall 95%Im Falle von
    k = 2.58 :Konfidenzintervall 99%Im Falle von
    k = 3.29 :Konfidenzintervall 99.9%Im Falle von
    """
    k = 3.29 #99.9%
    #Unter- und Obergrenze
    lower_limit = r - k * math.sqrt(r*(1-r)/N)
    upper_limit = r + k * math.sqrt(r*(1-r)/N)
    return lower_limit, upper_limit

Versuchen Sie, mit matplotlib zu visualisieren

Nachdem wir die Funktion in Python definiert haben, visualisieren wir sie. Zeichnen wir die ungefähre Stimmenquote und das Vertrauen von Yuriko Koike (Yuriko) und Kenji Utsunomiya (Kenji). Betrachten wir die horizontale Achse als die Anzahl der zu öffnenden Stimmen. Die durchschnittliche Stimmenzahl wird unabhängig von der Anzahl der geöffneten Stimmen auf Yuriko Koike "0,6" und Kenji Utsunomiya "0,15" festgelegt. (Ursprünglich sollte sich dieser Wert jedes Mal ändern, wenn eine Abstimmung eröffnet wird, aber es gibt keine Möglichkeit, ihn zu ermitteln ...) Nun, es sollte nicht so weit weg sein. Das Konfidenzintervall wird normalerweise bei 95% berechnet, aber berechnen wir es bei 99,9%. Es ist nur "Gewinnen ** bestätigt **", daher ist es ein wenig beängstigend, es mit einer Chance von 5% zu entfernen. Sie können den Prozentsatz davon leicht ändern, indem Sie den Wert von "k" mit der oben definierten Funktion ändern. Übrigens wird der Wert dieses k aus der Standardnormalverteilungstabelle gezogen. https://www.koka.ac.jp/morigiwa/sjs/standard_normal_distribution.htm

import numpy as np
import matplotlib.pyplot as plt
import math

#Ungefähre Stimmenquote
yuriko_rate = 0.6
kenji_rate = 0.15

yuriko_upper = []
yuriko_lower = []
kenji_upper = []
kenji_lower = []

#100 Personen bis zu 1000 Personen
N_open = [i for i in range(100,1000, 100)]
for n_open in N_open:
    yuriko_lower.append( getR(yuriko_rate, n_open)[0])
    yuriko_upper.append( getR(yuriko_rate, n_open)[1])
    kenji_lower.append(  getR(kenji_rate, n_open) [0])
    kenji_upper.append(  getR(kenji_rate, n_open) [1])

yuriko_upper = np.array(yuriko_upper)
yuriko_lower = np.array(yuriko_lower)
yuriko_mean = (yuriko_lower + yuriko_upper) / 2
kenji_upper = np.array(kenji_upper)
kenji_lower = np.array(kenji_lower)
kenji_mean = (kenji_lower + kenji_upper) / 2

plt.plot(N_open, yuriko_mean,
         color='blue', marker='o',
         markersize=5, label='Yuriko')

plt.fill_between(N_open,
                 yuriko_upper,
                 yuriko_lower,
                 alpha=0.15, color='blue')

plt.plot(N_open, kenji_mean,
         color='green', linestyle='--',
         marker='s', markersize=5,
         label='Kenji')

plt.fill_between(N_open,
                 kenji_upper,
                 kenji_lower,
                 alpha=0.15, color='green')

plt.grid()
plt.xlabel('Number of votes')
plt.ylabel('Rates')
plt.legend(loc='upper right')
plt.ylim([0., 1.0])
plt.tight_layout()
plt.show()

Das Ausgabeergebnis ist wie folgt. Yurikos Untergrenze ist höher als Kenjis Obergrenze, wenn nur 100 Stimmen geöffnet werden, obwohl der Vertrauensbereich 99,9% beträgt, was ziemlich streng ist. Wenn der Wert auf der horizontalen Achse zunimmt, nimmt die Genauigkeit zu, sodass auch dieser Abschnitt konvergiert. Sie können jedoch sehen, dass Yuriko mit einer geringen Anzahl von Stimmen als Sieger bestätigt wird.

yuriko1.png

Mal sehen, was passiert, wenn Yuriko und Kenji etwas näher sind. Diesmal, zum Zeitpunkt des vorläufigen Berichts, lag Yuriko bei 60% und Kenji bei 15%, was für Yuriko ein überwältigender Sieg war.

yuriko2.png

Betrachtet man die Grafik, so überschneiden sich die Vertrauensbereiche der beiden Personen, selbst wenn 1000 Stimmen geöffnet werden. Dies zeigt, dass selbst wenn Yuriko aufgrund der Eröffnung von 1000 Stimmen mehr Stimmen als Kenji hat, dies statistisch immer noch nicht ausreicht.

Fazit

Bei der Wahl des Gouverneurs von Tokio wurde diesmal berichtet, dass Yuriko Koike relativ früh gewählt wurde. Angesichts des Unterschieds in der Abstimmungsrate zwischen dem 1. und 2. Platz ist jedoch zu erkennen, dass die Anzahl der erforderlichen Stimmen recht gering ist. Es gibt einige Leute auf der Welt, die sagen: "Die Wahlergebnisse können nicht so schnell herauskommen! Es ist eine unfaire Wahl! Wie viele Leute gibt es Ihrer Meinung nach!", Aber diese Leute sind diejenigen, die Statistiken studieren. Ich möchte, dass du es tust. Der Wortlaut, den ich zuvor auf Twitter gesehen habe, war überzeugend "Muss ich alles trinken, um die Misosuppe zu probieren?" Das ist. Sie können feststellen, ob die Misosuppe salzig ist, indem Sie einen Bissen probieren, oder? Egal wie viele Bürger es gibt, es ist nicht notwendig, alle Stimmen zu öffnen, um das richtige Bulletin zu senden.

wichtiger Punkt

Die obige Berechnung enthält eine wichtige Annahme. Das heißt, ** es gibt keine Verzerrung in den Stimmen, die geöffnet werden **. Selbst wenn Sie beispielsweise die gleichen 100 Stimmen öffnen, wird das richtige Ergebnis nicht erzielt, wenn eine Tendenz wie "Öffnen Sie die Stimmen aus den lokalen Stimmen von Kenji Utsunomiya" oder "Öffnen Sie die Stimmen erst in den 20er Jahren" vorliegt. Es ist schwierig, die Verzerrung vollständig zu beseitigen, sie sollte jedoch zufällig extrahiert werden, um sie so weit wie möglich zu reduzieren. In Anbetracht einer solchen Tendenz kann die Anzahl der tatsächlich für diesen vorläufigen Bericht erforderlichen Stimmen etwas höher sein, aber wie Sie aus der obigen Abbildung ersehen können, gibt es selbst bei 100 Stimmen einen signifikanten Unterschied, sodass es auf keinen Fall erforderlich ist, so viele Stimmen zu eröffnen. Machen wir das. Um die Tendenz am Beispiel der Miso-Suppe zu erklären: Wenn Sie Miso mit Dobon in heißes Wasser geben, ** kann der gleiche Biss sehr salzig oder geschmacklos sein **, wenn Sie ihn nicht richtig umrühren **. Mischen Sie so viel wie möglich, um es vor der Verkostung gleichmäßig zu machen, oder? Abstimmungen und aktuelle Nachrichten sind gleich.

Bonus

Es ist ein wenig fortgeschritten, aber die unteren und oberen Grenzen des Vertrauensintervalls, die im obigen "getR ()" angegeben wurden

lower_limit = r - k * math.sqrt(r*(1-r)/N)
upper_limit = r + k * math.sqrt(r*(1-r)/N)

Ich möchte auf die Ableitung von eingehen. Konvertieren Sie den Code in eine Formel. Sei R die wahre Stimmenquote (wenn alle Stimmen geöffnet sind) Das Konfidenzintervall wird mit (untere Grenze) <R <(obere Grenze) multipliziert. Mit anderen Worten

r - k\sqrt{r(1-r)/N}<R<r + k\sqrt{r(1-r)/N}

Kann geschrieben werden. Ich werde es ein wenig verwandeln.

- k\sqrt{r(1-r)/N}< R-r < k\sqrt{r(1-r)/N} \\
- k< \frac{R-r}{\sqrt{r(1-r)/N}} < k

Kann geschrieben werden. Betrachten Sie die Bedeutung dieser Formel. "Zwischen -k und k" macht tatsächlich Sinn. Dieses k stammt aus der ** Standardnormalverteilungstabelle **, wie oben etwas erwähnt. Die Standardnormalverteilung repräsentiert eine Normalverteilung mit einem Durchschnittswert von 0 und einer Varianz (= σ ^ 2) von 1. Mit anderen Worten, fällt dieses k innerhalb des Konfidenzintervalls x% in der Standardnormalverteilung, wenn der Wert auf der horizontalen Achse innerhalb liegt? Es ist eine Berechnung davon. Mit anderen Worten, betrachten Sie die obige Formel

\frac{R-r}{\sqrt{r(1-r)/N}}

Folgt der Standardnormalverteilung. Sie können sehen, dass. Betrachten wir nun, ob dieser Wert wirklich der Standardnormalverteilung folgt. Wenn die Varianz σ ^ 2, der erwartete Wert μ und der beobachtete Wert X ist, folgt im Allgemeinen die folgende Formel der Standardnormalverteilung.

\frac{X-\mu}{\sigma}

Übrigens ist die Normalverteilung symmetrisch, so dass die Moleküle auch dann gleich sind, wenn sie ersetzt werden. In Anbetracht dessen entspricht r von R-r der Stimmenrate, wenn die Stimme in der Mitte geöffnet wird (nur N Stimmen), und R entspricht μ-X, wie es ist, weil es die wahre Stimmenrate ist. Dann scheint der verbleibende √r (1-r) / N-Teil σ zu entsprechen. Lassen Sie uns dies auch leiten.

Die Verteilung durch Wiederholen der beiden Auswahlmöglichkeiten "ob die offenbarte Abstimmung Yuriko Koike ist" wie diesmal kann als Binomialverteilung betrachtet werden. Im Allgemeinen sind der Mittelwert und die Varianz in einer Binomialverteilung

\mu = r \\
\sigma^2 = r(1-r)

Kann ausgedrückt werden als. r ist die Erfolgswahrscheinlichkeit eines Versuchs. In diesem Fall entspricht dies "der Wahrscheinlichkeit, dass die Abstimmung eröffnet wird, Yuriko Koike". Dieses Mal berechnen wir die Streuung, wenn N Stimmen geöffnet werden. Im Allgemeinen kann die Varianz gemäß dem Mittelwert (Standardfehler) mit σ / √N berechnet werden. Also in diesem Fall

\sqrt{r(1-r)/N}

Und es stimmte mit der obigen Formel überein. Von Oben

\frac{R-r}{\sqrt{r(1-r)/N}}

Wird abgeleitet, um der Standardnormalverteilung zu folgen, und die Definition zeigt, dass das Konfidenzintervall mit -k <R <k berechnet werden kann.

Recommended Posts

[Python] Yuriko Koike Berechnen Sie die Anzahl der Stimmen, die Sie benötigen [matplotlib]
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Berechnen Sie die Anzahl der Änderungen
[Python] Berechnen Sie die Anzahl der Stellen, die zum Ausfüllen von Nullen erforderlich sind. [Hinweis]
Geben Sie die Anzahl der CPU-Kerne in Python aus
Code zum Überprüfen des Betriebs von Python Matplot lib
[Python] Ein Programm, das die Anzahl der Täler zählt
So ermitteln Sie die Anzahl der Stellen in Python
[Python] Berechnen Sie den Durchschnittswert des Pixelwerts RGB des Objekts
Berechnung der minimal erforderlichen Stimmenzahl aus der Stimmenzahl
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
[Python] Ermittelt die Anzahl der Aufrufe aller veröffentlichten Artikel
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Wie viel kennen Sie die Grundlagen von Python?
der Zen von Python
Installation von matplotlib (Python 3.3.2)
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Stellen wir uns die Anzahl der mit Matplotlib mit dem Coronavirus infizierten Personen vor
10. Zählen der Anzahl der Zeilen
Auf dem Weg zum Ruhestand von Python2
Holen Sie sich die Anzahl der Ziffern
Ändern Sie den Stil von matplotlib
Über die Funktionen von Python
Die Kraft der Pandas: Python
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Ermitteln Sie die Anzahl der PVs von Qiita-Artikeln, die Sie mit API veröffentlicht haben
[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
Tipps: [Python] Berechnen Sie den Durchschnittswert des angegebenen Bereichs mit Bedgraph
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python