Close

Sondaże – komu w górę, komu w dół na trzy tygodnie przed wyborami

Wczoraj przez przypadek natrafiłem na stronę ewybory.eu, o czym zresztą informowałem na Facebooku. Zatem słowo się rzekło, mamy dane to trzeba je pokazać i zobaczyć, co na trzy tygodnie przed wyborami dzieje się w temacie wyborów do Sejmu i Senatu. Komu rośnie, komu spada poparcie, kto jest pod progiem wyborczym a kto nad nim.

Analiza kodu strony wskazuje, że tabela z danymi o wszystkich sondażach umieszczona na http://ewybory.eu/sondaze/ odwołuje do arkusza osadzonego w repozytorium Google.

Także nasz wskaźnik url do strony w kodzie będzie się odwoływał bezpośrednio do tego repozytorium.

library(tidyverse)
library(rvest)
library(lubridate)

url <- "https://docs.google.com/a/ewybory.eu/spreadsheets/d/1AI3DqsQstn4qh_l_IT0ehjArQ2sgJlzkM2aQ5uVqqqs/htmlembed?single=true&amp;gid=474429389&amp;range=a12:r500&amp;widget=false&amp;chrome=false"

Wykorzystując funkcję html_read() z pakietu rvest pobieramy dane. Teraz trzeba je trochę przekształcić, czyli wybrać interesujące nas kolumny z tabeli, dopasować formaty danych i zastanowić się nad okresem, który chcemy przedstawić. Analizę przeprowadzę uwzględniając ostatnie trzy miesiące. Wydaje się, że jest to wystarczający okres, tym bardziej że obecna kampania jest jedną z najkrótszych w historii. Z kalendarzem wyborczym można się zapoznać między innymi tutaj.

# pobieramy tabelę z treści strony
sondaze <- html %>% html_nodes("table") %>% html_table(fill = T) %>% .[[1]]
# wybieramy własciwe kolumny i wycinamy trzy pierwsze wiersze z tabeli
sondaze <- sondaze[4:nrow(sondaze),c(2:4,6,10,14,16,17)]
# okreslamy nagłowki kolumn
colnames(sondaze) <- c("Osrodek","Data","Metoda","Lewica","Koalicja_Obywatelska","Koalicja_Polska","PIS","Konfederacja")
# dane dla trzech ostatnich miesięcy, dodajemy identyfikator roku i zamieniam na format daty
sondaze <- sondaze %>% filter(grepl(".{2}\\.0[7-9]",Data))
sondaze <- sondaze[1:57,]
sondaze$Data <- dmy(paste0(sondaze$Data,".19"))
# zamiana przecinków na kropki i na typ liczbowy w kolumnach z poparciem
for (ncol in 4:8) {
  sondaze[,ncol] <- as.numeric(gsub(",",".",sondaze[,ncol],fixed = T))
}

Ok, mamy dane, zatem jak kształtowało się procentowe poparcie dla poszczególnych obozów politycznych (partii) wyrażone w sondażach przeprowadzonych przez różne sondażownie. Aby uchwycić tendencję zmian w wynikach różnych ośrodków badań zastosujemy metodę regresji Loess, która w języku polskim określona jest jako regresja lokalnie ważona. Tworzymy zatem wykres.

sondaze %>%
  gather(Partia, Procent, -Osrodek, -Metoda, -Data) %>% 
  mutate(Partia = factor(Partia, levels = c("Koalicja_Polska","PIS","Lewica","Konfederacja","Koalicja_Obywatelska"))) %>% 
  ggplot() +
  geom_point(aes(x = Data, y = Procent, color = Osrodek), show.legend = TRUE) +
  geom_smooth(aes(x = Data, y = Procent, fill = Partia), method = "loess", show.legend = FALSE) +
  theme(legend.position = c(0.8,0.2), legend.title = element_text(face = "bold")) +
  xlab("Data opublikowania sondażu") + ylab("Procent poparcia") +
  facet_wrap(~Partia, scales = "free_y")

