Det er på tide med Eurovision! Glam, glitter og pappmusikk - og en anledning til å ha en liten konkurranse, og lære litt om statistikk for rankinger.
Eurovision 2021 - eller Melodi Grand Prix, som vi kaller det i Norge, går snart av stabelen. Og det bør jo bli fantastisk, etter flere år uten musikken.
Riktignok er musikken enestående forglemmelig, men det er allikevel gøy. Derfor hadde vi en liten konkurranse på jobb om å tippe på vinnere i konkurransen.
Resultatene hentes fra Eurovisionworld.com. Deltakelsen i tippekonkurransen ble henta inn i Easyfact, og er anonymisert.
Her har jeg også tatt i bruk read_excel-funksjonen fra readxl-pakka. Tidligere har jeg hatt et svare strev med å importere excel-filer til R. Derfor har jeg alltid konvertert data til csv-format for import. Men denne funksjonen ser ut til å funke veldig bra nå.
For den som ikke har sluttplasseringene i hodet, så ble resultatlista slik:
land | plass |
---|---|
Italia | 1 |
Frankrike | 2 |
Sveits | 3 |
Island | 4 |
Ukraina | 5 |
Finland | 6 |
Malta | 7 |
Litauen | 8 |
Russland | 9 |
Hellas | 10 |
Bulgaria | 11 |
Portugal | 12 |
Moldova | 13 |
Sverige | 14 |
Serbia | 15 |
Kypros | 16 |
Israel | 17 |
Norge | 18 |
Belgia | 19 |
Aserbajdsjan | 20 |
Albania | 21 |
San Marino | 22 |
Nederland | 23 |
Spania | 24 |
Tyskland | 25 |
Storbritannia | 26 |
Det er to spørsmål som er interessante å se på her:
Det første spørsmålet er veldig lett å svare ut - det er bare å summere poengene og sette på en plassering
analyse_df = group_by(df, land) %>%
summarise(
poeng = sum(poengverdi)
) %>%
mutate(
plass = rank(desc(poeng), ties.method = "min")
) %>%
left_join(
., select(resultat_df, land, faktisk_plass = plass), by = "land"
) %>%
arrange(plass)
knitr::kable(select(analyse_df, land, plass, faktisk_plass))
land | plass | faktisk_plass |
---|---|---|
Malta | 1 | 7 |
Island | 2 | 4 |
Portugal | 3 | 12 |
Frankrike | 4 | 2 |
Bulgaria | 5 | 11 |
Sveits | 6 | 3 |
Ukraina | 7 | 5 |
Italia | 8 | 1 |
Hellas | 9 | 10 |
Sverige | 10 | 14 |
Kypros | 11 | 16 |
San Marino | 12 | 22 |
Storbritannia | 12 | 26 |
Aserbajdsjan | 14 | 20 |
Litauen | 14 | 8 |
Norge | 14 | 18 |
Serbia | 14 | 15 |
Nederland | 18 | 23 |
Finland | 19 | 6 |
Russland | 20 | 9 |
Albania | 21 | 21 |
Belgia | 21 | 19 |
Israel | 21 | 17 |
Tyskland | 21 | 25 |
Moldova | 25 | 13 |
Spania | 25 | 24 |
Hvis Analyseavdelinga hadde fått bestemme, hadde Maltas !Je me casse! vunnet, foran pussig teknobit-dans fra Island, og svarthvitt crooning fra Portugal. Ikke narkotikafrie rockere fra Italia, Voila-Frankrike og tårevåte Sveits.
Dette er i grunnen et interessant spørsmål. Først lager vi et utpivotert datasett, hvor de ulike deltakerne er med, sammen med totalpoengene:
temp = group_by(df, deltaker) %>%
mutate(
plass = rank(desc(poengverdi), ties.method = "min")
) %>%
select(
deltaker, land, plass
)
temp = bind_rows(select(resultat_df, -variabel), temp)
temp = pivot_wider(temp, names_from = deltaker, values_from = plass)
knitr::kable(temp)
land | totalt | Glam International | Magiske Soppen | Analytix | Brandenburger Tor | Eivindmaskin | RS |
---|---|---|---|---|---|---|---|
Italia | 1 | 10 | 12 | 2 | 11 | 5 | 2 |
Frankrike | 2 | 10 | 15 | 2 | 1 | 10 | 1 |
Sveits | 3 | 10 | 5 | 2 | 2 | 11 | 4 |
Island | 4 | 1 | 7 | 2 | 5 | 4 | 5 |
Ukraina | 5 | 10 | 15 | 1 | 3 | 11 | 12 |
Finland | 6 | 10 | 15 | 2 | 11 | 11 | 7 |
Malta | 7 | 2 | 2 | 2 | 4 | 2 | 11 |
Litauen | 8 | 4 | 15 | 2 | 11 | 11 | 12 |
Russland | 9 | 10 | 15 | 2 | 11 | 8 | 12 |
Hellas | 10 | 10 | 8 | 2 | 11 | 3 | 12 |
Bulgaria | 11 | 10 | 5 | 2 | 10 | 1 | 6 |
Portugal | 12 | 10 | 1 | 2 | 6 | 7 | 3 |
Moldova | 13 | 10 | 15 | 2 | 11 | 11 | 12 |
Sverige | 14 | 5 | 15 | 2 | 8 | 11 | 9 |
Serbia | 15 | 10 | 4 | 2 | 11 | 11 | 12 |
Kypros | 16 | 3 | 15 | 2 | 9 | 11 | 12 |
Israel | 17 | 8 | 15 | 2 | 11 | 11 | 12 |
Norge | 18 | 10 | 15 | 2 | 7 | 11 | 8 |
Belgia | 19 | 9 | 12 | 2 | 11 | 11 | 12 |
Aserbajdsjan | 20 | 6 | 12 | 2 | 11 | 11 | 9 |
Albania | 21 | 10 | 10 | 2 | 11 | 11 | 12 |
San Marino | 22 | 10 | 3 | 2 | 11 | 11 | 12 |
Nederland | 23 | 10 | 15 | 2 | 11 | 6 | 12 |
Spania | 24 | 10 | 15 | 2 | 11 | 11 | 12 |
Tyskland | 25 | 10 | 10 | 2 | 11 | 11 | 12 |
Storbritannia | 26 | 7 | 9 | 2 | 11 | 9 | 12 |
Kendall’s Tau, eller rang-korrelasjons-koeffisient, er den en bruker for å korrelere ranker. Den kan måle styrken på forbindelsen mellom to ordinale variabler, i en bivariat krysstabell - som du vil få hvis du f.eks. har to personer som har rangert Eurovision-bidrag på en skala fra 1 til 12.
For å gjøre det mer forvirrende, og fordi økonomer liker å sette navnet sitt på ting, finnes det tre ulike implementeringer av Tau:
I base-R er det Kendalls tau b som er implementert, antakeligvis fordi den håndterer “ties” - noe som hyppig kommer opp.
Vi regner like greit ut for alle, med hjelp av DescTools-pakka, som har implementert alle tre:
kor_matrise = data.frame(
deltakere = c("Glam International", "Magiske Soppen", "Analytix", "Brandenburger Tor", "Eivindmaskin", "RS"),
tau_a = c(
DescTools::KendallTauA(temp$`Glam International`, temp$totalt),
DescTools::KendallTauA(temp$`Magiske Soppen`, temp$totalt),
DescTools::KendallTauA(temp$Analytix, temp$totalt),
DescTools::KendallTauA(temp$`Brandenburger Tor`, temp$totalt),
DescTools::KendallTauA(temp$Eivindmaskin, temp$totalt),
DescTools::KendallTauA(temp$RS, temp$totalt)
),
tau_b = c(
DescTools::KendallTauB(temp$`Glam International`, temp$totalt),
DescTools::KendallTauB(temp$`Magiske Soppen`, temp$totalt),
DescTools::KendallTauB(temp$Analytix, temp$totalt),
DescTools::KendallTauB(temp$`Brandenburger Tor`, temp$totalt),
DescTools::KendallTauB(temp$Eivindmaskin, temp$totalt),
DescTools::KendallTauB(temp$RS, temp$totalt)
),
tau_c = c(
DescTools::StuartTauC(temp$`Glam International`, temp$totalt),
DescTools::StuartTauC(temp$`Magiske Soppen`, temp$totalt),
DescTools::StuartTauC(temp$Analytix, temp$totalt),
DescTools::StuartTauC(temp$`Brandenburger Tor`, temp$totalt),
DescTools::StuartTauC(temp$Eivindmaskin, temp$totalt),
DescTools::StuartTauC(temp$RS, temp$totalt)
)) %>%
mutate(
plass = rank(desc(tau_c))
) %>%
arrange(plass)
knitr::kable(kor_matrise, digits = 2)
deltakere | tau_a | tau_b | tau_c | plass |
---|---|---|---|---|
RS | 0.40 | 0.49 | 0.43 | 1 |
Brandenburger Tor | 0.35 | 0.45 | 0.37 | 2 |
Eivindmaskin | 0.19 | 0.24 | 0.20 | 3 |
Analytix | 0.05 | 0.19 | 0.10 | 4 |
Glam International | 0.02 | 0.02 | 0.02 | 5 |
Magiske Soppen | -0.02 | -0.03 | -0.03 | 6 |
Den endelige resultatlista rangerer alle 26 deltakerne, mens hver enkelt deltaker kun har rangert 10 land. Dermed er det Tau-c som er det korrekte målet å bruke. Vi ser at det har særlig betydning for Analytix, som kun ga poeng til Ukraina - og ingenting annet. De fleste får en høyere sammenhengsverdi med tau-b enn tau-c, antakeligvis pga. hvordan sisteplass er håndtert i poenggivninga.