In Wahlzeiten wird sehr oft über den Fehler bei Umfragedaten diskutiert. Dabei gibt es viele Fehlerquellen wie die Wahl der falschen Stichprobe (gewisse Wählerschichten sind zb schwerer zu befragen als andere), der Befragte sagt nicht die Wahrheit und so weiter.
Neben diesen Fehlern gibt es auch den rein mathematischen Stichprobenfehler, der daraus folgt, dass eben nicht alle Teilnehmer einer Wahl befragt werden können, sondern eben nur ein kleiner Teil, eben die Stichprobe.
Am einfachsten kann man sich den Stichprobenfehler bei sehr kleinen Stichproben vorstellen: Befragt man zur Nationalratswahl zum Beispiel nur drei Leute könnte man als Antworten ÖVP, FPÖ und Stronach erhalten. Der Rückschluß das jeder dieser drei Parteien also 33.3% aller Stimmen erhalten werden ist nicht sonderlich stichhaltig.
Der Fehler ist aber auch bei deutlich größeren Stichproben nicht zu vernachlässigen hier als Beispiel eine Bevölkerung von 5.000.000 von den denen
SPO |
27 |
OVP |
22 |
FPO |
21 |
Grune |
14 |
Stronach |
6 |
BZO |
4 |
KPO |
1 |
PIRAT |
1 |
NEOS |
4 |
wählen würden. Diese Verteilung ist also die angenomme „Wahrheit“ (ich habe eine der letzten Umfragen als Basis genommen). Zum Beispiel bedeudet das, dass in dieser Bevölkerung 1.350.000 Menschen die SPÖ wählen würden.
Zieht man jetzt aus dieser Bevölkerung jeweils Stichproben von 500 Befragten, so kann man zum Beispiel diese zehn folgenden Resultate erhalten:
SPO |
28.8 |
25.6 |
23.2 |
30.2 |
31.2 |
25.8 |
26.6 |
27.2 |
26.2 |
26.4 |
31.6 |
OVP |
24.4 |
23.6 |
24.8 |
20 |
19.6 |
23.6 |
16 |
25.2 |
25 |
20.6 |
21.4 |
FPO |
21.2 |
19.4 |
21.4 |
22 |
18.6 |
21 |
23.2 |
20.4 |
22.4 |
20.6 |
17.4 |
Stronach |
4.8 |
7 |
6.4 |
5.8 |
6.4 |
5.4 |
7.8 |
7 |
5.4 |
6.4 |
5.6 |
Grune |
11.8 |
15.6 |
14.4 |
15.2 |
14.8 |
13.2 |
14.8 |
11.4 |
13.2 |
15 |
14.2 |
BZO |
3.2 |
4 |
4 |
2.2 |
3.8 |
5.4 |
3.8 |
3.2 |
3.4 |
5 |
4 |
KPO |
1.2 |
1 |
1.6 |
0.2 |
1.4 |
0.8 |
1.2 |
0.8 |
1 |
1.4 |
1.6 |
PIRAT |
1 |
1 |
1.4 |
1.2 |
0.4 |
0.6 |
2.2 |
0.6 |
0.4 |
0.6 |
0.4 |
NEOS |
3.8 |
3 |
3 |
3.4 |
4 |
4.4 |
4.6 |
4.4 |
3.2 |
4.2 |
4 |
|
|
|
|
|
|
|
|
|
|
|
|
Jede Spalte dieser Tabelle ist also das Ergebnis einer „Umfrage“. Alleine die rein mathematische Schwankungsbreite dieser Befragung ist beispielsweise bei der SPÖ 23.20 bis 31.60% oder bei den NEOS 3.00 bis 4.60%! Dabei geht man wie gesagt aber auch noch davon aus, dass die Auswahl der Stichprobe perfekt ist, und auch keiner der Teilnehmer die Unwahrheit sagt.
Die Stichprobengröße von 500 Teilnehmern habe ich deswegen gewählt weil es ersten eine oft gewählte Größe ist, und zweitens weil es mir auch als realistisches Beispiel für den Fehler einer „realen“ Umfrage mit 1000 Teilnehmern scheint.
Sieht man sich meine Zahlen an, fragt man sich wie es die Meinungsforschungsinstitute schaffen derart ähnliche Resultate zu produzieren.
Wie stichhaltig die Vorhersagen sind, hat man ohnedies bei allen letzten Wahlen gesehen.
Für diejenigen die es genau interessiert hier das Perl Script mit dem ich die Daten generiert haben – falls sich jemand damit genauer auseinandersetzen möchte, kann er mich gerne kontaktieren
use strict;
use warnings;
use Storable;
use Data::Dumper;
my $sample_size = 500;
my $sample_count = 10;
my $filename = 'wahlausgang2013.nstore';
my $population_count = 5_000_000;
my %p = (
SPO => 27,
OVP => 22,
FPO => 21,
Grune => 14,
Stronach => 6,
BZO => 4,
KPO => 1,
PIRAT => 1,
NEOS => 4,
);
my $population = [];
if (! -f $filename) {
my @dist;
foreach my $party (keys %p) {
printf "%s: %s%%\n", $party, $p{$party};
for (my $i = 1 ; $i <= $p{$party}; $i++) {
push (@dist, $party);
}
}
my $stats = {};
for (my $i = 0; $i < $population_count; $i++) {
my $r = int(rand(100));
die "*** out of bounds" if $r < 0 || $r > 100;
push $population, $dist[$r];
$stats->{$dist[$r]}++;
}
foreach my $party (keys %$stats) {
printf "%s [%s]%%\n", $party, $stats->{$party}/$population_count;
}
Storable::nstore($population, $filename);
} else {
$population = Storable::retrieve($filename);
}
printf "Population Size [%s], Sample Size [%s]\n", $population_count, $sample_size;
my $stats = [];
for (my $j = 0; $j <= $sample_count; $j++) {
for (my $i = 0; $i <= $sample_size; $i++) {
my $r = int(rand($population_count));
$stats->[$j]->{$population->[$r]}++;
}
}
foreach my $party (keys %{$stats->[0]}) {
printf "%s", $party;
for (my $j = 0; $j <= $sample_count; $j++) {
printf " %3.2f", $stats->[$j]->{$party}*100/$sample_size;
}
print "\n";
}