I teraz już jest wszystko jasne. Największym wygranym ostatnich trzech miesięcy może czuć się PIS, którego poparcie według krzywej regresji sięga 46%. Drugim w kolejności obozem politycznym, którego poparcie ma również tendencję wzrostową i przekroczyło acz tylko 6% jest Koalicja Polska (PSL, Kukiz’15). Dla Lewicy ostatni sondaż przeprowadzony przez CBOS dużo zmienił, poziom poparcia dla tego obozu politycznego sprowadził do poziomu około 10%. Choć z drugiej strony można by tą wyraźnie odstającą wartość wyeliminować z analizy i wówczas poparcie dla lewicy według krzywej regresji kształtuje się na poziomie 12,2%. Fatalnie wygląda sytuacja Koalicji Obywatelskiej, która praktycznie w całym okresie traciła poparcie, nieznaczną zmianę przynoszą ostatnie sondaże podciągając poparcie do 27,5%. Natomiast sondaże nie dają zbytnio dużych szans Konfederacji, dla której poparcie wciąż jest poniżej progu wyborczego i kształtuje się na poziomie 4%.

Jaką metodą posługują się najczęściej ośrodki badań (sondażownie). Jak wynika z analizy są to przede wszystkim trzy metody:

sondaze %>%
  count(Osrodek, Metoda) %>% 
  ggplot() + 
  geom_tile(aes(Metoda, Osrodek, fill = n)) +  
  scale_fill_gradient(low = "#00FF00", high="#FF0000") +
  xlab("Metoda badawcza") + ylab("Ośrodek badawczy")
Ośrodek badawczy ? CAPI CATI CAWI
Ariadna 1
CBOS 3
Dobra Opinia / PPG 1
Estymator 7
IBRiS 12
IBSP 1
Indicator 1
IPSOS 1
Kantar 3 6
Pollster 6
Social Changes 15

Jak to wyglądało dla naszego przypadku. Najchętniej wykorzystywana jest metoda CATI. W okresie trzech miesięcy została w celu przeprowadzenia badań poparcia dla partii wykorzystana 27 razy, metodę CAWI z kolei zastosowano w 22 przypadkach. Metoda CAWI preferowana jest przede wszystkim przez sondażownię Social Changes oraz Pollster. Metoda CAPI została wykorzystana w siedmiu przypadkach, głównie w badaniach Kantar oraz Centrum Badania Opinii Społecznej (CBOS).

Aktualizacja

Do wyborów już tylko dwa dni. Postanowiłem nie zmieniać metodologii, uwzględnić wszystkie wyniki sondaży, nawet te z wyjątkowo odstającymi wartościami. A zatem jak przedstawia się sytuacja na dwa dni przed wyborami do Sejmu i Senatu w roku 2019. Po kolei (wartości średnie po odrzuceniu 10% najgorszych i najlepszych wyników):

  • PSL – Kukiz – utrzymuje w miarę stabilne 6%
  • PIS – ostatni tydzień lekka zadyszka wskazująca na 44%
  • Lewica – wyraźny wzrost notowań ponad 12%
  • Konfederacja – wciąż pod progiem, aczkolwiek końcówka września i październik przynoszą zdecydowaną poprawę
  • Koalicja Obywatelska – tutaj zdecydowany zjazd poniżej 27%, stąd wniosek że Lewica zyskuje kosztem wyborców, którzy jeszcze nie tak dawno głosowali na Platformę Obywatelską

Metody, którymi posługiwały się sondażownie nie uległy zmianom.

Materiały dodatkowe

dr hab. inż., prof. PCz (Politechniki Częstochowskiej); zainteresowania: gospodarowanie odpadami (praktyczne), danologia, analiza danych (hobbystycznie)

Leave a Reply

Your email address will not be published. Required fields are marked *