Parlamentos
Indicadores calculados sobre uma câmara inteiraPara cada par de membros que votou nas mesmas votações, a concordância é a proporção de votações comuns em que emitiram o mesmo voto (sim, não, abstenção ou ausente), sendo que ausente corresponde a ausente. Um membro precisa de pelo menos 20 votações contabilizadas e um par de pelo menos 20 votações comuns para aparecer. O mapa de calor dos partidos faz a média destas concordâncias por pares sobre cada par de partidos não ordenado (com uma semi-amplitude de confiança a 95 % de 1,96·σ/√n). O gráfico de dispersão reduz a matriz de concordância a duas dimensões por escalonamento multidimensional clássico: as distâncias d = 1 − concordância são duplamente centradas em B, deslocadas para B + σI (limite de Gershgorin) para a tornar semidefinida positiva, e os dois vetores próprios mais positivos dão as coordenadas. A disposição é inicializada de forma determinista e por isso nunca oscila entre recarregamentos.
Como é calculadoagreement(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'
Onde aparece- /parliaments/:id/alignment
Para cada votação, a linha de um grupo parlamentar é a posição (sim, não ou abstenção) que uma estrita pluralidade dos seus votantes adotou; os empates, e os grupos com menos de 4 votantes nessa votação, não são contabilizados. Um membro dissente sempre que o seu voto difere da linha do seu grupo; a sua taxa de dissidência é dissidências ÷ votações contabilizadas (os membros com menos de 10 votações contabilizadas são descartados). Usa-se o grupo no momento do voto, recuando para o partido atual do membro onde não existe um instantâneo (p. ex. Liechtenstein). A coesão de um grupo é o índice de concordância médio (Hix–Noury–Roland) sobre as suas votações: 1 quando um grupo vota em bloco, 0 quando se divide igualmente em três.
Como é calculadogroup 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)
Os membros e as organizações que declaram no registo de interesses formam um grafo bipartido; conservam-se apenas as organizações ligadas a pelo menos 2 membros, de modo que a imagem mostra ligações partilhadas em vez de mandatos isolados. Cada ligação declarada é classificada como remunerada, não remunerada ou desconhecida (primeiro o código harmonizado, depois um recuo textual alemão / francês / italiano), e remunerada prevalece sobre não remunerada que prevalece sobre desconhecida quando um membro tem várias ligações a uma mesma organização. A rede é disposta por uma simulação de forças Fruchterman-Reingold determinista: comprimento de aresta ideal k = √(área/n), repulsão k²/distância, atração distância²/k, ao longo de 300 iterações com arrefecimento. Não se usa qualquer aleatoriedade, pelo que o grafo permanece estável entre recarregamentos.
Como é calculadograph = 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
Os discursos de cada membro ativo numa janela temporal comum são tokenizados e filtrados de palavras vazias por língua, e depois reduzidos a um documento de contagens de palavras por membro. O Wordfish (Slapin & Proksch 2008) ajusta um modelo de Poisson E[y] = exp(α + ψ + β·θ) por regressões de Poisson alternadas e coloca cada orador numa única escala latente θ apenas a partir da escolha de palavras: α é a loquacidade, ψ a frequência de uma palavra e β quão nitidamente uma palavra discrimina. O ajuste é robustecido (limitado, com meio-passo, regularizado por ridge) e inicializado de forma determinista. η² (a proporção da variância de θ explicada pelo partido) é mostrada ao lado, e o eixo usa um domínio robusto do percentil 2 ao 98 para que um punhado de oradores pouco prolixos e de alta variância não fixe a escala.
Como é calculadoE[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)
Onde aparece- /parliaments/:id/discussion
- /experiments/wordfish
Pessoas
Indicadores para um único membroCada transcrição de discurso de um membro é limpa de HTML, passada a minúsculas e dividida nos caracteres não alfabéticos em tokens com mais de um caractere (acentos mantidos, dígitos e pontuação descartados). Cada token é filtrado contra a lista de palavras vazias da língua própria do discurso, de modo que os discursos alemães e franceses de um membro bilingue sejam limpos com a lista certa. O resultado são as palavras mais frequentes do membro (as 120 primeiras com uma contagem de pelo menos 2, numa janela de datas opcional), desenhadas como um treemap quadrificado dimensionado pela contagem.
Como é calculadotokens = 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
É a metade por pares da afinidade de voto, vista a partir de um membro: sobre as votações em que ambos votaram, a concordância com cada outro membro é correspondências ÷ votações comuns (ausente corresponde a ausente). Os pares que partilham menos de 10 votações são ocultados como ruído, e a lista pode ser reenquadrada num intervalo de datas. Ao contrário do gráfico de dispersão do parlamento, não se aplica qualquer redução de dimensionalidade. É uma lista ordenada de vizinhos.
Como é calculadoagreement(subject, other) = matches / shared_ballots (absent = absent)
keep pairs with shared_ballots ≥ 10 → ranked neighbour list
Cada entrada do registo de interesses é ordenada em remunerada, não remunerada ou desconhecida: vale primeiro o código de remuneração harmonizado (não remunerado e honorário contam ambos como não remunerado), caso contrário um recuo por palavras-chave alemão / francês / italiano lê a descrição em texto livre. As entradas são agrupadas por nome de organização normalizado para agregar os mandatos de um membro por organização. Esta mesma regra alimenta a repartição remunerado / não remunerado da rede de lobbying.
Como é calculadoclass = paid if harmonised code = paid
unpaid if code ∈ {unpaid, honorary} else de/fr/it text match
else unknown (paid ≻ unpaid ≻ unknown, per organisation)