Je viens de tomber sur cette grande analyse qui est à la fois intéressante et belle visuellement:
http://www.nytimes.com/interactive/2012/11/02/us/politics/paths-to-the-white-house.html
Je suis curieux de savoir comment un tel "arbre de chemin" peut être construit en utilisant R. De quelles données et algorithme a-t-on besoin pour construire un tel arbre de chemin?
Merci.
r
data-visualization
politics
Tal Galili
la source
la source
Réponses:
Il est naturel d'utiliser une solution récursive.
Les données doivent consister en une liste des États en jeu, leurs votes électoraux et l'avantage de départ présumé du candidat de gauche («bleu»). (Une valeur de se rapproche de la reproduction du graphique du NY Times.) À chaque étape, les deux possibilités (gains ou pertes à gauche) sont examinées; l'avantage est mis à jour; si à ce stade le résultat (victoire, perte ou égalité) peut être déterminé - sur la base des votes restants - alors le calcul s'arrête; sinon, il est répété récursivement pour les autres états de la liste. Donc:47
Cela élague efficacement l'arbre à chaque nœud, nécessitant beaucoup moins de calculs que l'exploration des résultats possibles. Le reste n'est qu'un détail graphique, donc je ne discuterai que des parties de l'algorithme qui sont essentielles pour une visualisation efficace.29= 512
Le programme complet suit. Il est écrit de manière modérément flexible pour permettre à l'utilisateur d'ajuster de nombreux paramètres. La partie cruciale de l'algorithme graphique est la disposition de l'arborescence. Pour ce faire,1 / 512
plot.path
utilise unwidth
champ pour allouer proportionnellement l'espace horizontal restant aux deux descendants de chaque nœud. Ce champ est calculé initialement parpaths.compute
le nombre total de feuilles (descendants) sous chaque nœud. (Si un tel calcul n'est pas effectué et que l'arbre binaire est simplement divisé en deux à chaque nœud, alors au neuvième état, il n'y a que de la largeur totale disponible pour chaque feuille, ce qui est beaucoup trop étroit. a commencé à dessiner un arbre binaire sur papier a bientôt rencontré ce problème!)Les positions verticales des nœuds sont disposées dans une série géométrique (avec un rapport commun
a
) de sorte que l'espacement se rapproche dans les parties les plus profondes de l'arbre. Les épaisseurs des branches et les tailles des symboles de feuille sont également mises à l'échelle en fonction de la profondeur. (Cela causera des problèmes avec les symboles circulaires sur les feuilles, car leurs proportions changeront en fonction des variationsa
. Je n'ai pas pris la peine de corriger cela.)la source
partitions
package qui aurait pu fournir une structure pour énumérer les possibilités.