Parlamenti
Indicatori calcolati su un'intera cameraPer ogni coppia di membri che ha votato nelle stesse votazioni, la concordanza è la quota di votazioni comuni in cui hanno espresso lo stesso voto (sì, no, astensione o assente), dove assente corrisponde ad assente. Un membro deve avere almeno 20 votazioni conteggiate e una coppia almeno 20 votazioni comuni per comparire. La mappa di calore dei partiti media queste concordanze a coppie su ogni coppia di partiti non ordinata (con una semi-ampiezza di confidenza al 95 % pari a 1,96·σ/√n). Il grafico a dispersione riduce la matrice di concordanza a due dimensioni tramite scaling multidimensionale classico: le distanze d = 1 − concordanza vengono doppiamente centrate in B, traslate in B + σI (limite di Gershgorin) per renderla semidefinita positiva, e i due autovettori più positivi forniscono le coordinate. La disposizione è inizializzata in modo deterministico e quindi non oscilla mai tra un ricaricamento e l'altro.
Come si calcolaagreement(a,b) = |{ ballots where vote_a = vote_b }| / |shared(a,b)|
distance d = 1 − agreement
B = −½ · J · (D∘D) · J (double-centred squared distances)
B' = B + σ·I, σ = maxᵢ Σⱼ |Bᵢⱼ| (Gershgorin PSD shift)
coords = 2 most-positive eigenvectors of B'
Dove compare- /parliaments/:id/alignment
Per ogni votazione, la linea di un gruppo parlamentare è la posizione (sì, no o astensione) che una stretta pluralità dei suoi votanti ha assunto; i pareggi, e i gruppi con meno di 4 votanti in quella votazione, non vengono conteggiati. Un membro dissente ogni volta che il suo voto differisce dalla linea del gruppo; il suo tasso di dissenso è dissensi ÷ votazioni conteggiate (i membri con meno di 10 votazioni conteggiate vengono scartati). Si usa il gruppo al momento del voto, ripiegando sul partito attuale del membro dove non esiste un'istantanea (p. es. Liechtenstein). La coesione di un gruppo è l'indice di accordo medio (Hix–Noury–Roland) sulle sue votazioni: 1 quando un gruppo vota compatto, 0 quando si divide equamente in tre.
Come si calcolagroup line = strict plurality of {yes, no, abstain} (≥ 4 voters, no tie)
dissent_rate(m) = dissents(m) / scored_ballots(m) (m needs ≥ 10 ballots)
cohesion (AI) = [ max(Y,N,A) − ½·((Y+N+A) − max(Y,N,A)) ] / (Y+N+A)
I membri e le organizzazioni che dichiarano nel registro degli interessi formano un grafo bipartito; si mantengono solo le organizzazioni collegate ad almeno 2 membri, così l'immagine mostra connessioni condivise anziché mandati isolati. Ogni legame dichiarato è classificato come retribuito, non retribuito o sconosciuto (prima il codice armonizzato, poi un ripiego testuale tedesco / francese / italiano), e retribuito prevale su non retribuito che prevale su sconosciuto quando un membro ha più legami con una stessa organizzazione. La rete è disposta con una simulazione di forze Fruchterman-Reingold deterministica: lunghezza d'arco ideale k = √(area/n), repulsione k²/distanza, attrazione distanza²/k, su 300 iterazioni con raffreddamento. Non si usa alcuna casualità, perciò il grafo resta stabile tra un ricaricamento e l'altro.
Come si calcolagraph = members ↔ organisations declared by ≥ 2 members
k = √(area / n) (ideal edge length)
repulsion = k² / distance, attraction = distance² / k
layout = 300 Fruchterman–Reingold iterations, cooling ×0.985
I discorsi di ogni membro attivo su una finestra temporale comune vengono suddivisi in token e ripuliti dalle parole vuote per lingua, poi ridotti a un documento di conteggi di parole per membro. Wordfish (Slapin & Proksch 2008) adatta un modello di Poisson E[y] = exp(α + ψ + β·θ) tramite regressioni di Poisson alternate e colloca ogni oratore su un'unica scala latente θ solo in base alla scelta delle parole: α è la loquacità, ψ la frequenza di una parola e β quanto nettamente una parola discrimina. L'adattamento è irrobustito (limitato, con dimezzamento del passo, regolarizzato con ridge) e inizializzato in modo deterministico. η² (la quota di varianza di θ spiegata dal partito) è mostrata a fianco, e l'asse usa un dominio robusto dal 2° al 98° percentile affinché una manciata di oratori poco prolissi ad alta varianza non fissi la scala.
Come si calcolaE[y_ij] = exp( α_i + ψ_j + β_j · θ_i ) (Wordfish, Poisson)
θ_i = speaker position α_i = talkativeness
ψ_j = word frequency β_j = word discrimination
η² = SS_between(party) / SS_total (θ variance explained by party)
Dove compare- /parliaments/:id/discussion
- /experiments/wordfish
Persone
Indicatori per un singolo membroOgni trascrizione di discorso di un membro viene ripulita dall'HTML, resa minuscola e suddivisa ai caratteri non alfabetici in token più lunghi di un carattere (accenti mantenuti, cifre e punteggiatura scartate). Ogni token viene filtrato rispetto all'elenco di parole vuote della lingua propria del discorso, così i discorsi tedeschi e francesi di un membro bilingue vengono ripuliti con l'elenco giusto. Il risultato sono le parole più frequenti del membro (le prime 120 con un conteggio di almeno 2, su una finestra di date opzionale), disegnate come treemap squarified dimensionato in base al conteggio.
Come si calcolatokens = lowercase(strip_html(text)) split on [^\p{L}]+, length > 1
keep = tokens NOT IN stopwords[ speech language ]
result = top 120 words with count ≥ 2 → squarified treemap
È la metà a coppie dell'affinità di voto, vista da un membro: sulle votazioni in cui entrambi hanno votato, la concordanza con ogni altro membro è corrispondenze ÷ votazioni comuni (assente corrisponde ad assente). Le coppie che condividono meno di 10 votazioni vengono nascoste come rumore, e l'elenco può essere ridefinito su un intervallo di date. A differenza del grafico a dispersione del parlamento, non si applica alcuna riduzione di dimensionalità. È un elenco ordinato di vicini.
Come si calcolaagreement(subject, other) = matches / shared_ballots (absent = absent)
keep pairs with shared_ballots ≥ 10 → ranked neighbour list
Ogni voce del registro degli interessi è ordinata in retribuita, non retribuita o sconosciuta: vale per primo il codice di retribuzione armonizzato (non retribuito e onorario contano entrambi come non retribuito), altrimenti un ripiego per parole chiave tedesco / francese / italiano legge la descrizione in testo libero. Le voci sono raggruppate per nome di organizzazione normalizzato per aggregare i mandati di un membro per organizzazione. Questa stessa regola alimenta la ripartizione retribuito / non retribuito della rete di lobbying.
Come si calcolaclass = paid if harmonised code = paid
unpaid if code ∈ {unpaid, honorary} else de/fr/it text match
else unknown (paid ≻ unpaid ≻ unknown, per organisation)