From 1909da3720fe2fe20047eef6eeff3d0846ab5553 Mon Sep 17 00:00:00 2001 From: Armin Date: Fri, 14 Aug 2026 12:23:28 +0000 Subject: [PATCH] Consolidate scale examples into one figure --- validation/CASE_SELECTION.md | 41 ++-- validation/EVIDENCE_MANIFEST.csv | 3 +- validation/README.md | 3 +- validation/figures/party_landmarks.pdf | Bin 24974 -> 0 bytes validation/figures/party_scale_examples.pdf | Bin 0 -> 25345 bytes validation/figures/party_trajectories.pdf | Bin 29725 -> 0 bytes .../outputs/party_landmark_plot_data.csv | 18 -- .../outputs/party_scale_example_plot_data.csv | 58 ++++++ .../outputs/party_trajectory_plot_data.csv | 147 -------------- validation/plot_scale_examples.R | 179 ++++++++++++++++++ validation/run_postprocessing.R | 84 +------- 11 files changed, 257 insertions(+), 276 deletions(-) delete mode 100644 validation/figures/party_landmarks.pdf create mode 100644 validation/figures/party_scale_examples.pdf delete mode 100644 validation/figures/party_trajectories.pdf delete mode 100644 validation/outputs/party_landmark_plot_data.csv create mode 100644 validation/outputs/party_scale_example_plot_data.csv delete mode 100644 validation/outputs/party_trajectory_plot_data.csv create mode 100644 validation/plot_scale_examples.R diff --git a/validation/CASE_SELECTION.md b/validation/CASE_SELECTION.md index 18a0a60..9c5572e 100644 --- a/validation/CASE_SELECTION.md +++ b/validation/CASE_SELECTION.md @@ -1,37 +1,26 @@ -# Predeclared case-selection rules +# Scale-example selection and interpretation -These rules were recorded before inspecting the selected parties' position estimates. +The scale examples are selected to make the two released dimensions substantively interpretable. They are illustrative reference cases rather than a representative sample or an independent validation of the posterior coordinates. Published party-history research supports the qualitative interpretation of the cases, not their exact estimated values. ## Trajectory figure -The figure will use parties selected for cross-national recognition, family diversity, long election coverage, and relevance to interpreting movement on the two scales. Selection is not based on the magnitude of the estimated movement. +The connected paths show recognizable changes across countries and political traditions: -Preselected parties: +- Hungary: Fidesz (PartyFacts 1691), 1990--2022. +- Denmark: Social Democratic Party (PartyFacts 379), 2007--2019. +- United States: Democratic Party (PartyFacts 432), 1944--2020. -- Germany: Social Democratic Party of Germany (PartyFacts 383) -- Germany: Christian Democratic Union (PartyFacts 1375) -- United Kingdom: Labour Party (PartyFacts 1516) -- United Kingdom: Conservative Party (PartyFacts 1567) -- Denmark: Social Democratic Party, short name SD (PartyFacts 379) -- Sweden: Sweden Democrats (PartyFacts 409) -- United States: Democratic Party (PartyFacts 432) -- United States: Republican Party (PartyFacts 809) - -The final display may use a subset only to preserve legibility, but exclusions must be based on panel layout or insufficient coverage rather than unattractive results. Both posterior means and 95% latent-position credible intervals will be shown. Text will not infer a cause of movement from the estimates alone. +All election-year posterior means in these windows form the connected paths. The labelled endpoints include 95% latent-position credible intervals. The manuscript uses published historical research to interpret the broad movements without treating the estimates as causal evidence. ## Two-dimensional landmarks -Landmarks will be selected from recognizable party-election cases, with representation of economically left/right, culturally cosmopolitan/traditionalist, and moderate combinations. Target years are declared before checking exact positions; if the requested year is absent, the nearest election within three years will be used and disclosed. +The standalone anchors cover low, middle and high regions of both scales and include cross-pressured combinations: -- German Social Democratic Party: 1972 and 2021 -- German Christian Democratic Union: 1983 and 2021 -- UK Labour Party: 1983 and 1997 -- UK Conservative Party: 1979 and 2019 -- Swedish Social Democratic Labour Party (PartyFacts 487): 1994 and 2022 -- Sweden Democrats: 2010 and 2022 -- French National Front (PartyFacts 433): 1988 and 2022 -- German The Left (PartyFacts 1545): 2021 -- US Democratic Party: 2020 -- US Republican Party: 2020 +- German The Left: 2021 (PartyFacts 1545). +- German Christian Democratic Union: 2021 (PartyFacts 1375). +- Polish Law and Justice: 2019 (PartyFacts 1565). +- UK Conservative Party: 1979 (PartyFacts 1567). +- French National Front: 2022 (PartyFacts 433). +- US Republican Party: 2020 (PartyFacts 809). -Labels may be pruned only to avoid overlap. The plotting-data table will retain all declared cases, including missing cases and substitutions. +Every anchor must match the requested party-year exactly. Horizontal and vertical bars show 95% latent-position credible intervals. The machine-readable plotting table retains every path observation and anchor. diff --git a/validation/EVIDENCE_MANIFEST.csv b/validation/EVIDENCE_MANIFEST.csv index 3a307d2..e383c09 100644 --- a/validation/EVIDENCE_MANIFEST.csv +++ b/validation/EVIDENCE_MANIFEST.csv @@ -1,7 +1,6 @@ id,topic,input,output,status 1,country coverage,release v0 election-year panel,metadata/country_coverage_v0.csv,complete -2,scale trajectories,release v0 election-year panel,validation/figures/party_trajectories.pdf,complete -3,landmark party space,release v0 election-year panel,validation/figures/party_landmarks.pdf,complete +2,historical scale anchors and trajectories,release v0 election-year panel,validation/figures/party_scale_examples.pdf,complete 4,research workflow,documented source and release workflow,validation/figures/research_workflow.pdf,complete 5,party-blocked validation,guarded blocked fit with 82 parties and completed post-estimation extraction,validation/outputs/blocked_validation_summary.csv,complete_with_convergence_limitation 6,predictive coverage,production posterior run run_2026-06-12_09-34-03,validation/outputs/ppc/posterior_predictive_by_dimension_item.csv,complete diff --git a/validation/README.md b/validation/README.md index f1dcf66..405afd7 100644 --- a/validation/README.md +++ b/validation/README.md @@ -20,7 +20,8 @@ The validation fit retains the production warmup length and four-chain design bu ## Reproduction Entry Points -- `run_postprocessing.R`: country coverage, scale illustrations, V-Party sensitivity and partially pooled source-support diagnostics. +- `plot_scale_examples.R`: historically anchored party paths and scale-reference cases generated from the released election-year panel. +- `run_postprocessing.R`: country coverage, scale examples, V-Party sensitivity and partially pooled source-support diagnostics. - `validate_uncertainty.jl`: production-chain predictive coverage, calibration and source/item/country/decade breakdowns. - `prepare_blocked_validation.jl`: deterministic party-blocked train/test construction. - `run_blocked_validation.sh`: guarded low-priority fit with disk, duplicate-process, toolchain and logging checks. diff --git a/validation/figures/party_landmarks.pdf b/validation/figures/party_landmarks.pdf deleted file mode 100644 index d8e257f3f288bebf33d6e4cbc158997c02ec30c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24974 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Πe40E}?v)9o^R`L2+i<|A& z_a6S3QKx2rHcu3=uI2YYbU;k(76X_aHWz!p3-*pBWIux8W<`Alv^RWYG&)}e%6#GaHn&K$>T#{Q*k|OL|L!T?JV${wyN~X(q&a`tuZe zqPr$Gz@XG(EYm%l?_4_r&{7MeL^jTf>Gu;D14!EuI4O%z-N_h)QGJIea2OsS26d?b*W)q)<`7}!RDktHL#v4_i>A}pk z7;-zkeMZdhs1E=PQu!GkPSE8}VtNt++I_CbDpEgYSy;GFxh}!X?sq@W5iFu~H{B>T zMZeIxs&{W&jzZ37D{Eux4n(Ua$`n}beQ1hG1<1T_26}_3Tw*hlCvDo~4`tPtKOn-r z&fZjS#!u&`VJEDP{Pb6F2_jg;f*dm?2m=k*5hdLFk6WGG`lj})cd4M+ z%6(;z$N*$n2|Gi7nTAN7LlRdt(^|Dvl@b7Mh^D*^M%_M$_T57V29bZfd{~9J0q;hp zi`2LenFmp|w>?7b%5iSa=5RCQr|iO?Kxlz{J+;F_MI40I*^&ki*>VK86EHbBk;$nf z%66fk=aR%sg7lk{*fYEu=#FP~pCLHrfQRKQ5Ph*Gh1=&3!0rAPVf|_SDf>}3Z8%be zB~5w}X82jCqW!w(3|z1ggE%L|8WSmFxlfdu5|X|byIdF>T~K8^a9<_0i($ydqr)Ks z|00$yl`4+x$86%p7?##RL!g^s%|6@o>!b&Yx)l9>7NsRIL0IGBRxUXEyDr$nK{jU5 zrREz)G!&$>y!;9a;zu6g@$K($PGQK+`j3>jyyA2NfyO==!uTZT^ys3@^4v~00Vv<$SYtOywsU{M_y9W$&LQ#v54O@v`g)|VOv zk};;$pp{J7AB`T8Fx>xbu2yj7cUE)OTp?H)Ta|b?1Vfq_mL{GKp*)0~9WK`|(vRBj z5-!qj6aHANC~cDZl1{?_!?bRbZnI+b5_TdjT@YW|J7;%7eDNbdQ8Ny|>H?Fhl=}cG z*&j1S)|mD1zGaiEM%v-@1Dl_bN`1=pt*4aWJCW>-r6EB})SKBz2KeeMV|uG>t(;(xOVDvP=dX_5j`A};Jy#V0a` zLEBNoPXR`a-za9;o+hdpgIW*LwEmTO}mn+*Pi$lctf3AwTwTi$)I4)%8q;Kslv98l-@@N6zka*x=;y-o4(V z+WwGA#xaavC}+237Zv)E5WHRM=p z5}k!ZQ#&y|#`jH_Wu?DXLwfIY6j2_tqM@ zyR$zzfq_>EoQfocr=vv)8#%$%U-d5yrVb`=M)o>uIN{typR9{^Qp;rzm-E;M*|6i$ zb+b|slB-3oqj&Usamw2cNGz~Dym6U1L*;$6(=-ZrwUTb#06ko5i71|WzbMQJ;yPv# zlgb2#74YcWh1=AL#)6YTLk~P_E^cbtJ$#O%aPQ#Kq>>ndrwifnD;iW_OKDjOS*L$1 zq0-GulwF=)8leMtOdwq|nfED%Ao`%Ce^ZmjVB!7#R>7DLf}K6GjRA1UnA)>VfkU^y zI}0!a$qLHL@}&3xJ;%Fm3k^emMO3sQ;JsNLPEsKTzz7lK=i>erEr;G?r~pnvM#(eE zHYa$j6!G>dQ+oD;&&~y$)j+0Dr@G13I1^^U{CdG86-c9cAwkFy=`O+tXR5Ru>Ve#D zpDgvmegpG$#|X+Qcm?bY_G8QEE>4`3J*MKyu$!IgKmOt znk!<{Ql(i_WI=GfXTOr9xL02HxIzp#8)vJQcd$ z@&+JmpYZ^KU?|H<6vVkzb#C@-y@||$_P$T^Hj8fTpk+oFfYPKgQmWzjxMo_X#Ie)M zV5kX~>c@v4yubH@&6Nri;G!@MQbc!*KU7`I#say+09ezf4)9|yBL4`hmVu+sU{J^; zN_Dpqy8r7~kM)xUHLf>U>wEO;QRNg-*9_c1Kmn@ATu&e@dhY8QP%)Q^>IT#O6AutTj>T=^%t%kb*a?t8vib)Z{YFotp;#?c&M?;z7q|z0Ko= zm&e1|$k7{fFN&w0Nq-Z}YBx^sYaOF;DzR>hf*I!SK6bvX* zV5yZX>!vNUb#r%xX1|Ul6@lgxc77K9K(3E@i8IgRC{>x$IKf#Da4wiVhIVJolHM#? zJyyBXDCT8MtTD(;QzcEIFu5D!JkS~IOsYeq=#;aUkY`t57hzXBF3>E5RurLJq-gx! zsdPXNl|(YKIwCqkvu`uYhF4c!z{t9 zynf1SAhih?Ak=4-h#_z3L?Ri*I zUZg&K%5cC}?BVVv4FI3;x$GS#@^EIoM_C6aA)nc7U#X|Jy?_MmnXD4DDoxAs&4j62 zuNG5dWIUHLvkwY2^*c&e^{xp$KIOt^#f?qSq0am&f`-K|z*es&;&t@w!=|+xNQ9Rh zGp{ML-)jHa(!A&$`4JRi*4YVA1vninqg8F!ze2vBIkZeER)MqkO+sJMVa3l6fVGlX zG$~w|o;_}JLWR)4&H_;qA=-6A6*$SoNxawwWee7YU93QZ5~vfku~k0efp#K#4nRpP z1XrB1;r!fLjzl?<_vc&=MY+|iKo!K}H6M<*nPa>Hui_HSwUn2cxj>$)qm%Oz;;-Eu zd`cXSo{mkP_ZL2Zb+wjiSI`({BD#pdn4uiCU22+&vWVuf&7Tz36{rOmYqUdy_U5+N z<3HBPSKNJSIj1~t;Y261k!2STnE2qRUsm}g-|vGz`uO2qFR>jMhEG09%1jRG*Vdmm+5+5X z9PY3g93OLXgke}!>tkaby!#bKpz40IhpJ&(g2h8S!gKfOuEsE7n^rULDOMf3#P@bW z!xFP&*$1U{GScg_cVc5G4x9v9ylpxSQtJ)07#I?t_Vz^5Q>71o@bP*D5GMzm53GL! ziQ=|J$p%tFE;e0?1n{w_V2N}7rU~TZ871J>tGd_6)0lTL#ljgh$&coFiw$Cbn+9_a zWQ8+E2n)xwr2lcNEb9G4{+*nJ!U&|(d3~aNct?nonbpODM@Q3h3tsK8vyo!~qmiQ! z_4hXr17eSrE#oHXsJN4RP*xH9Bx{9G@G}-QK04$IIhXH|TgCmx5VXpXt%l>Wb`f_F z2vtI^$Wc3F9nBG)evY=q8I}D{D&Zw>_Uo4QOYc|~mOpzZ>Rv9pUcAJE(@YbRff*{SB>;a(QM- z8Ca_dC0>_WjSI6nJJ(s(aavqW9y%cu~4W0Ko*j5u&MSU#AGdCQ2Cc(DM0`(q4x&wQf;giiFCh}h{b0ww(cE0bx zP6geaxrR*OxtQ$|?ZpqR||Rz7vOd7aMOM%WpBggAHIbiHvWxNb+IDKi!u<7!8Dy zTLVN`4%z1)j0^b_H2QRU45LKT7=B%arrzjw?IMP-r_)u3CAKWqIG5VY&q@3oxEVxv zQ8;STN5l1D#vZ+9JG((j?)Akx4aYPW8ecJsLC>V3-sh-_8f+KJuO#L;opTB4q-}G^ zzsy21nop^VIhc#7ySc?`QgX@IaPwTudtV+Q0*i2vxvEFmmLx>X4^WP9AhPs~E7yIb zK%_R*DL7ckf34p!1Vymc23c%U%k!u;=sU`+2NA71G#|NG`xR+FI?r7)YtD)rMxnd_ z>=us=M>#N#v8&PcG$V1%7`pxedd;i!?z&w!&Gyp_ur1-mfz9`NIXM-x1ZovN3w^>P zcnt_6HS1-68Oo0QoPpjI+_=tlX`KMiI-9CZ$X!WBi=)PbHRaHZcOxsK#bxC=7K0NOV=arxt?)BQe-UL&AWc|kY6f9t zTC*Fb^E6?=CJPNcJqLpf8WL)oH3qN8bJzRLCa31bD4PUA7BZ^dkrk1jJoQQXow zyvf;~QbHJDOWMC;)W$`R1uFQKHk<%Ze%PSSBcTe(Xp=kB9hvZdRGcD4bdjj>xrSeOy)OxewUJ`_Spa(whBK)wL&u$3+6=rIIXKr{RY2T zxD|jDz!qgCb>eQ*W8x5JcY1=U)kI7Ail39z?zD>#$2XSEcZOu=Fu2ykVDL0`RftmF zcW*JnGC)%Wee6+mr}|;mv8Ag1=7gYCrdrd*N<217wr8lN)jupr_}h2g5fQ2z+}p5A zVG~;C1Kk58D$uXsy6fj`+?$QKiZE4Xr7*@YReWpBP_^$yn3801jI>HLd*9lUb3^Wn zdw-DNqVs!xA~~^iF?3p0E7AD?-I0SG=az$=2lDU`nlBQ&XIF}56u+DoR?2jN;Ht^_Z|9*rdP#iDTW?;#zm#Lkm5OfB>7>2Z*^?cdxU(V@&z z>iRv(KZ-e<2;Co|#5EB@flTRv2HTrTy?StX(bnM?oz1Yksd85+70$+K}C31qv^> zayl@3c-kvs7BEViGM!qxai%mO$PQeTKM{FN?5>e7KK1GfJVzDI2qg-dfDxTJ%@us7 zjc9if__|!d8O=RBlq;egMIKALIFT5WoA_BDX}CD9|N9QaPzXGIs<0{Ah%2xG9zq6T z?$o(<3!`^C3x(J2iz70PVKuoTo3h{%+R1Mp>bNobj{zQo=0{{T)!tQ*84XOMwdA8! z`yLAp9^X;fuqZ#LzNM%P?#4ae^xSfBf_8o;f|bCSpZ&j$M7juYN30F}HEkIeGWUDi5RaDICy?ODJAL6=Zf`|-n8%fYDsBRIzNSC+< z#Lk>sd%x|0Lhv|T@CZW(rzma#=dalB(Dqk3iz zX}k8$VaDtbVP@uM+tv!ljYB(Sud0mB`&}by*7qyManYB&x`lBI@gK#WGjNxaV1clU zM$d(e`$~=Gjk93`>KBXEZ@3eMSmGOJitjwX8l|OQOI%y23!~a>^e866Xhz|GLO%&hd^ z$7Q>wx7l(fw_Xx57;)MCxHe!x;q-MEbEx7bQ6{b9a+ZNMlcbY&t9vc+f6tD;4*9>P z2NM(Bzh}q)2I~F*dO}7H2KHvQjyCpx*tNfyJsCZ#FWOF4T}D7fmQu#dO5e#r@r#0^ zRxmPgvef%8I}trAGfOvo^1n^+|JYFc-H4^0$roz(?*;|_#`35czGf&j13NoDJsl&% z*NT<-UwEFlqn@Ri0l&40r4c^eU)A^>4F2GKtPJdbiGQN}BU3Z5{*C_$>e-4JnVFb= z5rALK{AHu)Xk?{~&-QoyKZ4jl!k>PA&3+?B{6Fa3f1-GQXvBa1F@FPqe{BD5?!N(d zf2joY9E|?#|Njn-nZ1LfpsAicJ|n|l6{Yn4CDSwf9sYkGd3^dm$L4P=QP}$H)h#n? z6MR|~Gi!cp2eW?^e>J3HX6R_@@P#-su>R@Fe|{Mm8S(!t|LFd>x(3c6cVhO2ul+i%!Pl;8Ai>FAj)>7 ze6qa`vP=Ba=?x53&#?2#d}U|5AI=Ioqdi7a2zv+k5mnpG68P)^a0n*(g+S|+;1Rq#fLH8?(C08+ zB;#y|oxuS8Y$`Hogj#Q=5e)-e8r;gniuFpzikwv-3xBInM&+;R>=_m_pQ(<8jzty= zY2{xPE2{U^m`2PKBa`OYN~KCo^9+;)N@4TN<*UkY71_1w3u)(*GA1T92$tBbp;{xT z)%#~g511Ya?O7p7V z<;Tno9wppK-do&p-o4%p-lg0x-oxG7+~u%K!rDsd7vnL2Ea?E-hWLmEqFYu(iE%^x}$&SUpO|Hdw z({Od_xW7eu?ubqIlYx?C@pCnFVXIEj!8ZAA^T8nA;1FJc}Quc zLT451Z6f}35m%B&g5LG?_i#*ieCmdT;GAj_-8l57lktVfeFkXx#(2$uDq$prCjSt$ z9b^K17>(z8^&qu%b&u#Tg6j=r@rDKc<4)IV<=!MvL9)XL^BQPks`a)p*?Rdmhei2a zm>Lp7S^|F4SmwOo1MZ3aoIyo>jlWlDw#ypoS0a_S)dA6oy_Sid?Si2Z;JDi#@TZ*(4C)+HaDnuL?lezV18*3 zPtOqheP_;wqvaq^v*+u^Idf0Y?;xVa(II9!-Mz@6`1BRR-G0wwS8b(>VCGfU2LABE zAJHfZQ#nfy|&>Jx~IcUZPj+(hByB&@djpg7IQ$>{F%HTxusbw0qe}gl4Cp z=3Hf*C;P>$Od^}H*1u)zH5M|c^0?9beK{Ii$%ApP`PP@VL+OjNPABN>CI*iO=6NV>WM(2TqYvMJS)~#zT z&`S$+5;x{xE-y2_w$0?bv4;y_+ioD2T^c;&8 z4ICEH_GLHjhd$rodT9N{Y{4Li1hBe~h%XWcjR>aI38U(2OG*CuJ5T<(FBr7K1>#{@ z??O0=)o+G=g+e7!-*O}5Ux<=UHn7Lw?~ ztKKbI?OUrg{7`E~T;T_iR=- zNNJ)ZB;)r}NvdN~J_&2OLZz4C;dR8x_$Ojt3K%_4{5++6N|5P>pnE4k7gkzmDzhbj>l}}+rjgI;-Sh%E(mkLg<$}5 zAh&;w?ynA6P#xK$U7ogsYl~82U+eG9o|-%^1v^Bg(7BMWbj{)|OzY*qjDVE`_kwGt zVs$_zqDx_Ge7RLBw6Nck9w$~w>Y=JQ;&iE7THj1|%98kO8 zcnnp>di9M^gTSU!xsdrG;E3|3JlDV;FJa!tsnNrrYS3u%bm8AILEC!*hQQC6k0!Vt zBI0PF5iVExnPJj1ic(}o(5%niK}><{y-6a?RMH1Qt7^^T_wY9+h?p6<$J8$NnYOKdMo~=t zuAhPIoj#vIxAV8}#S<{u;uBgmcxq==>rM|AW2d>T+d`=zx_)(Mi`Y#`xY-C@QPS_;gdE!xCe^D2X+VQu zvFzKZ)^a%2CN@y`^rPlgRGYfE%~eh3{ zOhjq3xmY`@oo~;qhk)lP&vf!Oy0<-o7@mDSDTk(n?q2{$#7Ma_c0 ztln}Dkv6V5#X)FYM~HiIk9N(n9fHC%--a96V~jZO-cq;BN7gwL5^IHACE{TtWFU5x zHB{Qq=2ikD92GR0MQrVyR8oF-i0-NdsS8AfP8svZf`mbDQ>ZL?{3SXb$MrB+>H6)V z-){;H&i7j?(0d-Y?wtAgEby63sb{orIUt32;S8)5s? ze4{m=OSmmsbFl9En2syyg{UXPH`xI1JzVcSM&C6DOerGKN>|9{0zsgN?9gj0XX&5D zRhMcVe!{iF_ujQh6-k34b5m2kT?gOr6dZ^?IJ+}(%er@46C8y-X9qf|R+? zREAZC(Qg{@IjhOmjACw&Yx4j|3V_F4x~c7a9`m=8Iv7SS#`D8RMF~fzQWn#%_v>H$ zXx*q8_-?qPuwjTbknWc5PU)5o=>|ng>5y&-{RVx#_j>R9e((C$cV^A(b)NG)d+)QK zJ$tP==Xd@C^Zk?%))(^rA=W}nUMLoG2*iGSqcmyWelaaytV(k#4mL&7dFu+qz0 z+Uj$IKK}6xB8Nz}OW?>M$*DOn$(hMG4 z12MaKxX&b!!&(TZ%)n&uHQL;fRx`Ba95 zL3}ym>~pOi@#h;$!u^ITp=5g=5U1t1!LjLkx@~p9(~`k;PjfMV+Y%Ly4qY^-k9p?cX3-z65|s=bJF*IoYNknb zgk*K}_qoZDjp&9B@|mh5ROkkTl}Nuy)09X#db2ngw@rmt&q-n(tO7uIc%Zd6Mtf=F z(SjUBR3ljdnfHjvtODJapvuGVR*B@_m_$`u4=0@)`>(9R2jWauE#&~4FFs40Pz`)0 z{r(~Nu4hR`LuS{UI86k!5@UhjFg6#zwcIf;F}HPCv=Q-C+-bU{ZZsw@pkwC~r!AT3 zQ7cW1aaFqF^==ee)58$!jk~%ohm_~d#8VQIjw3C1*wivERk%nc#Jle0=YJO1LJIS) zde*l*H@N)x$^viRJRBIUQA%AuF^gJqw6M@dQGAh@c24Uu{e%NuS)MLfws*ExS$e+Fpl9n^ zGkTU}D)JfDjs@2~!xG|IfQdECF_{n6>5O#t?%T2Z_*l%4@^TL%P9Pb&41dr;G zYwHBlG9jO>T9jq8=G>fcEiQuww_RR*3CAJhUb9w@2$#8JuHEeu&hGXd+VRM;S=Vl8 zx`42f)6HAL<)b^e@mSv}*5eGp>WqjM7w8YwXeLI|`bSXs_1i`;ydnB-28Pj9GufZj zX#u)EgnimWc3%@9AcGnbztf~n$oRW7^_q%N+Y5yg)T8dv5Za;ulTnaQdUq3XDWb(}*k;rL>+tS&&iuu|H(&};jiwLm@f!vu(3 z#&ZyJnTVCc-I=Gp??rqAto)Qp)DPf;C853NeD~jrN^Et<&eu3&mr3Z>)KT$v@VQv@ z?gE+Ex!9jiRB~y2QMK$Hol%7q+j%{E`=ES&wq>+sQ?fmlA$rF*TZrH|R|>_UkWcf% zWvH3^OX3jr=H)s8<;+s1a&IV~)M5w0C#-mu+C3%~YJ)wu{iW;D(q0zOHq(M@MkSDj zmma=2$J=*R%B|-<9<}O?HME&Els1%Q6+8}jRz1|vJ>zevI_8P^wVeLea-wW6f@l6U zFYj2)bCU)P)oa^8jJ~_Hpv;ep78!nMCU{6D0x~Bev6Gg-r?#BSP(DOJ%8>bbCO=e zlbH|JZJ1?AMXklL#akglF*)bUOA;{CTsN?w`2}Wu^D~CI2auP07~HX!JXY+{bt_hb zENoK-pkB8~J#~#8=FMD=s8+=dq-d z5RyT)mibtjP4%@jU#KFXBrrL;$r#u0&?Q_c69YO7hl!_swk zB_~atLqB<^`Aj}ae2N=Ym~i*QUb7>#l+W}fsui|=-TBumhw(7JG!*m$$+|@c@;X_`JtRQDS#ZS zqP>jC3C|IvKEYlDr;a9HzV1Oj;~jFl@ey9 zm0M1<=mVIT_$Ce59C3Y-{_gXZ_p~WT?!Tz8vMdpB`8u8ER|T-76`nUGWw!VxsA`!Y zZ&+#&yB?~Z&Np7T!Q|G2GD~TQjPH)LBJS@-uS>sCM68cov>7+H~rMm3>9mGZJsL_Z`0p;)%1c*NV2c%e(c&K_+`9(dA)Oo;1hp z-p9DqZ8FM-l8<^!H&ds?{HXTKGrI@+!NO!BjvjI%i_>-YoT3dx7)>ZuDVm*XUYzzm zu8689u6)J&@ZE7%UO04 zzHkFh%p~j~^C3;yG?TKtF(m{@{J(F}@eZZuMZdDvraZ#D``Rm%8 zlVhV7Yw;bsqWoz>Pe0{SjSoGwFrkg<-i8$=@ULMz_%w_Nz;uDa7H})!H}Ov1PQlzF zWSKg7I%TZm@8LFPtrJ31-!iT+B%s>&2v@!RBBXGrvSz1stGmvaMhk# zy{WVgh7BzUBFGEYeAR`LcTP&ZpIrdWrqq$2n$_^PQC*ga*BC zDYF|{!kdUeO`@c8F2ngV65G8`w;AYiZPBT;QYxAUZ<&&mlQ>aA^aC;tE1ox^Ah`?G z)n`cYYQ>R9r=&$kf3tZrEcDU2GNygA@vJO-|JrJD{2q;^q+#`LfE`ez-VJuyLfT;RsWiqEo9D?FaU$vI zWdbgCVJpL^%$Mm0P(!ipWAY%QM{!|K!}VT5MH;zZH8iZv)u`O7rXrD>*e6LW!1TrDJ6%q!uL+PSE(!a92V=sja;p zc{d#2j?=Nry?rmjW2Jrdj{|Zw{o^ulzrA4eZ3VhFXG1R zw8rapz$Lz@EIbX9X6f4y$4$RQgQdh#X}G6)+i8Wj6mKtc^CQ^(P?NiR>WK*HJITI~ zL>mm*2x+;fxJS~OAT5!kH5zH8)+`UW>^aR2MS5Dm;K@}(Jz*d7vjdKDfRYE1i_b28 z{c7KICXdvu3LLx!xk=fi;&dLj5&Cvd^X(>m*I@ZceN$v7_i*@UcFJkjP2ZJa7xY2$ z9b#QaMwJeV%@n>_+G5)3%m8-QMh1}xsy*+TQ19hi&r{p{gKDJ~O00B<$DC$J(8NL% zIHAfHZo#)7l>mpbY(coGv*d7e@KC{qRh)^07n3Fi1=FDHbk@ zx~!~ui`hrpxsIVCpY0>qU{1Qwwuj7S_+R+7r#78cZR_&kFJ}KDF8rC^|>G9;T9S9u6zxH1Da=(!GIYK|;_%IFkS<^%asI>;1Wm$Lm%5 za>_#*1d3N8wT~ZS613DDSwyZMWxlmmI?%5HnL(=(yz-FnkdjCs9n2r0Pz_QEu5)Njg{fPazp_MhRB$apR zG-isW9^;qK42n)wdj8RaJ2RzSrTS+;));MqYwq0d-aA``|#~7$m67&kJlE?zl z*Fk%)0xf3TMVZ?DJZNZ|i&P@(1dJ+pU~xr?#!RGty^f1!^S$56v@OwF9XuPB=jAV< zOc%!H>iU`&YX{vw>_U}t=fPZ5q;q_w$GX3ad#XIDf^?-)yG?4HU1RI*Gm@1+t@8`w z*8wsP!$(p96LKkF5&4cO))6Y1BsH@`*qysT;tm)iwm%S~ z{RxcmZj@TYXQ@U8g9rDzcj?OrrS@*C`#J%Ak1eq{uxXj3=HiXhh|*=gV?7V!1>jtHMTLvpsw1h-ypc+rcLr=ib%?7*Kl4r*x~Q+b zpRZ8rf(tdfbniC%pXJ*u2rAUlmxS)`g&v>hBz8PSDt_w9F>f){#}t7AE=Al{(~_;W zIz=HmxLuA}3>Uz)$@A}IjIXl^=cu38X`#4=U}x}B&L%I6EfyByZ6@+rOaLtVN|ASk=*+qc( z7r^yX^e_rCQeH9fdaSwJaLwJyeg>NzK;GJ!xPTMdb4-V4z`Nb z1TE`N$5n1K8LxHE4Sh_0PbO!aqM`ZqQ%D1wC;M89mBbR{%wl5C%~*5+Bj?O!k?j24 z0c)J`9D4syxhjSzo}(#c+ZUw*Vv}}6`5n+=uHl)-? ztPuP6`*S<@-y0Tx!$*@oYKt6Eeoa78@{y40K1nL4ispv4IF;y2*~L?x8h`&F1~i-` zUiafUiZOJ2gyPb|_eM&$?-r|HWbBY$jMc}BLMfYa${R8wcBt+v^~jy$r>^jE59yJ7 z*0YoH*R;=zYd=I+Be8QmYmBA>l%7j!Sl1}1R@;BX{K)O_F=#2)xFaa(D){J7Tj5!d z7uI+u3e?68Mlx7*RPl5 z!i6Rp%ld~0`yzEGiXGI}OF@%_v8vgOL~~mj$I$>YCGA@@42&y~lPezJfn366BAVy< zTfc>1-!_wSa^c`>XT>qcl-|_K?|WIaWskhZ2sR#M88tJNzzE2$!urtaXyW+o3DriC zMZt#N#(N)+@Oby385|bkVnbxp!pZf-P9t_!HNsV#>U^(<- zz1Bn_`%ClNR_q7dL4N%T255JLbH|LvWT8%4>U0pFrpNhXdANWaug5s-V#>Sn9p;ig zOulotUW83ZEWQC=tHvu2?W-A{X4pb5P=~3_ge~sQuv7bV#dbx!?W$b4+HmzBJ3?y3 zx%)|}T2fOxq2V(0_8V^-3@OiS|AVf3W|fNjVgCBEC&oHXuVTJu$GsyvV)iV`-4LU`j>)<`+L*F zM9ZKCEDrfSIqdS1AA>}tIU*z;lXHLO6}V#oBUtJYMLjwev6iZNd2QRhqldFWDPvg# zf~0r}*!qm2CF(#Hv{M~ukB&nA|X3u!>E=BzS4Kkq3LIuwYAR1aHk#v4G(@w%R|qZR;46s3 z+WU9D6Nq1nl?sImFa(l}P-qs85m%%28JdhZJ9B3o8)YjeG=W^7h{%~+RP)eK>mj)r zZ0CH7kK&wWXETc}j*BEQB{pVzz*Eqgz{qZ4-13qoX+N%&5BI)_2tC%<5a@Li`@o*g za^UUR7Qp0V6Dge!IXPVLEnDtSzIm!#zFZhQ;k*29BI4C=I5b@&D$AIURk%7z*GNGe z#7BZxQqhks^@W!GUrIUvKb98Up7-V9;p&&iSinE(<`E^&?3T@Hkdxg*cP zs{6(nzmbd@;u=4|n3?6euM|06wK6_ zuvpyjNgdwpCx(}|Iqmp!@Dwu8zg=(FZ{<(~>ZP0=hNf;$3e~~XjZY~VX4{#sakYJo z8^y5>vEyk1MWuMAPikd~DK0gP7t7WdHAU5&g}wUxEwxZ0E~WW;H@jd!B4>>cO)=T9g9NIx=?kJ}dl27sFnI7< zEk*6MX$wsY6A7^|t6_-xDyE@`B?(yh4`Zj|i)iIe?D z#7m{gt`;_apM-6n|H=`(gSMu>0SJ=0DSQTt9pIce?HmfkF0PFx~%&uKUTD{hhD7 zq04^f(|%HJKUuY(pTD@bU**r5ZaBFc%g?=E$NpLJao(&Me}Da1{|%G(XFIQYZ-> z*%3;W2&<_*%+?HU=)h)UZ_4x&M}2~jz;}e(SVM1AE*YWx96%0kATJ2a0p#N10&6n; zwY^_x_04Mh69|0*L%^vvra$`pqxb*Poc!}FUF?lb?jW#4;2q!}8#OngYA$LM>Yp|a zP7W?a(r-3u>wnpRU@!+_!2V_f{nHN!1pOO7Fk*8277GG%b0gNJ-)tNR3Cw@C%f*Qx zA%F7&aqx2dqdpGaf5d{oh(`V%3%;3Lf2)rZ#PxR@2L~Twefr&x0}Q-jUw`Wh2bh!d zAF*Igo`3jpf^Trq-(xvB|2i&?_AmtYYyaaP6Q03e7~kaR2I*9?u|dqUn_T~dZl$bE g5Yy>quKifM92{Zxjz6->!O6+Xa|ZwrlNZ19KSh_mWB>pF diff --git a/validation/figures/party_scale_examples.pdf b/validation/figures/party_scale_examples.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5bd702aa0a32e1c501374ab854734ba589c19c4d GIT binary patch literal 25345 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 z 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 d8uS= spec$start_year & panel$year <= spec$end_year, + ] + if (!nrow(d)) stop("No trajectory rows found for PartyFacts ", spec$party_id) + d$series <- spec$series + d$display_role <- "trajectory" + d$is_labelled <- d$year %in% c(spec$start_year, spec$end_year) + d$label <- ifelse(d$is_labelled, paste(spec$series, d$year), "") + d[order(d$year), ] +}) +trajectories <- do.call(rbind, trajectory_rows) + +anchor_spec <- data.frame( + party_id = c(1545, 1375, 1565, 1567, 433, 809), + year = c(2021, 2021, 2019, 1979, 2022, 2020), + label = c( + "The Left 2021", "CDU 2021", "PiS 2019", + "UK Conservatives 1979", "French National Front 2022", + "US Republicans 2020" + ) +) + +anchors <- merge(anchor_spec, panel, by = c("party_id", "year"), all.x = TRUE, sort = FALSE) +if (anyNA(anchors$economic_lr) || anyNA(anchors$galtan)) { + stop("One or more declared scale anchors are absent from the release panel") +} +anchors$series <- "Standalone anchors" +anchors$display_role <- "anchor" +anchors$is_labelled <- TRUE + +plot_columns <- c( + "party_id", "party_name_english", "country", "year", "series", + "display_role", "is_labelled", "label", "economic_lr", + "economic_lr_q025", "economic_lr_q975", "galtan", "galtan_q025", + "galtan_q975", "source_support_class" +) +plot_data <- rbind(trajectories[plot_columns], anchors[plot_columns]) +write.csv( + plot_data, + file.path(output_dir, "party_scale_example_plot_data.csv"), + row.names = FALSE, + na = "" +) + +labelled <- plot_data[plot_data$is_labelled, ] +label_positions <- data.frame( + label = c( + "Fidesz 1990", "Fidesz 2022", + "Danish Social Democrats 2007", "Danish Social Democrats 2019", + "US Democrats 1944", "US Democrats 2020", + "The Left 2021", "CDU 2021", "PiS 2019", + "UK Conservatives 1979", "French National Front 2022", + "US Republicans 2020" + ), + plot_label = c( + "Fidesz\n1990", "Fidesz\n2022", + "Danish Social Democrats\n2007", "Danish Social Democrats\n2019", + "US Democrats\n1944", "US Democrats\n2020", + "The Left\n2021", "CDU\n2021", "PiS\n2019", + "UK Conservatives\n1979", "French National Front\n2022", + "US Republicans\n2020" + ), + label_x = c(.84, .36, .12, .33, .73, .36, .11, .65, .14, .84, .58, .88), + label_y = c(.36, .93, .32, .49, .33, .27, .16, .48, .93, .51, .91, .78) +) +labelled <- merge(labelled, label_positions, by = "label", all.x = TRUE, sort = FALSE) +if (anyNA(labelled$label_x) || anyNA(labelled$label_y)) { + stop("Missing manual label position for a displayed scale example") +} + +trajectory_levels <- trajectory_spec$series +trajectories$series <- factor(trajectories$series, levels = trajectory_levels) + +p <- ggplot() + + geom_path( + data = trajectories, + aes(x = economic_lr, y = galtan, group = series, linetype = series), + colour = "grey25", linewidth = .7, + arrow = grid::arrow(type = "closed", length = grid::unit(.065, "inches")) + ) + + geom_point( + data = trajectories, + aes(x = economic_lr, y = galtan), + colour = "grey35", size = 1.1 + ) + + geom_errorbar( + data = labelled, + aes(x = economic_lr, ymin = galtan_q025, ymax = galtan_q975), + width = 0, colour = "grey45", alpha = .65 + ) + + geom_errorbar( + data = labelled, + aes(y = galtan, xmin = economic_lr_q025, xmax = economic_lr_q975), + orientation = "y", width = 0, colour = "grey45", alpha = .65 + ) + + geom_point( + data = anchors, + aes(x = economic_lr, y = galtan), + shape = 21, fill = "white", colour = "black", size = 2.5, stroke = .7 + ) + + geom_point( + data = labelled[labelled$display_role == "trajectory", ], + aes(x = economic_lr, y = galtan), + shape = 16, colour = "black", size = 2.1 + ) + + geom_segment( + data = labelled, + aes(x = economic_lr, y = galtan, xend = label_x, yend = label_y), + colour = "grey55", linewidth = .25 + ) + + geom_text( + data = labelled, + aes(x = label_x, y = label_y, label = plot_label), + size = 2.6, lineheight = .9 + ) + + scale_linetype_manual( + values = c("Fidesz" = "solid", "Danish Social Democrats" = "dashed", "US Democrats" = "dotdash") + ) + + scale_x_continuous(limits = c(0, 1), breaks = c(0, .25, .5, .75, 1)) + + scale_y_continuous(limits = c(0, 1), breaks = c(0, .25, .5, .75, 1)) + + labs( + x = "Economic: left (0) to right (1)", + y = "Cultural: cosmopolitan (0) to traditionalist (1)", + linetype = "Election-year path" + ) + + theme_minimal(base_size = 9) + + theme( + panel.grid.minor = element_blank(), + legend.position = "bottom", + legend.title = element_text(face = "bold"), + plot.margin = margin(7, 12, 7, 7) + ) + +ggsave( + file.path(figure_dir, "party_scale_examples.pdf"), + p, width = 8.8, height = 6.0, device = cairo_pdf +) + +message("Wrote validation/outputs/party_scale_example_plot_data.csv") +message("Wrote validation/figures/party_scale_examples.pdf") diff --git a/validation/run_postprocessing.R b/validation/run_postprocessing.R index 48bd1ca..47b3e27 100755 --- a/validation/run_postprocessing.R +++ b/validation/run_postprocessing.R @@ -290,90 +290,10 @@ ggsave(file.path(figure_dir, "vparty_sensitivity_countries.pdf"), p_vparty, width = 7.2, height = 5.8, device = cairo_pdf) # --------------------------------------------------------------------------- -# Illustrative trajectories and landmark cases +# Historically anchored scale examples # --------------------------------------------------------------------------- -trajectory_ids <- c(383, 1567, 379, 409) -traj <- panel[panel$party_id %in% trajectory_ids, ] -traj$party_label <- factor(traj$party_id, levels = trajectory_ids, - labels = c("Germany: Social Democrats", "United Kingdom: Conservatives", "Denmark: Social Democrats", "Sweden: Sweden Democrats")) -traj_long <- rbind( - data.frame(traj[c("party_id","party_label","country","year","source_support_class")], - dimension="Economic", estimate=traj$economic_lr, - lower=traj$economic_lr_q025, upper=traj$economic_lr_q975), - data.frame(traj[c("party_id","party_label","country","year","source_support_class")], - dimension="Cultural", estimate=traj$galtan, - lower=traj$galtan_q025, upper=traj$galtan_q975) -) -write_clean_csv(traj_long, file.path(output_dir, "party_trajectory_plot_data.csv")) -p_traj <- ggplot(traj_long, aes(x = year, y = estimate)) + - geom_ribbon(aes(ymin = lower, ymax = upper), fill = "grey85", alpha = 0.5) + - geom_line(colour = "black", linewidth = .65) + - geom_point(colour = "black", size = .9) + - facet_grid(dimension ~ party_label) + - scale_y_continuous(limits = c(0, 1), breaks = c(0, .5, 1)) + - labs(x = "Election year", y = "Posterior position (0–1)") + - theme_revision() + - theme(axis.text.x = element_text(angle = 45, hjust = 1)) -ggsave(file.path(figure_dir, "party_trajectories.pdf"), p_traj, - width = 10.2, height = 4.9, device = cairo_pdf) - -landmark_spec <- data.frame( - party_id = c(383,383,1375,1375,1516,1516,1567,1567,487,487,409,409,433,433,1545,432,809), - target_year = c(1972,2021,1983,2021,1983,1997,1979,2019,1994,2022,2010,2022,1988,2022,2021,2020,2020), - label = c("German Social Democrats 1972","German Social Democrats 2021","German Christian Democrats 1983","German Christian Democrats 2021","Labour 1983","Labour 1997", - "Conservatives 1979","Conservatives 2019","Swedish Social Democrats 1994","Swedish Social Democrats 2022", - "Sweden Democrats 2010","Sweden Democrats 2022","French National Front 1988","French National Front 2022", - "The Left 2021","US Democrats 2020","US Republicans 2020") -) - -landmark_rows <- lapply(seq_len(nrow(landmark_spec)), function(i) { - spec <- landmark_spec[i, ] - d <- panel[panel$party_id == spec$party_id & abs(panel$year - spec$target_year) <= 3, ] - if (!nrow(d)) return(data.frame(spec, status="missing", actual_year=NA, economic_lr=NA, galtan=NA)) - d <- d[which.min(abs(d$year - spec$target_year)), ] - data.frame(spec, status=ifelse(d$year == spec$target_year, "exact", "nearest within 3 years"), - actual_year=d$year, party_name=d$party_name_english, - country=d$country, economic_lr=d$economic_lr, economic_lower=d$economic_lr_q025, - economic_upper=d$economic_lr_q975, galtan=d$galtan, - galtan_lower=d$galtan_q025, galtan_upper=d$galtan_q975, - source_support_class=d$source_support_class) -}) -landmarks <- do.call(rbind, landmark_rows) -landmarks$era <- ifelse(landmarks$target_year < 2000, "Historical & Cold War Era (1970–1999)", "Contemporary Era (2000–2022)") -landmarks$era <- factor(landmarks$era, levels = c("Historical & Cold War Era (1970–1999)", "Contemporary Era (2000–2022)")) - -write_clean_csv(landmarks, file.path(output_dir, "party_landmark_plot_data.csv")) -plot_landmarks <- landmarks[!is.na(landmarks$economic_lr), ] - -label_offsets <- data.frame( - label = landmark_spec$label, - dx = c(-.060,-.060,-.055,.045,-.040,-.060,.035,-.055,-.005,.080,-.060,.060,.030,-.030,.035,.080,.025), - dy = c(.070,.040,.055,-.035,-.070,-.040,-.025,.030,.040,.060,-.035,.035,.035,.050,.035,-.060,.035) -) -plot_landmarks <- merge(plot_landmarks, label_offsets, by = "label", all.x = TRUE, sort = FALSE) -plot_landmarks$label_x <- pmin(.98, pmax(.02, plot_landmarks$economic_lr + plot_landmarks$dx)) -plot_landmarks$label_y <- pmin(.98, pmax(.02, plot_landmarks$galtan + plot_landmarks$dy)) - -# Country shapes for clear grayscale distinction -country_shapes <- c(DE = 16, GB = 17, SE = 15, FR = 18, US = 8) - -p_land <- ggplot(plot_landmarks, aes(x = economic_lr, y = galtan)) + - geom_errorbar(aes(ymin = galtan_lower, ymax = galtan_upper), width = 0, alpha = .35, colour = "grey30") + - geom_errorbar(aes(xmin = economic_lower, xmax = economic_upper), orientation = "y", width = 0, alpha = .35, colour = "grey30") + - geom_segment(aes(xend = label_x, yend = label_y), linewidth = .2, colour = "grey50") + - geom_point(aes(shape = country), size = 2.2, fill = "black", colour = "black") + - geom_text(aes(x = label_x, y = label_y, label = label), size = 2.4, - check_overlap = TRUE, show.legend = FALSE) + - facet_wrap(~era, ncol = 2) + - scale_shape_manual(values = country_shapes) + - scale_x_continuous(limits = c(0,1), breaks = c(0,.25,.5,.75,1)) + - scale_y_continuous(limits = c(0,1), breaks = c(0,.25,.5,.75,1)) + - labs(x = "Economic: left (0) to right (1)", - y = "Cultural: cosmopolitan (0) to traditionalist (1)", shape = "Country") + - theme_revision() -ggsave(file.path(figure_dir, "party_landmarks.pdf"), p_land, - width = 9.2, height = 5.2, device = cairo_pdf) +source(file.path("validation", "plot_scale_examples.R"), local = TRUE) # --------------------------------------------------------------------------- # Predictive-interval calibration and concentration of misses