Metode og formler
Appen analyserer parlamentarisk voteringsnærhet. Den estimerer ikke velgerideologi eller partiprogram, og bør leses sammen med sakene, komiteene og den politiske konteksten.
Ordliste og faguttrykk
Disse begrepene brukes i grafene og metodeforklaringene. De er definert slik de brukes i denne appen, ikke nødvendigvis som generelle statsvitenskapelige standarddefinisjoner.
- Ankerpartier
- Partiene som inngår i den faste venstre-høyre-rekkefølgen R, SV, MDG, AP, Sp, V, H, KrF og FrP. De får ikke forhåndsbestemte tallverdier, men brukes til å orientere den beregnede aksen slik at venstre side havner mot -1 og høyre side mot +1.
- Uankrede partier
- Partier som finnes i dataene, men som ikke er plassert i ankerrekkefølgen. De kan vises i tabeller, saker og heatmap, men de påvirker ikke kalibreringen av venstre-høyre-aksen.
- Personlig votering
- En votering der representantenes individuelle stemmer er registrert. Hovedmodellene bruker slike voteringer fordi partienes for-/mot-andel kan beregnes fra representantstemmer.
- Support share / partistemmeandel
- Partiets andel for-stemmer blant representantene fra partiet som stemte for eller mot. Fravær inngår ikke i nevneren.
- Partikohesjon
- Et mål på hvor samlet partiet stemmer i en votering. Verdien er nær 1 når partiet stemmer samlet for eller samlet mot, og nær 0 når partiet er delt omtrent 50/50.
- Rullerende vindu
- Et analysepunkt basert på en gruppe etterfølgende voteringer, normalt 120 informative voteringer. Neste punkt flytter vinduet videre i tid og beregner posisjonen på nytt.
- Informativ votering
- En votering som faktisk skiller partier eller blokker fra hverandre. Enstemmige eller nesten enstemmige voteringer regnes som mindre informative for partinærhet.
- Voteringsvekt
- Hvor mye en votering teller i beregningen. Vekten påvirkes blant annet av om voteringen er personlig, hvor nær den er 50/50, om flere forslag er bundet sammen, og om den virker prosedyrepregget.
- Empirisk partiskille
- I robust-modellen: et mål på hvor mye ankerpartiene faktisk skiller seg fra hverandre i en votering. Hvis alle ankerpartiene stemmer likt, er partiskillet lavt.
- Regularisering
- En metode for å dempe ekstreme utslag og gjøre modellen mindre følsom for støy. I robust-modellen brukes regularisering i vektene og i tidsstabiliseringen mellom vinduer.
- Effektivt utvalg
- Et vektet mål på hvor mange voteringer som reelt bærer et analysepunkt. Hvis noen få voteringer får svært høy vekt, blir effektivt utvalg lavere enn det rene antallet voteringer.
- Modellstress
- Et mål på hvor godt én dimensjon gjenskaper de observerte partiavstandene. Høyt modellstress betyr at mønsteret kan være vanskelig å beskrive presist på én venstre-høyre-akse.
- 1D-embedding
- Prosessen der partiene plasseres på én linje slik at avstanden mellom partiene på linjen ligner mest mulig på de observerte voteringsavstandene.
- Blokkdrift
- Et mål på om valgt parti stemmer nærmere posisjonsflertallet eller opposisjonen i et tidsvindu. Det er ikke det samme som venstre-høyre-drift.
- Leave-one-out
- Når valgt parti selv inngår i en referanseblokk, tas partiet ut av blokken før avstand beregnes. Dette hindrer at partiet delvis sammenlignes med seg selv.
- Datakvalitetsflagg
- Varsler som markerer forhold som kan svekke tolkningen, for eksempel lavt fremmøte, manglende partidata, få voteringer, prosedyrepreg eller nesten enstemmige voteringer.
Venstre/høyre-drift
Denne funksjonen forsøker å svare på om et parti stemmer mer likt med partier som ligger til venstre eller høyre i en forhåndsdefinert ankerrekkefølge. Resultatet er en statistisk posisjon basert på roll-call-lignende stemmelikhet i Stortingets voteringer. Det er ikke et mål på ideologisk overbevisning, regjeringsstrategi, programtekst eller velgerplassering.
Inkluderes i hovedmodellen
- Voteringer fra valgte/importerte perioder eller sesjoner.
- Bare voteringer med personlig_votering = true bidrar med vekt.
- Bare voteringer der minst to partier har beregnbar for-/mot-andel kan påvirke partilikhet.
- Partienes stemmeandel beregnes fra representanter som faktisk stemte for eller mot.
- Fravær lagres og vises som datakvalitet, men inngår ikke i for-/mot-nevneren.
- Uankrede partier kan vises i tabeller og heatmap, men brukes ikke til å kalibrere venstre/høyre-aksen.
Ekskluderes eller får lav/null vekt
- Ikke-personlige voteringer får P_j = 0 i hovedmodellen.
- Voteringer uten partifordelte representantstemmer kan ikke brukes i avstandsberegningen.
- Voteringer der et parti mangler møtende representanter får support_share = null for partiet.
- Enstemmige og nesten enstemmige voteringer nedvektes kraftig via informasjonsvekten.
- Prosedyrepregede voteringer beholdes i databasen, men flagges og nedvektes.
- Voteringer med for lite datagrunnlag kan gi low_vote_count, missing_party_data eller low_attendance.
Datagrunnlaget per votering
For hver votering hentes representantenes stemmer fra Stortingets API og grupperes per parti. Appen teller for-stemmer, mot-stemmer og fravær. Partiets støtteandel i voteringen beregnes bare av for og mot, fordi fravær ikke bør tolkes som en politisk stemme. Fravær er likevel viktig datakvalitet: lavt fremmøte kan gjøre partiets observerte støtteandel mer ustabil.
Hva et analysepunkt i grafen betyr
Hvert punkt er ikke én enkelt sak. Det er et rullerende vindu av informative voteringer, normalt 120 voteringer. Punktets dato er slutten av vinduet. Når du klikker på et punkt, vises voteringene og sakene som ligger i vinduet, slik at kurven kan ettergås mot konkrete saker.
Hvorfor en votering får ulik vekt
En votering der nesten alle stemmer likt sier lite om avstand mellom partier. En votering rundt 50/50 sier mer. Derfor brukes en informasjonsvekt som er høyest når total for-andel er nær 0,5 og lav når voteringen er nær konsensus. I tillegg nedvektes voteringer der mange forslag er bundet sammen, og voteringer som ligner prosedyre- eller tekniske voteringer.
Hvordan venstre/høyre-aksen kalibreres
Partiene får ikke faste tall som R = -1 eller FrP = +1. I hvert tidsvindu beregnes først hvor like partiene stemmer med hverandre. Deretter plasseres partiene på én dimensjon slik at avstandene på linjen best mulig ligner de observerte voteringsavstandene. Den politiske rekkefølgen R, SV, MDG, AP, Sp, V, H, KrF og FrP brukes bare til å orientere aksen, slik at venstresiden havner mot -1 og høyresiden mot +1.
Hva drift betyr
Drift fra start er endringen i valgt partis beregnede posisjon fra første analysepunkt til senere punkter. Positiv drift betyr at partiet i modellen beveger seg mot høyre/blå side av den beregnede voteringsaksen. Negativ drift betyr bevegelse mot venstre/rød side. Det betyr ikke automatisk at partiet ideologisk har endret standpunkt; sakssammensetning, regjeringsrolle og hvilke saker som faktisk kommer til votering kan påvirke resultatet.
Datakvalitetsflagg som påvirker tolkningen
- non_personal_vote
- Voteringen er lagret som kontekst, men bidrar ikke til hovedmodellen.
- consensus_vote
- Voteringen er nær enstemmig og har lav informasjonsverdi for partiskille.
- low_attendance
- Ett eller flere partier har svært få møtende representanter i voteringen.
- missing_party_data
- Partifordelte stemmer mangler eller er ufullstendige for voteringen.
- bundle_unknown
- Antall forslag bak voteringen er ukjent, så bundlingsvekten kan være mindre presis.
- low_vote_count
- Vinduet har få brukbare voteringer og bør tolkes varsomt.
- unanchored_party
- Partiet vises i dataene, men påvirker ikke kalibreringen av aksen.
- api_payload_incomplete
- Rådata fra API-et var mangelfullt eller uventet strukturert.
Forklaring av kontrollene
Blokkmodell
Velger hvordan regjering og opposisjon beregnes. Standardvalget bruker regjeringen som satt på selve voteringsdatoen og vekter partiene etter møtende representanter i voteringen. Dette er tilstedeværelsesvekt, ikke et påstått fast mandattall. Partivektet blokk lar hvert parti telle likt. Valgt parti tas alltid ut av egen referanseblokk.
Alle perioder
Valget 'Alle perioder' analyserer alle støttede og importerte perioder, inkludert SIKT-periodene tilbake til 1979 der datadekningen er god nok. Rullerende vinduer får aldri krysse et stortingsvalg. Samlet partilikhet beregnes først innen hver periode og kombineres deretter med lik vekt per periode, slik at perioder med mange voteringer ikke automatisk dominerer.
Blokkdelende terskel
Terskelen brukes når 'Kun blokkdelende' er slått på. En votering tas med bare hvis forskjellen mellom posisjonsblokkens støtteandel og opposisjonsblokkens støtteandel er minst terskelen. Med standard 0,4 må blokkene altså skille seg med minst 40 prosentpoeng. Eksempel: 0,75 mot 0,30 gir forskjell 0,45 og tas med. 0,62 mot 0,35 gir 0,27 og filtreres bort.
Hvorfor 0,4 som standard?
0,4 er valgt som et konservativt kompromiss. Det fjerner voteringer der blokkene i praksis stemmer ganske likt, men beholder voteringer der blokkforskjellen er tydelig nok til at blokkdrift gir mening. Lavere terskel gir flere voteringer, men mer støy. Høyere terskel gir renere blokk-konflikter, men færre datapunkter og bredere usikkerhet.
Kun blokkdelende
Når denne er aktiv, analyseres blokkdrift bare på voteringer der posisjonsblokken og opposisjonsblokken faktisk stemmer forskjellig nok. Dette hindrer at saker med bred enighet eller lite blokkskille får uforholdsmessig betydning for spørsmålet om et parti stemmer nærmere posisjon eller opposisjon.
Uankrede
Uankrede partier er partier som finnes i dataene, men som ikke ligger i den konfigurerte venstre-høyre-aksen. De vises i rådata, tabeller og heatmap når dette er slått på. De påvirker ikke selve aksekalibreringen før de eksplisitt plasseres på aksen.
Hendelser
Viser politiske tidsmarkører i grafene, for eksempel regjeringsskifte, regjeringsuttreden eller valg. Hendelsene endrer ikke beregningene; de er visuelle holdepunkter som gjør det lettere å tolke endringer før og etter viktige datoer.
Avanserte filtre
Panelet viser bare filtre som påvirker valgt analyse. Felles filtre er sesjon, dato, komité, emne, sakstype, dokumentgruppe, utfall og datakilde. Modellspesifikke valg omfatter blant annet vindusstørrelse, bootstrap-iterasjoner, minste antall felles voteringer, mindretallsandel, fremmøte og krav om kjent forslagstekst. Skjulte filtre sendes ikke til analysen.
Nye kontrollanalyser
Partidisiplin
Rice-indeksen beregnes som abs(F-M)/(F+M), tilsvarende abs(2s-1), blant møtende representanter i partiet. Analysen viser også andel enstemmige partistemmer og registrerte representantstemmer som avviker fra partiets flertall. Fravær regnes ikke som avvik.
Forslagsgjennomslag
Forslag grupperes etter partier som kan identifiseres i «på vegne av»-feltet. Gjennomslag er antall vedtatte forslag delt på antall forslag med identifiserbar forslagsstiller og kjent utfall. Dette må ikke tolkes som et fullstendig innflytelsesmål, fordi kompromisser og komitéinnstillinger kan gi innflytelse uten eksplisitt forslag.
Gjennomsnittlig partiavstand
For hvert rullerende vindu beregnes vektet parvis avstand mellom partier med nok felles voteringer. Målet er gjennomsnittet av disse avstandene, ikke generell politisk polarisering. Nettverksmål som betweenness og deltakelseskoeffisient beskriver separat hvordan partier er plassert i likhetsnettverket.
Partisplitt og representantavvik
Partikohesjon er abs(2s-1), der s er støtteandel blant møtende representanter. 0 betyr maksimal splitt og 1 enstemmighet. Ved 50/50 lages ikke et kunstig partiflertall, og representantavvik registreres bare når partiet har et entydig flertall.
Analysemanifest
Hver analyse returnerer modellversjon, tidspunkt, antall voteringer, effektiv vekt, kildefordeling, aktive backendfiltre, kvalitetsflagg og metodiske varsler. Manifestet kan åpnes under nøkkeltallene og gjør resultatet lettere å reprodusere og ettergå.
Formler for Venstre/høyre-drift
Partistemmeandel
present_pj = count_for_pj + count_mot_pj. s_pj = count_for_pj / present_pj hvis present_pj > 0, ellers null. Fravær inngår ikke i nevneren.
Partikohesjon
c_pj = abs(2 * s_pj - 1). c_pj = 1 betyr at partiet stemte samlet for eller samlet mot. c_pj = 0 betyr at partiet var delt omtrent 50/50.
Total for-andel
q_j = total_for_j / (total_for_j + total_mot_j), beregnet blant alle møtende representanter med for- eller mot-stemme.
Informasjonsvekt
I_j = 4 * q_j * (1 - q_j). Vekten er 1 ved 50/50-votering og nær 0 ved nesten enstemmige voteringer.
Bundlingsvekt
B_j = 1 / sqrt(k_j), der k_j er antall forslag knyttet til voteringen, minimum 1. Hvis k_j er ukjent settes B_j = 1 og voteringen flagges.
Samlet voteringsvekt
w_j = P_j * I_j * B_j * R_j. P_j = 1 for personlig votering og 0 ellers. R_j er en nedvekting for prosedyrepregede voteringer.
Parvis partiavstand i én votering
d_abj = abs(s_aj - s_bj). 0 betyr lik stemmegivning, 1 betyr motsatt stemmegivning. Delte partier gir verdier mellom 0 og 1.
Avstand i rullerende vindu
D_ab(t) = weighted_mean(d_abj, w_j) for alle brukbare voteringer j i vinduet W_t.
1D-embedding
Finn x_p(t) som minimerer sum_{a<b}(abs(x_a(t)-x_b(t)) - D_ab(t))^2 for de ankrede partiene.
Orientering og skalering
Aksen orienteres slik at korrelasjonen med de partiene som faktisk er representert fra ankerrekkefølgen R, SV, MDG, A, Sp, V, H, KrF, FrP er positiv. En felles referanseembedding skaleres til [-1, 1], og hvert vindu justeres lineært mot denne referansen. Dermed blir ikke hvert vindu strukket på nytt til egne ytterpunkter.
Bootstrap-usikkerhet
Voteringene i hvert vindu trekkes med tilbakelegging. Posisjonen beregnes på nytt for hver trekning, og 5- og 95-persentilene vises som et 90 prosent usikkerhetsbånd. Antall trekninger kan velges i avanserte filtre.
Drift fra start
drift_from_start_t = x_p(t) - x_p(t0), der t0 er første beregnbare vindu for valgt parti og filter.
Statistisk vurdering og begrensninger
Hva modellen er god til
Modellen er godt egnet til å beskrive observerte mønstre i parlamentarisk stemmelikhet over tid, særlig når mange personlige voteringer ligger bak hvert punkt og når de samme partiene har stabil representasjon i perioden.
Hva modellen ikke kan bevise
Modellen kan ikke alene bevise at et parti har flyttet ideologisk standpunkt. Den kan vise at partiets observerte voteringsatferd er blitt mer lik eller ulik andre partiers voteringsatferd. Årsaken kan være ideologisk endring, regjeringsrolle, forhandlinger, saksmiks, komitéarbeid eller hvilke forslag som faktisk settes under votering.
Elastisk skala
Aksen er fortsatt relativ til voteringsmønsteret, men vinduene skaleres ikke lenger uavhengig til egne ytterpunkter. De justeres mot en felles referanse for valgt datagrunnlag. Endringer i hvilke partier som er representert og hvilke saker som voteres kan fortsatt påvirke posisjonene, særlig ved sammenligning over mange perioder.
Robusthetssjekker
Resultatet bør kontrolleres ved å endre periode, komité, vindusstørrelse, blokkmodell og konsensusfilter, og ved å åpne punktene i grafen for å se hvilke saker som driver bevegelsen. For offentlig konklusjon bør modellen også sammenlignes med en separat idealpunktmodell eller annen roll-call-metode.
Blokkanalyse
Blokkanalysen sammenligner valgt parti med to politiske blokker: posisjonsflertallet og opposisjonen. Den måler ikke om partiet er ideologisk enig med blokkene, men om partiet stemmer mer likt med den ene eller andre blokken i de voteringene som inngår i vinduet.
Mørk linje: blokkdrift
Dette er hovedlinjen. Verdien beregnes som avstand til posisjonsflertallet minus avstand til opposisjonen. Over null betyr at partiet ligger nærmere opposisjonen. Under null betyr at partiet ligger nærmere posisjonsflertallet.
Rød linje: avstand til posisjon
Viser hvor ulikt valgt parti stemmer fra posisjonsflertallet i samme rullerende vindu. Lav verdi betyr at partiet stemmer likt med posisjonsflertallet. Høyere verdi betyr større avstand.
Blå linje: avstand til opposisjon
Viser hvor ulikt valgt parti stemmer fra opposisjonsblokken. Lav verdi betyr at partiet stemmer likt med opposisjonen. Høyere verdi betyr større avstand.
Leave-one-out referanseblokk
Når valgt parti selv inngår i en blokk, tas partiet ut av den referanseblokken før avstanden beregnes. For AP betyr det at posisjonsblokken i AP-analysen beregnes av R, SV, MDG og Sp. Dette hindrer at AP sammenlignes delvis med seg selv og blir kunstig nær posisjonsflertallet.
Hvordan leses aksen?
Y-aksen går fra -1 til +1. Rundt 0 betyr at partiet ligger omtrent like langt fra begge blokker. Positive verdier betyr relativ nærhet til opposisjonen. Negative verdier betyr relativ nærhet til posisjonsflertallet.
Hvorfor kan avstandslinjene ligge høyt samtidig?
Et parti kan stemme annerledes enn begge blokker hvis blokkene selv er splittet, hvis partiet har en særposisjon i sakene, eller hvis vinduet inneholder mange saker der koalisjonsmønsteret varierer. Derfor bør hovedlinjen leses sammen med de to avstandslinjene.
Hva betyr blokkdelende filter?
Når 'Kun blokkdelende' er aktiv, tas bare voteringer med der posisjonsflertallet og opposisjonen faktisk stemmer tydelig forskjellig. Dette gjør blokkdriften mer tolkbar, men kan gi færre datapunkter.
Viktig forbehold
Blokkdrift er en statistisk beskrivelse av voteringsnærhet. Den sier ikke alene hvorfor partiet stemte slik, og bør tolkes sammen med sakstabellen, komitéfilter, emner og politiske hendelser.
Prosedyrevoteringer og kontrollmodell
Prosedyrepregede voteringer
Voteringer som ligner rene prosedyre- eller tekniske voteringer beholdes i datagrunnlaget, men flagges og nedvektes. Dette gjelder blant annet tekst som 'vedlegges protokollen', 'lovens overskrift og loven i sin helhet', subsidiærvoteringer og oversendelses-/protokollformuleringer. De fjernes ikke automatisk fordi de fortsatt kan ha politisk innhold i enkelte saker.
DW-NOMINATE som kontrollspor
Dagens standardmodell er en forklarbar 1D-embedding av partienes voteringslikhet. En mer etablert idealpunktmodell inspirert av DW-NOMINATE er egnet som kontrollmåling, men bør vises separat slik at brukeren kan sammenligne stabilitet og avvik mellom metodene.