<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Kristian Vepsäläinen – Maailma on jakauma</title>
<link>https://kristianvepsalainen.com/blog.html</link>
<atom:link href="https://kristianvepsalainen.com/blog.xml" rel="self" type="application/rss+xml"/>
<description>Datatieteen konsultointi pk-yrityksille. Avoimen datan analytiikka, bayeslainen mallinnus ja fractional Head of Data -palvelut.</description>
<generator>quarto-1.10.18</generator>
<lastBuildDate>Thu, 10 Sep 2026 00:00:00 GMT</lastBuildDate>
<item>
  <title>Kuka allekirjoittaa kenen aloitteen? Eduskunnan yhteistyöverkostot</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa11-yhteistyoverkostot.html</link>
  <description><![CDATA[ 





<section id="uutiskoukku-kuka-tekee-yhteistyötä-kenen-kanssa" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-kuka-tekee-yhteistyötä-kenen-kanssa">Uutiskoukku: kuka tekee yhteistyötä kenen kanssa?</h2>
<p>Puolue on ilmeisin jakolinja eduskunnassa. Mutta aloitteiden allekirjoitukset paljastavat toisen kartan: kuka on valmis laittamaan nimensä kenenkin aloitteeseen. Se ei aina noudata puoluerajoja.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(igraph); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggraph); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidygraph)</span>
<span id="cb1-3">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># igraph/MASS-maskaus pois</span></span>
<span id="cb1-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-5">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-6">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Yhteisövärit: tarpeeksi sävyjä, generoidaan paletista (ei "insufficient values")</span></span>
<span id="cb1-8">yhteiso_varit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(n) grDevices<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colorRampPalette</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal))(n)</span>
<span id="cb1-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>)))</span>
<span id="cb1-10"></span>
<span id="cb1-11">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-12">init <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_init.qs"</span>))</span>
<span id="cb1-13">mp   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp.qs"</span>))</span>
<span id="cb1-14"></span>
<span id="cb1-15">KAUSI_ALKU <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span>L   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># rajaus yhteen vaalikauteen -&gt; luettava verkosto</span></span>
<span id="cb1-16">KYNNYS     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>L      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># säilytä vain parit, jotka esiintyvät vähintään näin usein</span></span>
<span id="cb1-17">MAX_ALLEK  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>L     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># massa-aloitteet pois: ne ovat ryhmäkuria, eivät yhteistyötä</span></span></code></pre></div></div>
</details>
</div>
</section>
<section id="verkoston-rakentaminen" class="level2">
<h2 class="anchored" data-anchor-id="verkoston-rakentaminen">Verkoston rakentaminen</h2>
<p>Yhteistyön yksikkö on <strong>yhteinen allekirjoitus</strong>: kaksi edustajaa yhdistyy, kun he allekirjoittavat saman aloitteen. Kolme tietoista rajausta pitävät verkoston luettavana ja mittaavat aitoa yhteistyötä, eivät rakenteellisia artefakteja:</p>
<ul>
<li><strong>Yksi vaalikausi</strong> (2023–2027): ~200 edustajaa tuhansien sijaan, jolloin rakenne erottuu eikä hukkaannu “hairballiin”.</li>
<li><strong>Massa-aloitteet pois</strong> (yli 20 allekirjoittajaa): kymmenien nimien aloitteet ovat ryhmäkuria, ja ne loisivat keinotekoisia klikkejä.</li>
<li><strong>Kynnys yhteyksille</strong>: säilytämme vain parit, jotka toistuvat — satunnainen yksi yhteinen aloite ei ole yhteistyötä.</li>
</ul>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">allek <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> init <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(tyyppi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TPA"</span>), vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> KAUSI_ALKU) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(id, allekirjoittajat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_allek =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_int</span>(allekirjoittajat, length)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(n_allek <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, n_allek <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> MAX_ALLEK) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(id, allekirjoittajat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(allekirjoittajat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(allekirjoittajat)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rename</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">henkilo_nro =</span> allekirjoittajat)</span>
<span id="cb2-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Allekirjoituksia ei löytynyt kaudelta"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(allek) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb2-8"></span>
<span id="cb2-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Parit per aloite -&gt; painotetut reunat</span></span>
<span id="cb2-10">parit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> allek <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">t</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">combn</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sort</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(henkilo_nro)), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-12">                       <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set_names</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"b"</span>))), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(p)</span>
<span id="cb2-14">reunat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> parit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(a, b, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paino"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(paino <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> KYNNYS)</span>
<span id="cb2-15"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kynnyksen jälkeen ei reunoja — laske KYNNYS"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(reunat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb2-16"></span>
<span id="cb2-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Vain solmut, joilla jää reuna; puolue väritietona</span></span>
<span id="cb2-18">kaytetyt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(reunat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>a, reunat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>b))</span>
<span id="cb2-19">solmut <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">henkilo_nro =</span> kaytetyt) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, nimi, ryhma_nyt), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#korjataan kaksi nimiea oikeisiin puolueisiin</span></span>
<span id="cb2-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ryhma_nyt =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(henkilo_nro <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1387</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Vihreä eduskuntaryhmä'</span>,</span>
<span id="cb2-23">                               henkilo_nro <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1400</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Vasemmistoliiton eduskuntaryhmä'</span>,</span>
<span id="cb2-24">                               T <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> ryhma_nyt))</span>
<span id="cb2-25"></span>
<span id="cb2-26">g <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tbl_graph</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nodes =</span> solmut, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">edges =</span> reunat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rename</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">from =</span> a, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">to =</span> b),</span>
<span id="cb2-27">               <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">directed =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">activate</span>(nodes) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">yhteiso =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.factor</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_louvain</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">weights =</span> paino)),</span>
<span id="cb2-30">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">aste =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">centrality_degree</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">weights =</span> paino))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="verkosto-ja-yhteisöt" class="level2">
<h2 class="anchored" data-anchor-id="verkosto-ja-yhteisöt">Verkosto ja yhteisöt</h2>
<p>Etsimme tiiviit ryhmittymät <strong>yhteisödetektiolla</strong> (Louvain) ja väritämme solmut yhteisön mukaan — se on tarina. Puolue jää lisätiedoksi seuraavaan kuvaan. Käytämme painotettua Kamada–Kawai-asettelua, joka erottelee ryppäät paremmin kuin tiheälle verkolle tukkoinen voimasuunnattu asettelu.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">n_yht <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nlevels</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(g, yhteiso) )</span>
<span id="cb3-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggraph</span>(g, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">layout =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kk"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">weights =</span> paino) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_edge_link</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">width =</span> paino), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey55"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_node_point</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> yhteiso, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> aste)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_edge_width</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">range =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">guide =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"none"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_size</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">range =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">guide =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"none"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">yhteiso_varit</span>(n_yht), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">guide =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"none"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eduskunnan allekirjoitusverkosto (2023–2027)"</span>,</span>
<span id="cb3-9">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Väri = tiivis yhteistyöryhmä (Louvain), koko = kytkeytyneisyys"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_graph</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa11-yhteistyoverkostot_files/figure-html/yhteisot-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sama verkosto, väri puolueen mukaan — vertaa: noudattavatko yhteisöt puoluerajoja?</span></span>
<span id="cb4-2">n_pue <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(g, ryhma_nyt))</span>
<span id="cb4-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggraph</span>(g, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">layout =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kk"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">weights =</span> paino) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_edge_link</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">08</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey60"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_node_point</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> ryhma_nyt, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> aste)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_size</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">range =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">guide =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"none"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">yhteiso_varit</span>(n_pue), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.value =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey70"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sama verkosto puolueväreillä"</span>,</span>
<span id="cb4-9">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jos yhteisöt eivät seuraa värejä, yhteistyö ylittää puoluerajat"</span>,</span>
<span id="cb4-10">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_graph</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa11-yhteistyoverkostot_files/figure-html/puolueet-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="kuinka-puoluerajaista-yhteistyö-on-nollamalli" class="level2">
<h2 class="anchored" data-anchor-id="kuinka-puoluerajaista-yhteistyö-on-nollamalli">Kuinka puoluerajaista yhteistyö on? Nollamalli</h2>
<p>Onko puoluerajat ylittäviä yhteyksiä <strong>enemmän vai vähemmän</strong> kuin sattumalta odottaisi? Vertaamme havaittua osuutta permutaatio-nollamalliin, jossa puolueleimat sekoitetaan satunnaisesti.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">e <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> reunat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ra =</span> ryhma_nyt), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">rb =</span> ryhma_nyt), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"b"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(ra), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(rb))</span>
<span id="cb5-5">havaittu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ra <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>rb)</span>
<span id="cb5-6"></span>
<span id="cb5-7">puolueet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(henkilo_nro <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>a, e<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>b)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro, ryhma_nyt)</span>
<span id="cb5-8">perm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replicate</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>, {</span>
<span id="cb5-9">  sek <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> puolueet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sample</span>(ryhma_nyt))</span>
<span id="cb5-10">  e2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> e <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(sek <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ra2 =</span> r), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-11">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(sek <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">rb2 =</span> r), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"b"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>))</span>
<span id="cb5-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(e2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ra2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> e2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>rb2)</span>
<span id="cb5-13">})</span>
<span id="cb5-14"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">havaittu_ylitys =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(havaittu,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>),</span>
<span id="cb5-15">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nollamalli_ka =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(perm),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>),</span>
<span id="cb5-16">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(perm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> havaittu),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>),</span>
<span id="cb5-17">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tulkinta =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(havaittu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(perm),</span>
<span id="cb5-18">                          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vähemmän puoluerajan ylityksiä kuin sattumalta (yhteistyö puolueen sisäistä)"</span>,</span>
<span id="cb5-19">                          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Enemmän puoluerajan ylityksiä kuin sattumalta"</span>))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
  havaittu_ylitys nollamalli_ka     p tulkinta                                  
            &lt;dbl&gt;         &lt;dbl&gt; &lt;dbl&gt; &lt;chr&gt;                                     
1           0.135         0.797     0 Vähemmän puoluerajan ylityksiä kuin sattu…</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Miksi nollamalli?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Miksi nollamalli?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Pelkkä puoluerajan ylittävien yhteyksien osuus ei kerro mitään ilman vertailukohtaa — se riippuu puolueiden koosta ja aloitteiden määrästä. Permutaatio-nollamalli antaa sen, mitä <em>sattumalta</em> odottaisi, jolloin havaittu luku saa merkityksen.</p>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Yhteistyö on verkosto, ei puoluelista.</strong> Allekirjoitukset paljastavat rakenteen, jota puoluejako ei näytä — mutta vasta oikein rajattuna.</li>
<li><strong>Rajaus on osa analyysia.</strong> Massa-aloitteet ja koko historia tuottaisivat tukkoisen möykyn; yksi kausi ja kynnys tekevät rakenteen näkyväksi.</li>
<li><strong>Verkkomittari vaatii nollamallin.</strong> Ilman satunnaisvertailua “30 % ylittää puoluerajan” on luku ilman merkitystä.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Verkostoanalyysi ja yhteisödetektio — asiakkaista, toimijoista tai riskeistä — oikein rajattuna ja nollamallilla validoituna. <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data, VaskiData (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>verkostoanalyysi</category>
  <category>igraph</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa11-yhteistyoverkostot.html</guid>
  <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Keskimääräinen latausteho on luku, jota ei ole olemassa</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma.html</link>
  <description><![CDATA[ 





<section id="luku-joka-ei-kuvaa-mitään" class="level2">
<h2 class="anchored" data-anchor-id="luku-joka-ei-kuvaa-mitään">Luku, joka ei kuvaa mitään</h2>
<p>Latausverkon riittävyydestä puhutaan tehona. EU:n AFIR-asetus asettaa vaatimuksia kilowatteina. Uutisissa kerrotaan, että Suomen latausverkon kokonaisteho on noussut. Ja kun halutaan yksi luku, joka kuvaa verkon laatua, lasketaan keskiarvo.</p>
<p>Keskiarvo on tässä huonompi kuin hyödytön. Se on harhaanjohtava.</p>
<p>Syy on yksinkertainen. Sähköauton latausteho ei ole vapaasti valittava suure vaan seuraa muutamaa teknistä standardia. Kotitalouspistorasiasta saa noin 2 kilowattia, tavallisesta seinälatauslaitteesta 7 tai 11, julkisesta vaihtovirtalaturista 22, vanhemmasta pikalaturista 50 ja uusimmista suurteholatureista 150–350. Väliin jääviä arvoja ei juuri ole, koska niitä ei valmisteta.</p>
<p>Kun tällaisesta joukosta lasketaan keskiarvo, tulos osuu kohtaan, jossa ei ole yhtään laturia. Se on kuin kertoisi, että suomalaisen kengännumero on keskimäärin 41,3 — luku on tosi mutta kuvaa kenkää, jota kukaan ei käytä.</p>
<p>Tässä osassa katson, miltä tehojakauma oikeasti näyttää, kuinka luotettavasti se on kirjattu ja miten latauskapasiteetti on jakautunut operaattorien kesken. Lopputulos on, että kaksi näistä kolmesta kysymyksestä on vastattavissa, ja kolmas paljastaa rekisterin ongelman, jota ei ole aiemmin dokumentoitu.</p>
</section>
<section id="ensin-mitä-tehokenttä-oikeasti-sisältää" class="level2">
<h2 class="anchored" data-anchor-id="ensin-mitä-tehokenttä-oikeasti-sisältää">Ensin: mitä tehokenttä oikeasti sisältää</h2>
<p>Jokaisella konnektorilla — siis fyysisellä pistokkeella — on rekisterissä kolme sähköteknistä kenttää: suurin jännite, suurin virta ja suurin teho. Nämä kolme eivät ole toisistaan riippumattomia. Fysiikan mukaan teho on jännitteen ja virran tulo, kolmivaihevirralla kerrottuna vielä noin 1,73:lla.</p>
<p>Tämä antaa harvinaisen mahdollisuuden: <strong>aineisto voidaan tarkistaa itseään vastaan.</strong> Jos ilmoitettu teho ei vastaa jännitteen ja virran tuloa, jokin kolmesta kentästä on väärin — eikä sen huomaamiseen tarvita mitään ulkoista vertailukohtaa.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1">sahko <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> liitokset <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(afir_asemat, avain, op_id, op_nimi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"avain"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb1-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kolmivaihevirralla teho = jännite × virta × √3</span></span>
<span id="cb1-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kerroin =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(virta <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AC_3_PHASE"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb1-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laskettu_kw =</span> volttia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> ampeeria <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> kerroin <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,</span>
<span id="cb1-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">suhde =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(laskettu_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> laskettu_kw, <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_real_</span>),</span>
<span id="cb1-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puuttuva_sahko =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(volttia) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(ampeeria) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span></span>
<span id="cb1-9">                     volttia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> ampeeria <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb1-10">  )</span>
<span id="cb1-11"></span>
<span id="cb1-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb1-13">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suhdeluku puuttuu useammalta kuin puolelta riveistä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb1-14">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(sahko<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>suhde)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span></span>
<span id="cb1-15">)</span>
<span id="cb1-16"></span>
<span id="cb1-17">sahko_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> sahko <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(virta <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AC_3_PHASE"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(op_id, op_nimi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb1-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(),</span>
<span id="cb1-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puuttuvia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(puuttuva_sahko),</span>
<span id="cb1-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaanisuhde =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(suhde, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>),</span>
<span id="cb1-24">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb1-25">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(n))</span></code></pre></div></div>
</details>
</div>
<p>Tulos on hämmentävän siisti. Operaattorit jakautuvat kolmeen ryhmään, ja jokaisen ryhmän sisällä käytäntö on lähes täydellisen johdonmukainen.</p>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma_files/figure-html/kuva-suhteet-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Ilmoitetun ja lasketun tehon suhde kolmivaihelatureilla, operaattoreittain. Pystyviivat merkitsevät kolmea johdonmukaista tulkintaa. Palkin pituus kertoo konnektorien määrän.</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten kuvaa luetaan.</strong> Vaaka-akselilla on luku, joka kertoo montako kertaa suurempi ilmoitettu teho on kuin jännitteestä ja virrasta laskettu teho. Jos kentät olisivat keskenään johdonmukaiset, kaikki pisteet asettuisivat pystyviivalle 1,00. Pallon koko kertoo, kuinka monta pistoketta kyseisellä operaattorilla on.</p>
<p>Pisteet eivät ole viivalla 1,00. Ne ovat kolmessa rykelmässä.</p>
<p>Ryhmä kohdassa 0,58 ilmoittaa jännitteeksi 230 volttia, joka on yhden vaiheen jännite. Ryhmä kohdassa 1,73 ilmoittaa 400 volttia, joka on kolmen vaiheen välinen jännite. Molemmat luvut ovat teknisesti oikeita — ne vain vastaavat eri kysymykseen. Ja koska kumpikin ryhmä on ilmoittanut tehon oikein, ristiriita paljastuu vasta kun kentät kerrotaan keskenään.</p>
<p>Kaksi operaattoria puuttuu kuvasta kokonaan, koska niiden mediaanisuhde on ääretön: ne ilmoittavat jännitteeksi tai virraksi nollan.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">puuttuvat_taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> sahko <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(op_id, op_nimi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nollia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(puuttuva_sahko), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(nollia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> nollia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> n) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(nollia))</span>
<span id="cb2-7"></span>
<span id="cb2-8">osuus_nollia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(sahko<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>puuttuva_sahko)</span></code></pre></div></div>
</details>
</div>
<p>Nollalla ilmoitettuja sähköarvoja on 20.4% kaikista pistokkeista. Nolla ei tässä tarkoita nollaa volttia — se tarkoittaa, että kenttä on jätetty täyttämättä ja jokin järjestelmä on korvannut tyhjän arvon nollalla.</p>
<p>Ero on ratkaiseva. Puuttuva tieto on tunnistettavissa puuttuvaksi. Nollaksi muutettu puuttuva tieto ei ole, ja se päätyy laskelmiin oikean arvon paikalle. Jos joku laskee latauskapasiteetin jännitteen ja virran tulona, hän saa näiden kahden operaattorin kohdalla nollan — ja niiden asemat katoavat tilastosta näkymättä.</p>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Mitä tästä seuraa käytännössä
</div>
</div>
<div class="callout-body-container callout-body">
<p>Latausverkon kapasiteettia ei voi laskea rekisterin sähköteknisistä kentistä ilman operaattorikohtaista tulkintaa. Tehokenttä on käyttökelpoinen; jännite ja virta eivät ole.</p>
<p>Tämä ei ole akateeminen huomio. AFIR-asetuksen seuranta perustuu tehoon, ja jos seurantaa tehdään johtamalla teho muista kentistä, tulos riippuu siitä kenen asemia lasketaan. Kolme operaattoria tuottaisi kolme eri vastausta samalla laskukaavalla.</p>
</div>
</div>
</section>
<section id="tehojakauma-kuusi-huippua-ei-yhtä-keskiarvoa" class="level2">
<h2 class="anchored" data-anchor-id="tehojakauma-kuusi-huippua-ei-yhtä-keskiarvoa">Tehojakauma: kuusi huippua, ei yhtä keskiarvoa</h2>
<p>Koska tehokenttä osoittautui ainoaksi luotettavaksi, käytetään sitä.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">tehot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> liitokset <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(teho_kw), teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(afir_asemat, avain, op_id, op_nimi, kunta), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"avain"</span>)</span>
<span id="cb3-4"></span>
<span id="cb3-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kuinka kasautunutta jakauma on? Jos muutama arvo kattaa suuren osan</span></span>
<span id="cb3-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># havainnoista, keskiarvo on erityisen harhaanjohtava.</span></span>
<span id="cb3-7">kasautuma <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(teho_kw, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kumulatiivinen =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cumsum</span>(osuus))</span>
<span id="cb3-10"></span>
<span id="cb3-11">top10_osuus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> kasautuma<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kumulatiivinen[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(kasautuma))]</span>
<span id="cb3-12">n_uniikkeja <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(kasautuma)</span>
<span id="cb3-13"></span>
<span id="cb3-14">keskiarvo <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw)</span>
<span id="cb3-15">mediaani  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw)</span>
<span id="cb3-16">osuus_lahella_keskiarvoa <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> keskiarvo) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span></code></pre></div></div>
</details>
</div>
<p>Aineistossa on 65 eri tehoarvoa, mutta kymmenen yleisintä kattaa 88% kaikista pistokkeista. Jakauma on siis voimakkaasti kasautunut muutamaan standardiarvoon.</p>
<p>Keskiteho on 87.1 kW. Pistokkeita, joiden teho on kahden kilowatin päässä tuosta keskiarvosta, on <strong>0.0%</strong>.</p>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma_files/figure-html/kuva-jakauma-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Latauspistokkeiden tehojakauma. Ylhäällä koko jakauma, alhaalla sama logaritmisella asteikolla, jolla pienet tehot erottuvat.</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten alempaa kuvaa luetaan.</strong> Vaaka-akseli on venytetty logaritmiseksi, mikä tarkoittaa että samalla matkalla akselilla kuljetaan aina saman kertoimen verran: matka 2:sta 4:ään on yhtä pitkä kuin 100:sta 200:aan. Tämä on tarpeen siksi, että tehot vaihtelevat kahdesta kilowatista kolmeensataan, ja tavallisella asteikolla kaikki pienet tehot puristuisivat vasempaan reunaan yhdeksi tolpaksi.</p>
<p>Huiput osuvat juuri niihin arvoihin, jotka lueteltiin alussa. Tämä ei ole sattumaa vaan seuraus siitä, että latauslaitteita valmistetaan standardeihin.</p>
<section id="osuudet-ja-niiden-epävarmuus" class="level3">
<h3 class="anchored" data-anchor-id="osuudet-ja-niiden-epävarmuus">Osuudet ja niiden epävarmuus</h3>
<p>Päättäjää kiinnostaa harvoin yksittäinen pistoke. Häntä kiinnostaa, kuinka suuri osa verkosta on pikalatausta. Luokitellaan siis.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">tehot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">luokka =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb4-3">    teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.7</span>  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kotitalous (&lt; 3,7 kW)"</span>,</span>
<span id="cb4-4">    teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">11</span>   <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hidas AC (3,7–11 kW)"</span>,</span>
<span id="cb4-5">    teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">43</span>   <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nopea AC (11–43 kW)"</span>,</span>
<span id="cb4-6">    teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">150</span>  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Pikalataus DC (43–150 kW)"</span>,</span>
<span id="cb4-7">    <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>           <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suurteho DC (≥ 150 kW)"</span></span>
<span id="cb4-8">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kotitalous (&lt; 3,7 kW)"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hidas AC (3,7–11 kW)"</span>,</span>
<span id="cb4-9">                         <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nopea AC (11–43 kW)"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Pikalataus DC (43–150 kW)"</span>,</span>
<span id="cb4-10">                         <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suurteho DC (≥ 150 kW)"</span>)))</span>
<span id="cb4-11"></span>
<span id="cb4-12">luokka_lkm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(luokka, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.drop =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb4-13"></span>
<span id="cb4-14"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb4-15">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Luokittelu jätti rivejä ulkopuolelle"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(luokka_lkm<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(tehot)</span>
<span id="cb4-16">)</span>
<span id="cb4-17"></span>
<span id="cb4-18"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Dirichlet-posteriori luokkaosuuksille. Jeffreysin priori (alfa = 1/2)</span></span>
<span id="cb4-19"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># on heikko eikä vedä tulosta mihinkään suuntaan.</span></span>
<span id="cb4-20">alfa <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> luokka_lkm<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span></span>
<span id="cb4-21">naytteet_dir <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rgamma</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(alfa) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4000</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rep</span>(alfa, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">each =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4000</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">matrix</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nrow =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4000</span>)</span>
<span id="cb4-23">naytteet_dir <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> naytteet_dir <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rowSums</span>(naytteet_dir)</span>
<span id="cb4-24"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colnames</span>(naytteet_dir) <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>luokka)</span>
<span id="cb4-25"></span>
<span id="cb4-26">osuudet_post <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>(naytteet_dir) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">everything</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"luokka"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"osuus"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">luokka =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(luokka, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>luokka)))</span></code></pre></div></div>
</details>
</div>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma_files/figure-html/kuva-osuudet-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Latauspistokkeiden jakautuminen teholuokkiin. Piikin leveys kertoo epävarmuuden.</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten kuvaa luetaan.</strong> Jokainen luokka saa oman muotonsa. Muodon korkein kohta on todennäköisin arvo, ja leveys kertoo epävarmuuden. Alla oleva viiva näyttää välin, jolle osuus 95 prosentin todennäköisyydellä osuu.</p>
<p>Tässä tapauksessa muodot ovat hyvin kapeita, koska havaintoja on tuhansia. Epävarmuus osuuksista on pieni — mikä on hyvä uutinen, ja se kannattaa sanoa suoraan. Kaikki epävarmuus ei ole suurta, ja analyysin tehtävä on kertoa kumpi tilanne on käsillä.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Faktalaatikko: paljonko latausinfra vaikuttaa sähköautojen määrään?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Latausinfran rakentamista perustellaan sillä, että se lisää sähköautojen myyntiä. Kysymys on empiirinen, ja siihen on vastattu useissa taloustieteen tutkimuksissa.</p>
<p>Vaikutusta mitataan joustolla: kuinka monta prosenttia sähköautojen rekisteröinnit kasvavat, jos latausasemien määrä kasvaa yhden prosentin.</p>
<p><em>Springel (2021, American Economic Journal: Economic Policy)</em> tutki Norjan markkinaa vuosina 2010–2015 ja päätyi keskeiseen estimaattiin noin 0,22. Aiempi Yhdysvaltoja koskeva tutkimus <em>(Li ym. 2017)</em> raportoi selvästi suuremman arvon, noin 0,8. Ero ei ole ristiriita vaan seuraus siitä, kuinka kehittynyt verkko on: kun Springelin aineistosta valitaan vastaava verkkotiheys kuin Li ym:n aineistossa, jousto nousee noin 0,54:ään.</p>
<p><strong>Johtopäätös päättäjälle:</strong> latausaseman rakentamisen vaikutus riippuu siitä, kuinka paljon asemia jo on. Harvassa verkossa yksi lisäasema vaikuttaa paljon, tiheässä vähän. Sama euro tuottaa eri tuloksen eri paikassa — ja tämä on mitattavissa oleva suure, ei mielipide.</p>
</div>
</div>
</section>
</section>
<section id="kapasiteetin-keskittyminen" class="level2">
<h2 class="anchored" data-anchor-id="kapasiteetin-keskittyminen">Kapasiteetin keskittyminen</h2>
<p>Asemien lukumäärä on huono mittari markkinan rakenteesta, koska asemat ovat erikokoisia. Operaattori, jolla on sata kotitalouspistoketta, näyttää tilastossa suuremmalta kuin operaattori, jolla on kaksikymmentä suurtehulaturia — vaikka jälkimmäinen tuottaa moninkertaisen määrän latausenergiaa.</p>
<p>Katsotaan siis kapasiteettia, ei kappalemääriä.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">kapasiteetti_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(op_id, op_nimi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb5-4">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pistokkeita =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(),</span>
<span id="cb5-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kw_yhteensa =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(teho_kw),</span>
<span id="cb5-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hpc_kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(teho_kw[teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">150</span>]),</span>
<span id="cb5-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb5-8">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(kw_yhteensa))</span>
<span id="cb5-10"></span>
<span id="cb5-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Gini-kerroin: 0 = täysin tasainen, 1 = kaikki yhdellä toimijalla</span></span>
<span id="cb5-12">gini <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) {</span>
<span id="cb5-13">  x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sort</span>(x[<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(x)])</span>
<span id="cb5-14">  n <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x)</span>
<span id="cb5-15">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">||</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">return</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_real_</span>)</span>
<span id="cb5-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq_len</span>(n) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> x) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x))</span>
<span id="cb5-17">}</span>
<span id="cb5-18"></span>
<span id="cb5-19"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Herfindahl-indeksi: markkinaosuuksien neliöiden summa</span></span>
<span id="cb5-20">hhi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) {</span>
<span id="cb5-21">  s <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> x <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x)</span>
<span id="cb5-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(s<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb5-23">}</span>
<span id="cb5-24"></span>
<span id="cb5-25">gini_kw  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gini</span>(kapasiteetti_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kw_yhteensa)</span>
<span id="cb5-26">gini_lkm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gini</span>(kapasiteetti_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pistokkeita)</span>
<span id="cb5-27">hhi_kw   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hhi</span>(kapasiteetti_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kw_yhteensa)</span>
<span id="cb5-28"></span>
<span id="cb5-29"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Epävarmuus bootstrapilla: otetaan pistokkeista toistuvia otoksia</span></span>
<span id="cb5-30"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ja lasketaan Gini uudelleen. Näin nähdään, kuinka herkkä luku on.</span></span>
<span id="cb5-31">boot_gini <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(i) {</span>
<span id="cb5-32">  otos <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_sample</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(tehot), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">replace =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb5-33">  otos <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-34">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(op_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-35">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(teho_kw), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-36">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(kw) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-37">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gini</span>()</span>
<span id="cb5-38">})</span>
<span id="cb5-39"></span>
<span id="cb5-40">gini_vali <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(boot_gini, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.025</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.975</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span></code></pre></div></div>
</details>
</div>
<p>Gini-kerroin kapasiteetille on <strong>0.699</strong> (95 %:n väli 0.584–0.612). Pistokemäärille laskettuna se on 0.693.</p>
<p><strong>Mikä Gini-kerroin on.</strong> Se on luku nollan ja ykkösen välillä, joka kertoo kuinka epätasaisesti jokin on jakautunut. Nolla tarkoittaa, että kaikilla operaattoreilla on täsmälleen yhtä paljon kapasiteettia. Ykkönen tarkoittaa, että yhdellä on kaikki ja muilla ei mitään. Sama mittari on tuttu tuloerojen mittaamisesta.</p>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma_files/figure-html/kuva-lorenz-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Lorenz-käyrä: kuinka suuri osa latauskapasiteetista on kuinka suurella osalla operaattoreista.</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten kuvaa luetaan.</strong> Operaattorit on asetettu riviin pienimmästä suurimpaan. Vaaka-akselilta luetaan, kuinka suuri osa operaattoreista on mukana, ja pystyakselilta, kuinka suuri osa kapasiteetista heillä yhteensä on.</p>
<p>Katkoviiva kuvaa tilannetta, jossa kaikilla olisi yhtä paljon: puolella operaattoreista olisi puolet kapasiteetista. Mitä alempana varsinainen käyrä kulkee, sitä epätasaisemmin kapasiteetti on jakautunut. Käyrän ja katkoviivan väliin jäävä alue on se, mitä Gini-kerroin mittaa.</p>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma_files/figure-html/kuva-top-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Suurimmat operaattorit kapasiteetin mukaan. Tumma osa on suurtehokapasiteettia.</figcaption>
</figure>
</div>
</div>
</div>
<section id="tilastollinen-testi-eroavatko-operaattorit-toisistaan" class="level3">
<h3 class="anchored" data-anchor-id="tilastollinen-testi-eroavatko-operaattorit-toisistaan">Tilastollinen testi: eroavatko operaattorit toisistaan?</h3>
<p>Nyt tullaan kohtaan, jossa testin valinta ratkaisee, ja jossa moni analyysi menee pieleen.</p>
<p>Kysymys on: tarjoavatko eri operaattorit erilaista latausta? Houkutteleva lähestymistapa olisi verrata keskitehoja varianssianalyysillä. Se olisi väärin kolmesta syystä.</p>
<p>Ensinnäkin tehojakauma ei ole normaalijakautunut vaan monihuippuinen, kuten edellä nähtiin. Toiseksi keskiarvo ei kuvaa jakaumaa, jossa on kuusi huippua. Kolmanneksi — ja tämä on tärkein — kysymys ei oikeasti koske keskiarvoja vaan koko jakaumaa. Operaattori, joka tarjoaa pelkkää 22 kW:n latausta, ja operaattori, joka tarjoaa puoliksi 2 kW:ta ja puoliksi 42 kW:ta, voivat päätyä samaan keskiarvoon täysin erilaisella tarjonnalla.</p>
<p>Käytän siksi permutaatiotestiä, joka vertaa jakaumia kokonaisuudessaan.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rajataan operaattoreihin, joilla on riittävästi havaintoja</span></span>
<span id="cb6-2">isot_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> kapasiteetti_op <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(pistokkeita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(op_id)</span>
<span id="cb6-3">testidata <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(op_id <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> isot_op) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">droplevels</span>()</span>
<span id="cb6-4"></span>
<span id="cb6-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb6-6">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vertailtavia operaattoreita alle kaksi"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb6-7">)</span>
<span id="cb6-8"></span>
<span id="cb6-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Testisuure: luokkajakaumien khiin neliö -etäisyys.</span></span>
<span id="cb6-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Nollahypoteesi: kaikilla operaattoreilla sama tehojakauma.</span></span>
<span id="cb6-11">testisuure <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(op, luokka) {</span>
<span id="cb6-12">  taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">table</span>(op, luokka)</span>
<span id="cb6-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">suppressWarnings</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">chisq.test</span>(taulu)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic)</span>
<span id="cb6-14">}</span>
<span id="cb6-15"></span>
<span id="cb6-16">havaittu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">testisuure</span>(testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id, testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>luokka)</span>
<span id="cb6-17"></span>
<span id="cb6-18">perm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(i) {</span>
<span id="cb6-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">testisuure</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sample</span>(testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id), testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>luokka)</span>
<span id="cb6-20">})</span>
<span id="cb6-21"></span>
<span id="cb6-22">p_arvo <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(perm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> havaittu) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(perm) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb6-23"></span>
<span id="cb6-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Efektikoko: Cramérin V kertoo eron suuruuden, p-arvo vain sen olemassaolon</span></span>
<span id="cb6-25">taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">table</span>(testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id, testidata<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>luokka)</span>
<span id="cb6-26">cramers_v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(havaittu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(taulu) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dim</span>(taulu)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span></code></pre></div></div>
</details>
</div>
<p>Testi antaa p-arvoksi alle 0,001 ja Cramérin V:ksi 0,573.</p>
<p><strong>Mitä nämä kaksi lukua tarkoittavat.</strong> P-arvo vastaa kysymykseen: jos operaattorit todellisuudessa tarjoaisivat täsmälleen samanlaista latausta, kuinka todennäköisesti näkisimme näin suuren eron pelkän sattuman takia? Pieni p-arvo tarkoittaa, ettei sattuma selitä havaintoa.</p>
<p>P-arvo ei kuitenkaan kerro, kuinka suuri ero on. Riittävän suuressa aineistossa mitättömänkin pieni ero tuottaa pienen p-arvon. Siksi raportoin myös Cramérin V:n, joka on nollan ja ykkösen välinen luku ja kertoo eron voimakkuuden. Nyrkkisääntönä alle 0,1 on heikko, 0,3 kohtalainen ja yli 0,5 vahva yhteys.</p>
<p>Tämä pari — onko eroa ja kuinka suuri se on — pitäisi raportoida aina yhdessä. Pelkkä p-arvo on tavallisimpia tapoja johtaa lukijaa harhaan tilastotieteen keinoin, eikä yleensä tahallisesti.</p>
</section>
</section>
<section id="vaihtoehtoiset-skenaariot-entä-jos-kapasiteetti-olisi-jakautunut-toisin" class="level2">
<h2 class="anchored" data-anchor-id="vaihtoehtoiset-skenaariot-entä-jos-kapasiteetti-olisi-jakautunut-toisin">Vaihtoehtoiset skenaariot: entä jos kapasiteetti olisi jakautunut toisin?</h2>
<p>Havaittu jakauma on vain yksi mahdollinen. Sitä kannattaa verrata vaihtoehtoihin, koska vasta vertailu kertoo, onko havaittu tilanne hyvä vai huono.</p>
<p>Rakennan kolme vaihtoehtoista maailmaa, joissa kaikissa on <strong>sama määrä pistokkeita ja sama kokonaisteho</strong> kuin todellisuudessa. Vain jakautuminen muuttuu.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1">kok_kw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw)</span>
<span id="cb7-2">n_pist <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(tehot)</span>
<span id="cb7-3">n_kuntia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(tehot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kunta)</span>
<span id="cb7-4"></span>
<span id="cb7-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Todellinen: kapasiteetti kunnittain</span></span>
<span id="cb7-6">todellinen <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tehot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(kunta) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(teho_kw), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span>
<span id="cb7-9"></span>
<span id="cb7-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Skenaario A: sama kokonaisteho jaettuna tasan kaikkien kuntien kesken</span></span>
<span id="cb7-11">skenaario_tasa <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb7-12">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kunta =</span> todellinen<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kunta,</span>
<span id="cb7-13">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kw =</span> kok_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> n_kuntia</span>
<span id="cb7-14">)</span>
<span id="cb7-15"></span>
<span id="cb7-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Skenaario B: kaikki pistokkeet olisivat 22 kW (nopea AC)</span></span>
<span id="cb7-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># – sama pistokemäärä, kapasiteetti muuttuu</span></span>
<span id="cb7-18">skenaario_ac <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> todellinen <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(tehot, kunta, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"n"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kunta"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kw =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">22</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(kunta, kw)</span>
<span id="cb7-22"></span>
<span id="cb7-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Skenaario C: sama kokonaisteho, mutta jaettuna pistokemäärän suhteessa</span></span>
<span id="cb7-24">skenaario_suhde <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> todellinen <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-25">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(tehot, kunta, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"n"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kunta"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kw =</span> kok_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> n_pist) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(kunta, kw)</span>
<span id="cb7-28"></span>
<span id="cb7-29">vertailu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_rows</span>(</span>
<span id="cb7-30">  todellinen      <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">skenaario =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Todellinen"</span>),</span>
<span id="cb7-31">  skenaario_tasa  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">skenaario =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"A: tasan kunnittain"</span>),</span>
<span id="cb7-32">  skenaario_ac    <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">skenaario =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"B: kaikki 22 kW"</span>),</span>
<span id="cb7-33">  skenaario_suhde <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">skenaario =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"C: pistokemäärän suhteessa"</span>)</span>
<span id="cb7-34">)</span>
<span id="cb7-35"></span>
<span id="cb7-36">gini_skenaariot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vertailu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-37">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(skenaario) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-38">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">gini =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gini</span>(kw), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kok_kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(kw), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-39">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(gini)</span>
<span id="cb7-40"></span>
<span id="cb7-41"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb7-42">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Skenaarion kokonaisteho poikkeaa todellisesta yli 1 %"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb7-43">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(gini_skenaariot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kok_kw[gini_skenaariot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>skenaario <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"B: kaikki 22 kW"</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span></span>
<span id="cb7-44">              kok_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>)</span>
<span id="cb7-45">)</span></code></pre></div></div>
</details>
</div>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma_files/figure-html/kuva-counterfactual-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Kapasiteetin keskittyminen kunnittain neljässä maailmassa. Alempi arvo tarkoittaa tasaisempaa jakautumista.</figcaption>
</figure>
</div>
</div>
</div>
<p>Vertailun arvo on siinä, että se erottaa kaksi asiaa, jotka menevät keskustelussa usein sekaisin: <strong>kuinka paljon</strong> kapasiteettia on ja <strong>missä</strong> se on. Skenaario A:ssa kapasiteettia on täsmälleen yhtä paljon kuin nyt, mutta se on jaettu kuntien kesken tasan. Skenaario C:ssä se seuraa pistokemäärää.</p>
<p>Todellinen jakautuminen on markkinaehtoisen sijoittelun tulos: laturit rakennetaan sinne, missä niille on kysyntää. Se on taloudellisesti järkevää, mutta se ei ole sama asia kuin kattava verkko. Ero näiden kahden välillä on juuri se, mitä julkinen tuki voi kuroa umpeen — ja ero on mitattavissa.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Faktalaatikko: korvaako latausverkko kantaman?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Sähköauton käytettävyys riippuu kahdesta asiasta: kuinka pitkälle auto pääsee yhdellä latauksella ja kuinka helposti sen voi ladata. Nämä ovat osittain toisensa korvaavia — pidempi kantama vähentää latausverkon tarvetta ja päinvastoin.</p>
<p><em>Rosales-Tristancho ym. (2024, Transportation Research Part D)</em> kokosi meta-regressiolla useiden kuluttajatutkimusten tulokset ja tarkasteli, kuinka paljon parempaa latausverkkoa kuluttajat vaativat hyväksyäkseen lyhyemmän kantaman.</p>
<p>Keskeinen tulos: <strong>korvaavuus toimii vasta, kun kantama ylittää noin 250–300 kilometriä.</strong> Sen alapuolella kuluttajat eivät suostu vaihtokauppaan juuri millään latausverkolla. Sen yläpuolella latausinfran parantaminen voi kompensoida lyhyempää kantamaa.</p>
<p><strong>Miksi tämä on olennaista Suomessa.</strong> Kylmä sää lyhentää sähköauton kantamaa merkittävästi. Jos talviolosuhteissa merkittävä osa autokannasta putoaa tuon 250–300 kilometrin rajan alapuolelle, latausverkon parantaminen ei enää kompensoi kantamaa samalla tavalla. Verkon riittävyyttä ei siis voi arvioida kesäolosuhteissa ja olettaa tuloksen pätevän ympäri vuoden.</p>
<p>Tämä on myös hyvä esimerkki siitä, miksi käytän mieluummin meta-analyysiä kuin yksittäistä tutkimusta: yksittäinen kuluttajakysely kertoo yhden otoksen mieltymyksistä, meta-analyysi kertoo, mikä tulos toistuu.</p>
</div>
</div>
</section>
<section id="mitä-tehojakaumasta-jää-käteen" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tehojakaumasta-jää-käteen">Mitä tehojakaumasta jää käteen</h2>
<p><strong>Keskiarvo on väärä työkalu.</strong> Kun jakaumassa on kuusi huippua, keskiarvo osuu niiden väliin, eikä kuvaa mitään todellista laturia. Jos latausverkon kehitystä seurataan keskitehona, mittari voi nousta samalla kun verkko huononee — riittää että hitaita latureita poistetaan.</p>
<p><strong>Rekisterin sähkötekniset kentät eivät ole vertailukelpoisia.</strong> Jännite ja virta on ilmoitettu kolmella eri tavalla, ja osalla ne ovat nollia. Teho on käyttökelpoinen, muut eivät.</p>
<p><strong>Kapasiteetti on keskittyneempää kuin asemamäärä antaa ymmärtää.</strong> Kun mitataan kilowatteja eikä kappaleita, kuva markkinan rakenteesta muuttuu.</p>
<p><strong>Vertailu tekee luvusta tulkittavan.</strong> Gini-kerroin yksinään ei kerro, onko tilanne hyvä. Vertailu vaihtoehtoisiin jakaumiin kertoo.</p>
<p>Seuraavassa osassa siirrytään verkosta autoihin. Sähköauton kantama ei ole neljäsataa kilometriä, vaan sekin on jakauma — ja se muuttuu vuodenajan mukana enemmän kuin useimmat arvaavat.</p>
<hr>
</section>
<section id="mitä-tästä-on-hyötyä-yrityksellesi" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tästä-on-hyötyä-yrityksellesi">Mitä tästä on hyötyä yrityksellesi</h2>
<p>Tämän postauksen menetelmät eivät liity sähköautoihin. Ne liittyvät siihen, miten mitataan jotain, joka ei ole tasaisesti jakautunut — ja käytännössä mikään liiketoiminnassa ei ole.</p>
<p><strong>Lopeta keskiarvojen raportointi monihuippuisista jakaumista.</strong> Jos asiakkaidesi ostokset jakautuvat pieniin täydennysostoihin ja harvoihin suuriin projekteihin, keskimääräinen kauppa ei kuvaa kumpaakaan. Sama koskee toimitusaikoja, käsittelyaikoja, sopimuskokoja ja palvelupyyntöjä. Tarkista jakauman muoto ennen kuin valitset tunnusluvun. Se on yhden histogrammin työ ja säästää vääriltä päätöksiltä.</p>
<p><strong>Laske keskittyminen, älä lukumääriä.</strong> Gini-kerroin ja Herfindahl-indeksi ovat yksinkertaisia laskea ja vastaavat kysymykseen, jota kysytään harvoin mutta joka on usein tärkein: kuinka riippuvainen olen harvoista? Sovella niitä asiakaskuntaan (kuinka suuri osa liikevaihdosta on viideltä asiakkaalta), toimittajiin, kanaviin, avainhenkilöiden osaamiseen. Keskittymisluku on riskiluku.</p>
<p><strong>Tee kentille sisäinen ristiriitatarkistus.</strong> Tämän postauksen kiinnostavin löydös syntyi siitä, että kolme kenttää liittyy toisiinsa fysiikan lain kautta ja niiden ristiriita paljastui laskemalla. Sama pätee laajemmin: jos tietokannassa on määrä, yksikköhinta ja loppusumma, niiden pitää täsmätä. Jos on alkupäivä, loppupäivä ja kesto, niiden pitää täsmätä. Näiden tarkistusten automatisointi on halpaa, ja ne löytävät virheitä, joita mikään tyyppitarkistus ei löydä — koska jokainen kenttä on erikseen täysin uskottava.</p>
<p><strong>Rakenna vaihtoehtoisia skenaarioita, älä vain kuvaile nykytilaa.</strong> Luku “Gini 0,7” ei kerro mitään ilman vertailukohtaa. Luku “Gini 0,7, kun tasajakaumassa se olisi 0,1 ja jos suurin asiakas lähtisi se olisi 0,5” kertoo. Vertailuskenaarion rakentaminen on usein muutaman rivin työ ja tekee raportista päätöksentekokelpoisen.</p>
<p><strong>Ja tärkein: tarkista, tarkoittaako kenttä samaa kaikilla.</strong> Löysin rekisteristä kentän, jonka kolme operaattoriryhmää täyttää kolmella eri tavalla — kaikki omasta mielestään oikein. Sama tilanne on useimmissa organisaatioissa, joissa dataa kerätään useasta lähteestä. “Liikevaihto”, “aktiivinen asiakas” ja “toimitettu” tarkoittavat eri järjestelmissä eri asioita, ja yhdistetty raportti summaa niitä yhteen kysymättä. Tämän löytäminen ei vaadi uutta järjestelmää — se vaatii sen, että joku katsoo.</p>
<p>Jos organisaatiossasi raportoidaan keskiarvoja, joiden takana on monihuippuinen jakauma, tai yhdistetään lukuja järjestelmistä, joiden määritelmiä ei ole verrattu, siinä on työtä odottamassa. Teen tätä vuokrattavana Head of Datana ja projektikohtaisesti — hinnasto ja yhteystiedot löytyvät <a href="https://kristianvepsalainen.com">sivustolta</a>.</p>
<hr>
<p><em>Aineisto: Fintraffic AFIR / Digitraffic, haettu osassa 1. Tutkimuslähteet: Springel (2021), Li ym. (2017), Rosales-Tristancho ym. (2024). Koodi on kokonaisuudessaan tässä postauksessa. Maailma on jakauma.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>latausverkko</category>
  <category>keskittyminen</category>
  <category>datan laatu</category>
  <guid>https://kristianvepsalainen.com/posts/latausverkko-02-tehojakauma.html</guid>
  <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Maailmankartta on jakauma</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/karttaprojektiot.html</link>
  <description><![CDATA[ 





<section id="uutinen-joka-on-oikeasti-matematiikkaa" class="level2" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="uutinen-joka-on-oikeasti-matematiikkaa"><span class="header-section-number">1</span> Uutinen, joka on oikeasti matematiikkaa</h2>
<p>Yhdistyneiden kansakuntien yleiskokous hyväksyi 4. syyskuuta 2026 päätöslauselman, jossa jäsenvaltioita kehotetaan siirtymään pois Gerardus Mercatorin vuonna 1569 esittelemästä karttaprojektiosta ja käyttämään sen sijaan karttoja, jotka esittävät mantereiden pinta-alat oikeassa suhteessa. Päätöstä kannatti 164 maata, vastaan äänesti yksi (Yhdysvallat) ja kuusi pidättyi. Käytännössä suositus osoittaa vuonna 2018 julkaistuun <strong>Equal Earth</strong> -projektioon. Taustalla oli Afrikan unionin ja kansalaisjärjestöjen <em>Correct the Map</em> -kampanja, joka oli käynnistynyt jo elokuussa 2025.</p>
<p>Julkisessa keskustelussa asia on tiivistetty yhteen lukuun: <em>“Afrikka on 14 kertaa Grönlantia suurempi, mutta kartalla ne näyttävät samankokoisilta.”</em></p>
<p>Tämä on tyypillinen esimerkki siitä, mistä tässä blogissa jatkuvasti puhutaan. Yksi luku on aina jonkin jakauman tiivistelmä, ja tiivistelmä hukkaa sen, mikä oikeasti on kiinnostavaa. Karttaprojektion vääristymä ei ole yksi luku. Se on <strong>funktio, joka saa eri arvon jokaisessa maapallon pisteessä</strong> — eli jakauma pallon pinnan yli. Ja kuten kohta nähdään, tuosta jakaumasta voi laskea useita eri “keskilukuja” riippuen siitä, painotetaanko maapinta-alaa, ihmisiä vai merialueita — ja vastaus siihen “kuinka paha Mercator on” muuttuu radikaalisti painotuksen mukana.</p>
<p>Tämä postaus on tarkoituksella ennenkaikkea yleissivistävä. Aihe ansaitsee sen. Mutta lopussa kerron silti, miksi täsmälleen sama matemaattinen ilmiö tulee vastaan yritysdatassa joka ikinen viikko — ja miksi useimmat organisaatiot eivät huomaa sitä.</p>
<hr>
</section>
<section id="miksi-tasokartta-on-aina-kompromissi" class="level2" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="miksi-tasokartta-on-aina-kompromissi"><span class="header-section-number">2</span> Miksi tasokartta on aina kompromissi</h2>
<p>Otetaan appelsiini. Kuori se yhtenä palana ja yritä litistää kuori pöydälle niin, ettei se repeä eikä veny. Se ei onnistu. Sinun on joko revittävä kuori tai venytettävä sitä.</p>
<p>Tämä ei ole kömpelyyttä. Se on <strong>todistettu matemaattinen mahdottomuus</strong>.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Faktalaatikko 1: Gaussin Theorema Egregium (1827)">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Faktalaatikko 1: Gaussin Theorema Egregium (1827)
</div>
</div>
<div class="callout-body-container callout-body">
<p>Carl Friedrich Gauss osoitti tutkielmassaan <em>Disquisitiones generales circa superficies curvas</em> (1827) tuloksen, jota hän itse kutsui nimellä <strong>Theorema Egregium</strong> — “merkittävä lause”.</p>
<p>Lause sanoo, että pinnalla on ominaisuus nimeltä <strong>Gaussin kaarevuus</strong>, joka säilyy muuttumattomana kaikissa muunnoksissa, jotka eivät veny eivätkä purista pintaa. Kaarevuus on siis pinnan <em>sisäinen</em> ominaisuus: se voidaan mitata pinnan päällä ryömimällä, ilman että pintaa katsotaan ulkopuolelta.</p>
<ul>
<li>Pallon pinnan Gaussin kaarevuus on positiivinen: <img src="https://latex.codecogs.com/png.latex?K%20=%201/R%5E2">, missä <img src="https://latex.codecogs.com/png.latex?R"> on säde.</li>
<li>Tason Gaussin kaarevuus on nolla: <img src="https://latex.codecogs.com/png.latex?K%20=%200">.</li>
</ul>
<p>Koska <img src="https://latex.codecogs.com/png.latex?1/R%5E2%20%5Cneq%200">, pallon pintaa <strong>ei voi</strong> kuvata tasolle venyttämättä. Ei nyt, ei koskaan, ei millään nerokkuudella. Jokainen maailmankartta on siis välttämättä väärässä jossakin — kysymys on vain siitä, <em>missä</em> ja <em>miten</em>.</p>
<p>Arkinen todiste samasta lauseesta: kun taivutat pizzapalan U:n muotoon poikkisuunnassa, se ei enää notku pituussuunnassa. Kaarevuuden säilyminen pakottaa sen jäykäksi.</p>
<p><strong>Vastaskenaario:</strong> entä jos Maa olisi lieriö tai kartio? Silloin Gaussin kaarevuus olisi nolla, ja kartta voitaisiin tehdä täysin vääristymättä — sen voisi kirjaimellisesti leikata auki ja rullata tasoksi. Karttaprojektioiden koko ongelmakenttä on siis seurausta yhdestä ainoasta asiasta: Maa on likimain pallo.</p>
<p><em>Lähde:</em> Gauss, C. F. (1827). <em>Disquisitiones generales circa superficies curvas.</em> Commentationes Societatis Regiae Scientiarum Gottingensis Recentiores 6, 99–146.</p>
</div>
</div>
<p>Koska kaikkea ei voi säilyttää, jokainen projektio valitsee <strong>mitä se säilyttää ja mistä se luopuu</strong>. Kolme klassista vaihtoehtoa:</p>
<ol type="1">
<li><strong>Konformisuus</strong> (kulmien säilyminen): pienet muodot pysyvät oikeina, mutta pinta-alat vääristyvät. Mercator on tätä.</li>
<li><strong>Ekvivalenssi</strong> (pinta-alojen säilyminen): pinta-alat ovat oikein, mutta muodot venyvät. Equal Earth ja Gall–Peters ovat tätä.</li>
<li><strong>Kompromissi</strong>: ei kumpaakaan täsmälleen, mutta kumpikaan ei myöskään mene pahasti pieleen. Robinson ja Winkel Tripel ovat tätä.</li>
</ol>
<p>Ja tässä on olennainen asia, joka lähes aina jää uutisoinnista pois: <strong>konformisuus ja ekvivalenssi ovat toisensa poissulkevia.</strong> Ei ole olemassa karttaa, joka olisi molempia. Se ei ole tekninen puute vaan Theorema Egregiumin suora seuraus. Kun YK suosittelee siirtymistä pinta-alatarkkaan karttaan, se suosittelee samalla — väistämättä — siirtymistä karttaan, jossa muodot ovat väärin. Siitä tässä postauksessa tehdään numerot näkyviksi.</p>
<hr>
</section>
<section id="miten-vääristymää-mitataan-kaksi-lukua-per-piste" class="level2" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="miten-vääristymää-mitataan-kaksi-lukua-per-piste"><span class="header-section-number">3</span> Miten vääristymää mitataan: kaksi lukua per piste</h2>
<p>Tässä kohtaa on pakko selittää yksi käsite, koska koko loppu postaus nojaa siihen. Yritän tehdä sen ilman yhtään kaavaa ensin.</p>
<p>Kuvittele, että piirrät maapallon pinnalle <strong>hyvin pienen ympyrän</strong> — vaikka sadan kilometrin säteisen. Piirrä se sitten kartalle. Ympyrästä tulee kartalla lähes aina <strong>ellipsi</strong>: soikio, jolla on pitkä ja lyhyt akseli. Tämä soikio on nimeltään <strong>Tissot’n indikatriisi</strong> (ranskalaisen matemaatikon Nicolas Auguste Tissot’n mukaan, 1859).</p>
<p>Soikiosta luetaan kaksi lukua:</p>
<ul>
<li><strong><img src="https://latex.codecogs.com/png.latex?a"></strong> = kuinka moninkertaiseksi etäisyydet venyvät soikion pisimmässä suunnassa</li>
<li><strong><img src="https://latex.codecogs.com/png.latex?b"></strong> = kuinka moninkertaiseksi etäisyydet venyvät soikion lyhimmässä suunnassa</li>
</ul>
<p>Näistä johdetaan kaksi ymmärrettävää mittaria:</p>
<table class="caption-top table">
<colgroup>
<col style="width: 33%">
<col style="width: 33%">
<col style="width: 33%">
</colgroup>
<thead>
<tr class="header">
<th>Mittari</th>
<th>Kaava</th>
<th>Mitä se tarkoittaa arkikielellä</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Pinta-alakerroin</strong></td>
<td><img src="https://latex.codecogs.com/png.latex?s%20=%20a%20%5Ccdot%20b"></td>
<td>Kuinka moninkertaiselta alue näyttää kartalla suhteessa todelliseen kokoonsa. Arvo 1 = oikein, 4 = näyttää nelinkertaiselta.</td>
</tr>
<tr class="even">
<td><strong>Suurin kulmavääristymä</strong></td>
<td><img src="https://latex.codecogs.com/png.latex?%5Comega%20=%202%5Carcsin%5Cfrac%7Ba-b%7D%7Ba+b%7D"></td>
<td>Kuinka monta astetta pahimmillaan kulmat vääristyvät. Arvo 0° = muodot oikein, 40° = muodot pahasti litistyneet tai venyneet.</td>
</tr>
</tbody>
</table>
<p>Näiden kahden mittarin logiikka on suoraviivainen:</p>
<ul>
<li>Jos <img src="https://latex.codecogs.com/png.latex?a%20=%20b"> (soikio on ympyrä), kulmavääristymä on nolla. Kartta on siinä kohdassa <strong>konforminen</strong> — muodot ovat oikein.</li>
<li>Jos <img src="https://latex.codecogs.com/png.latex?a%20%5Ccdot%20b%20=%201"> (soikio on venynyt yhteen suuntaan täsmälleen sen verran kuin se on kutistunut toiseen), pinta-ala on oikein. Kartta on siinä kohdassa <strong>ekvivalentti</strong>.</li>
<li>Molemmat yhtä aikaa (<img src="https://latex.codecogs.com/png.latex?a%20=%20b"> <strong>ja</strong> <img src="https://latex.codecogs.com/png.latex?ab%20=%201">) tarkoittaisi <img src="https://latex.codecogs.com/png.latex?a%20=%20b%20=%201">, eli ei vääristymää lainkaan. Gaussin lauseen mukaan tämä on mahdotonta kaikkialla yhtä aikaa.</li>
</ul>
<p>Nyt jokaisessa maapallon pisteessä on siis kaksi lukua. Miljardeja pisteitä, kaksi lukua kummassakin. <strong>Siitä syntyy jakauma.</strong></p>
<hr>
</section>
<section id="data-ja-menetelmät" class="level2" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="data-ja-menetelmät"><span class="header-section-number">4</span> Data ja menetelmät</h2>
<section id="mitä-dataa-käytetään" class="level3" data-number="4.1">
<h3 data-number="4.1" class="anchored" data-anchor-id="mitä-dataa-käytetään"><span class="header-section-number">4.1</span> Mitä dataa käytetään</h3>
<table class="caption-top table">
<colgroup>
<col style="width: 33%">
<col style="width: 33%">
<col style="width: 33%">
</colgroup>
<thead>
<tr class="header">
<th>Aineisto</th>
<th>Lähde</th>
<th>Käyttö</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Maiden rajat (vektori)</td>
<td>GISCO / Eurostat <code>giscoR</code>-paketilla</td>
<td>Maa-alueiden rajaus, maittaiset pinta-alat</td>
</tr>
<tr class="even">
<td>Maiden väkiluvut</td>
<td>Maailmanpankin avoin API (<code>SP.POP.TOTL</code>)</td>
<td>Väestöpainotettu vääristymäjakauma</td>
</tr>
<tr class="odd">
<td>Mantereet ja aluejaot</td>
<td><code>giscoR::gisco_countrycode</code></td>
<td>Ryhmävertailut</td>
</tr>
<tr class="even">
<td>Projektiokaavat</td>
<td>PROJ-kirjasto <code>sf</code>-paketin kautta</td>
<td>Vääristymien laskenta</td>
</tr>
</tbody>
</table>
<p>Kaikki lähteet ovat avointa dataa. Mitään lukuja ei ole simuloitu tai keksitty.</p>
</section>
<section id="miksi-monte-carlo--otanta" class="level3" data-number="4.2">
<h3 data-number="4.2" class="anchored" data-anchor-id="miksi-monte-carlo--otanta"><span class="header-section-number">4.2</span> Miksi Monte Carlo -otanta</h3>
<p>Vääristymä pitää laskea “koko maapallon yli”. Mutta maapallon pinnalla on äärettömän monta pistettä, joten integraali pitää approksimoida. Teen sen <strong>tasa-aluepainotteisella satunnaisotannalla</strong>: arvon pisteitä maapallon pinnalta niin, että jokainen neliökilometri on yhtä todennäköinen.</p>
<p>Tässä on yksi klassinen sudenkuoppa. Jos arpoisi leveyspiirin tasajakaumasta välillä <img src="https://latex.codecogs.com/png.latex?-90%5E%5Ccirc%20%5Cldots%2090%5E%5Ccirc">, napa-alueet ylipainottuisivat rajusti, koska leveyspiirit ovat siellä lyhyempiä. Oikea tapa on arpoa <strong>leveyspiirin sini</strong> tasajakaumasta:</p>
<p><img src="https://latex.codecogs.com/png.latex?%5Cvarphi%20=%20%5Carcsin(u),%20%5Cquad%20u%20%5Csim%20%5Ctext%7BTasajakauma%7D(-1,%201)"></p>
<p>Tämä antaa tasaisen tiheyden pallon pinnalla. Koodissa tämä tarkistetaan erikseen.</p>
</section>
<section id="miten-vääristymä-lasketaan-numeerisesti" class="level3" data-number="4.3">
<h3 data-number="4.3" class="anchored" data-anchor-id="miten-vääristymä-lasketaan-numeerisesti"><span class="header-section-number">4.3</span> Miten vääristymä lasketaan numeerisesti</h3>
<p>En johda kaavoja käsin jokaiselle projektiolle. Sen sijaan lasken <strong>numeerisen derivaatan</strong>: siirrän pistettä hiukan itään, hiukan länteen, hiukan pohjoiseen ja hiukan etelään, katson kuinka paljon kartan koordinaatit muuttuvat, ja rakennan niistä ns. Jacobin matriisin. Matriisin <strong>singulaariarvot</strong> ovat täsmälleen Tissot’n soikion akselit <img src="https://latex.codecogs.com/png.latex?a"> ja <img src="https://latex.codecogs.com/png.latex?b">. Menetelmä toimii mille tahansa projektiolle, myös sellaisille (kuten Robinson), joita ei edes ole määritelty suljetussa muodossa vaan interpoloimalla taulukosta.</p>
</section>
<section id="yksi-kriittinen-normalisointi" class="level3" data-number="4.4">
<h3 data-number="4.4" class="anchored" data-anchor-id="yksi-kriittinen-normalisointi"><span class="header-section-number">4.4</span> Yksi kriittinen normalisointi</h3>
<p>Pinta-alakerroin <img src="https://latex.codecogs.com/png.latex?s"> sisältää mielivaltaisen globaalin vakion: jos kartta piirretään kahta kertaa isommaksi, kaikki kertoimet nelinkertaistuvat, mutta mikään ei muutu suhteellisesti. Siksi vertailen aina <strong>suhteellista pinta-alavääristymää</strong>:</p>
<p><img src="https://latex.codecogs.com/png.latex?r(x)%20=%20%5Cfrac%7Bs(x)%7D%7Bg%7D,%20%5Cqquad%20g%20=%20%5Cexp%5Cleft(%5Coverline%7B%5Clog%20s%7D%5Cright)%20%5Ctext%7B%20maa-alueiden%20yli%7D"></p>
<p>Toisin sanoen: <em>kuinka moninkertaiselta tämä paikka näyttää verrattuna kartan “keskimääräiseen” maa-alueeseen</em>. Arvo 3 tarkoittaa, että alue näyttää kolme kertaa liian isolta suhteessa muihin maa-alueisiin samalla kartalla. Pinta-alan säilyttävillä projektioilla <img src="https://latex.codecogs.com/png.latex?r%20=%201"> kaikkialla. Tämä on normalisointivapaa suure: kahden paikan välinen suhde ei riipu siitä, miten kartta on skaalattu.</p>
<div class="callout callout-style-default callout-important callout-titled" title="Mitä ei voi tehdä ilman terra-pakettia">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Mitä ei voi tehdä ilman terra-pakettia
</div>
</div>
<div class="callout-body-container callout-body">
<p>Kaikki tämän postauksen laskenta tehdään <code>sf</code>-paketilla ja PROJ-kirjastolla, ilman rasteripaketteja. Se on itse asiassa etu: rasteripohjainen vääristymäanalyysi olisi <em>itsessään</em> projektioriippuvainen, koska rasterin solut olisivat jossakin projektiossa. Piste-otanta pallon pinnalta on projektiovapaa lähtökohta.</p>
</div>
</div>
<hr>
</section>
</section>
<section id="ympäristö-ja-apufunktiot" class="level2" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="ympäristö-ja-apufunktiot"><span class="header-section-number">5</span> Ympäristö ja apufunktiot</h2>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(sf)</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(dplyr)</span>
<span id="cb1-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyr)</span>
<span id="cb1-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(purrr)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggplot2)</span>
<span id="cb1-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist)</span>
<span id="cb1-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(patchwork)</span>
<span id="cb1-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(giscoR)</span>
<span id="cb1-11"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(httr2)</span>
<span id="cb1-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(jsonlite)</span>
<span id="cb1-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2)</span>
<span id="cb1-14"></span>
<span id="cb1-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Puolustuksellinen maskauksenesto (MASS, igraph yms. voivat varastaa nämä)</span></span>
<span id="cb1-16">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select</span>
<span id="cb1-17">filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-18"></span>
<span id="cb1-19"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">source</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"R"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"theme_kristian.R"</span>))</span>
<span id="cb1-20"></span>
<span id="cb1-21">DATA_DIR <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"karttaprojektiot"</span>)</span>
<span id="cb1-22"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dir.exists</span>(DATA_DIR)) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dir.create</span>(DATA_DIR, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">recursive =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb1-23"></span>
<span id="cb1-24"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20260909</span>)</span>
<span id="cb1-25"></span>
<span id="cb1-26"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Maapallon keskimääräinen säde metreinä (IUGG:n auktorisoitu keskisäde R_1).</span></span>
<span id="cb1-27"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Käytetään palloa, ei ellipsoidia: projektioiden vertailussa pallo on oikea</span></span>
<span id="cb1-28"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># vertailukohta, ja osa projektioista (esim. Winkel Tripel) on määritelty</span></span>
<span id="cb1-29"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># vain pallolle.</span></span>
<span id="cb1-30">R_MAA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6371007</span></span>
<span id="cb1-31"></span>
<span id="cb1-32">CRS_PALLO <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=longlat +R=6371007 +no_defs"</span></span>
<span id="cb1-33"></span>
<span id="cb1-34"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Vertailtavat projektiot. Kaikissa sama säde ja sama keskimeridiaani (Greenwich),</span></span>
<span id="cb1-35"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># jotta vertailu on reilu.</span></span>
<span id="cb1-36">PROJEKTIOT <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb1-37">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>        <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=merc     +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-38">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gall-Peters"</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=cea +lat_ts=45 +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-39">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mollweide"</span>       <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=moll     +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-40">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eckert IV"</span>       <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=eck4     +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-41">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=eqearth  +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-42">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Robinson"</span>        <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=robin    +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-43">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Winkel Tripel"</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=wintri   +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-44">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Natural Earth"</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=natearth +lon_0=0 +R=6371007 +no_defs"</span>,</span>
<span id="cb1-45">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Plate carree"</span>    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=eqc      +lon_0=0 +R=6371007 +no_defs"</span></span>
<span id="cb1-46">)</span>
<span id="cb1-47"></span>
<span id="cb1-48"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Luokittelu myöhempää tulkintaa varten</span></span>
<span id="cb1-49">PROJ_TYYPPI <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb1-50">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"konforminen"</span>,</span>
<span id="cb1-51">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gall-Peters"</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pinta-alatarkka"</span>,</span>
<span id="cb1-52">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mollweide"</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pinta-alatarkka"</span>,</span>
<span id="cb1-53">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eckert IV"</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pinta-alatarkka"</span>,</span>
<span id="cb1-54">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pinta-alatarkka"</span>,</span>
<span id="cb1-55">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Robinson"</span>      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kompromissi"</span>,</span>
<span id="cb1-56">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Winkel Tripel"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kompromissi"</span>,</span>
<span id="cb1-57">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Natural Earth"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kompromissi"</span>,</span>
<span id="cb1-58">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Plate carree"</span>  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kompromissi"</span></span>
<span id="cb1-59">)</span>
<span id="cb1-60"></span>
<span id="cb1-61"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">setequal</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(PROJEKTIOT), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(PROJ_TYYPPI)))</span></code></pre></div></div>
</details>
</div>
<p>Vääristymien laskentafunktio. Tämä on postauksen matemaattinen ydin, joten se on kommentoitu rivi riviltä.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">laske_vaaristymat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(lonlat, crs_kohde, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">R =</span> R_MAA, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">delta_deg =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-4</span>) {</span>
<span id="cb2-2"></span>
<span id="cb2-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.matrix</span>(lonlat), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ncol</span>(lonlat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb2-4">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Reunaehdot: numeerinen derivaatta ei saa ylittää päivämäärärajaa eikä napoja,</span></span>
<span id="cb2-5">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># koska PROJ kiertää pituusasteen takaisin ja derivaatta hyppäisi.</span></span>
<span id="cb2-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.9</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">89.5</span>))</span>
<span id="cb2-7"></span>
<span id="cb2-8">  d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> delta_deg</span>
<span id="cb2-9">  proj_apu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(m) sf<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sf_project</span>(CRS_PALLO, crs_kohde, m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keep =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb2-10"></span>
<span id="cb2-11">  pI <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">proj_apu</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cbind</span>(lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d, lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]))   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># itään</span></span>
<span id="cb2-12">  pL <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">proj_apu</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cbind</span>(lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> d, lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]))   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># länteen</span></span>
<span id="cb2-13">  pP <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">proj_apu</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cbind</span>(lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> d))   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># pohjoiseen</span></span>
<span id="cb2-14">  pE <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">proj_apu</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cbind</span>(lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> d))   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># etelään</span></span>
<span id="cb2-15"></span>
<span id="cb2-16">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Askel radiaaneina (keskeisdifferenssi -&gt; 2 * delta)</span></span>
<span id="cb2-17">  askel <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> d <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span></span>
<span id="cb2-18">  phi   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span></span>
<span id="cb2-19">  cphi  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(phi)</span>
<span id="cb2-20"></span>
<span id="cb2-21">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Osittaisderivaatat kartan koordinaateille</span></span>
<span id="cb2-22">  dx_dlam <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (pI[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pL[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> askel</span>
<span id="cb2-23">  dy_dlam <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (pI[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pL[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> askel</span>
<span id="cb2-24">  dx_dphi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (pP[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pE[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> askel</span>
<span id="cb2-25">  dy_dphi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (pP[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pE[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> askel</span>
<span id="cb2-26"></span>
<span id="cb2-27">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Jacobin matriisi suhteessa pallon PAIKALLISEEN ortonormaaliin kehykseen:</span></span>
<span id="cb2-28">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># itä-suunnan kaarenpituus on R*cos(phi)*dlambda, pohjois-suunnan R*dphi.</span></span>
<span id="cb2-29">  J11 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dx_dlam <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (R <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> cphi); J21 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dy_dlam <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (R <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> cphi)</span>
<span id="cb2-30">  J12 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dx_dphi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> R;          J22 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dy_dphi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> R</span>
<span id="cb2-31"></span>
<span id="cb2-32">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># J^T J:n alkiot -&gt; singulaariarvot analyyttisesti (2x2, ei tarvita svd-silmukkaa)</span></span>
<span id="cb2-33">  Ee <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> J11<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> J21<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb2-34">  Gg <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> J12<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> J22<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb2-35">  Ff <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> J11 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> J12 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> J21 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> J22</span>
<span id="cb2-36">  jalki <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> Ee <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> Gg</span>
<span id="cb2-37">  det2  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> Ee <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> Gg <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> Ff<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb2-38"></span>
<span id="cb2-39">  diskr <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmax</span>(jalki<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> det2, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># numeerinen suoja</span></span>
<span id="cb2-40">  lam1  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (jalki <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(diskr)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb2-41">  lam2  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmax</span>((jalki <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(diskr)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb2-42"></span>
<span id="cb2-43">  a <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(lam1)                                <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Tissot'n soikion pitkä puoliakseli</span></span>
<span id="cb2-44">  b <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(lam2)                                <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># lyhyt puoliakseli</span></span>
<span id="cb2-45"></span>
<span id="cb2-46">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb2-47">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon        =</span> lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],</span>
<span id="cb2-48">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat        =</span> lonlat[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>],</span>
<span id="cb2-49">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">a          =</span> a,</span>
<span id="cb2-50">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">b          =</span> b,</span>
<span id="cb2-51">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pinta_ala  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmax</span>(det2, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)),            <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># a * b</span></span>
<span id="cb2-52">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">omega      =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmin</span>((a <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> b) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (a <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> b), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi</span>
<span id="cb2-53">  )</span>
<span id="cb2-54">}</span></code></pre></div></div>
</details>
</div>
<section id="funktion-validointi-tunnetuilla-arvoilla" class="level3" data-number="5.1">
<h3 data-number="5.1" class="anchored" data-anchor-id="funktion-validointi-tunnetuilla-arvoilla"><span class="header-section-number">5.1</span> Funktion validointi tunnetuilla arvoilla</h3>
<p>Ennen kuin luotan tuloksiin, tarkistan funktion kolmella tapauksella, joiden oikea vastaus tiedetään käsin laskemalla. Tämä on se kohta, jossa pilkkuvirheet karsiutuvat.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">testipisteet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cbind</span>(</span>
<span id="cb3-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">70</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">120</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>),</span>
<span id="cb3-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">60</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">33</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">45</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">78</span>)</span>
<span id="cb3-4">)</span>
<span id="cb3-5"></span>
<span id="cb3-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 1) Mercator: pinta-alakerroin = 1/cos^2(phi), kulmavaaristyma = 0</span></span>
<span id="cb3-7">v_merc <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(testipisteet, PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>]])</span>
<span id="cb3-8">odotus_merc <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(testipisteet[, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lat"</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb3-9"></span>
<span id="cb3-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(v_merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> odotus_merc) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> odotus_merc) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-5</span>)</span>
<span id="cb3-11"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(v_merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-4</span>)</span>
<span id="cb3-12"></span>
<span id="cb3-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 2) Pinta-alatarkat projektiot: pinta-alakerroin = 1 kaikkialla</span></span>
<span id="cb3-14"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (nimi <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mollweide"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eckert IV"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gall-Peters"</span>)) {</span>
<span id="cb3-15">  v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(testipisteet, PROJEKTIOT[[nimi]])</span>
<span id="cb3-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-4</span>)</span>
<span id="cb3-17">}</span>
<span id="cb3-18"></span>
<span id="cb3-19"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 3) Plate carree: pinta-alakerroin = 1/cos(phi)</span></span>
<span id="cb3-20">v_eqc <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(testipisteet, PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Plate carree"</span>]])</span>
<span id="cb3-21"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(v_eqc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(testipisteet[, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lat"</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-5</span>)</span>
<span id="cb3-22"></span>
<span id="cb3-23"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kaikki kolme validointitestiä läpäisty.</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Kaikki kolme validointitestiä läpäisty.</code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator pinta-alakerroin 60. leveyspiirilla:"</span>,</span>
<span id="cb5-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(v_merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pinta_ala[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>], <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"(käsin laskettu:"</span>,</span>
<span id="cb5-3">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">60</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>),<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">")</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Mercator pinta-alakerroin 60. leveyspiirilla: 4 (käsin laskettu: 4 )</code></pre>
</div>
</div>
<p>Funktio siis tuottaa täsmälleen ne arvot, jotka teoriasta seuraavat. Nyt sitä voi käyttää projektioihin, joille käsin laskeminen olisi työlästä.</p>
<hr>
</section>
</section>
<section id="aineiston-haku" class="level2" data-number="6">
<h2 data-number="6" class="anchored" data-anchor-id="aineiston-haku"><span class="header-section-number">6</span> Aineiston haku</h2>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1">polku_maat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA_DIR, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maat.qs"</span>)</span>
<span id="cb7-2"></span>
<span id="cb7-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(polku_maat)) {</span>
<span id="cb7-4">  maat_raaka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> giscoR<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gisco_get_countries</span>(</span>
<span id="cb7-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">year       =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2020"</span>,</span>
<span id="cb7-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">resolution =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"20"</span>,</span>
<span id="cb7-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">epsg       =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4326"</span></span>
<span id="cb7-8">  )</span>
<span id="cb7-9">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(maat_raaka, polku_maat)</span>
<span id="cb7-10">}</span>
<span id="cb7-11">maat_raaka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(polku_maat)</span>
<span id="cb7-12"></span>
<span id="cb7-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ISO3_CODE"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"NAME_ENGL"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(maat_raaka)))</span>
<span id="cb7-14"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maat_raaka) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>)</span>
<span id="cb7-15"></span>
<span id="cb7-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Mannerluokitus giscoR:n omasta koodikirjasta</span></span>
<span id="cb7-17">koodit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> giscoR<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>gisco_countrycode <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(ISO3_CODE, continent, un.region.name) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(ISO3_CODE, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.keep_all =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb7-20"></span>
<span id="cb7-21">MANNER_FI <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb7-22">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Africa"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Afrikka"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Asia"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aasia"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Europe"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eurooppa"</span>,</span>
<span id="cb7-23">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Americas"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Amerikat"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oceania"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oseania"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Antarctica"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Antarktis"</span></span>
<span id="cb7-24">)</span>
<span id="cb7-25"></span>
<span id="cb7-26">maat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maat_raaka <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(koodit, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ISO3_CODE"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb7-29">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">manner_en =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(continent, un.region.name),</span>
<span id="cb7-30">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">manner    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(MANNER_FI[manner_en])</span>
<span id="cb7-31">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-32">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(manner), ISO3_CODE <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ATA"</span>)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Antarktis erikseen, ks. alla</span></span>
<span id="cb7-33"></span>
<span id="cb7-34"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Antarktis on poistettu, koska Mercatorin projektio ei kykene esittamään sitä</span></span>
<span id="cb7-35"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># lainkaan: kerroin kasvaa rajatta navalla. Tama on itsessään tulos, ei puute.</span></span>
<span id="cb7-36"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maita mukana:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maat), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Maita mukana: 240 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ilman mannerluokitusta jääneet:"</span>,</span>
<span id="cb9-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(MANNER_FI[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(maat_raaka<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>)]))), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Ilman mannerluokitusta jääneet: 257 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">print</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_drop_geometry</span>(maat), manner, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 5 × 2
  manner       n
  &lt;chr&gt;    &lt;int&gt;
1 Afrikka     58
2 Amerikat    53
3 Aasia       50
4 Eurooppa    50
5 Oseania     29</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb13-1">polku_vaesto <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA_DIR, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaesto_worldbank.qs"</span>)</span>
<span id="cb13-2"></span>
<span id="cb13-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(polku_vaesto)) {</span>
<span id="cb13-4">  vastaus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">request</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://api.worldbank.org/v2/country/all/indicator/SP.POP.TOTL"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-5">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_url_query</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"json"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">per_page =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">date =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2015:2024"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-6">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_retry</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_tries =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-7">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_perform</span>()</span>
<span id="cb13-8"></span>
<span id="cb13-9">  raaka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> jsonlite<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fromJSON</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">resp_body_string</span>(vastaus), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">flatten =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb13-10"></span>
<span id="cb13-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(raaka) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.data.frame</span>(raaka[[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]]))</span>
<span id="cb13-12"></span>
<span id="cb13-13">  vaesto_raaka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> raaka[[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-14">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-15">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ISO3_CODE =</span> countryiso3code, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosi =</span> date, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vakiluku =</span> value) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-16">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(vakiluku), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nchar</span>(ISO3_CODE) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-17">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(vuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-18">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(ISO3_CODE) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-19">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_max</span>(vuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">with_ties =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-20">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb13-21"></span>
<span id="cb13-22">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(vaesto_raaka, polku_vaesto)</span>
<span id="cb13-23">}</span>
<span id="cb13-24">vaesto_raaka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(polku_vaesto)</span>
<span id="cb13-25"></span>
<span id="cb13-26"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(vaesto_raaka) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>)</span>
<span id="cb13-27"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(vaesto_raaka<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vakiluku <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb13-28"></span>
<span id="cb13-29"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vakilukuja maittain:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(vaesto_raaka),</span>
<span id="cb13-30">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| viimeisin vuosi:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(vaesto_raaka<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vuosi),</span>
<span id="cb13-31">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| yhteensa:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(vaesto_raaka<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vakiluku), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Vakilukuja maittain: 260 | viimeisin vuosi: 2024 | yhteensa: 79 234 389 292 </code></pre>
</div>
</div>
<section id="otannan-tuottaminen" class="level3" data-number="6.1">
<h3 data-number="6.1" class="anchored" data-anchor-id="otannan-tuottaminen"><span class="header-section-number">6.1</span> Otannan tuottaminen</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb15-1">polku_otos <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA_DIR, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maapisteet.qs"</span>)</span>
<span id="cb15-2">N_TAVOITE  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">60000</span>    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># maa-alueille osuvien pisteiden tavoitemaara</span></span>
<span id="cb15-3"></span>
<span id="cb15-4"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(polku_otos)) {</span>
<span id="cb15-5"></span>
<span id="cb15-6">  sf<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sf_use_s2</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb15-7">  maat_yhd <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(ISO3_CODE, NAME_ENGL, manner)</span>
<span id="cb15-8"></span>
<span id="cb15-9">  arvo_pisteita <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(n) {</span>
<span id="cb15-10">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb15-11">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(n, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.9</span>),</span>
<span id="cb15-12">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(n, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># tasa-alueotanta pallolla</span></span>
<span id="cb15-13">    ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb15-14">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(lat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">89.5</span>)</span>
<span id="cb15-15">  }</span>
<span id="cb15-16"></span>
<span id="cb15-17">  kertyma <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>()</span>
<span id="cb15-18">  saatu   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb15-19">  kierros <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb15-20"></span>
<span id="cb15-21">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">while</span> (saatu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> N_TAVOITE <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;&amp;</span> kierros <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>) {</span>
<span id="cb15-22">    kierros <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> kierros <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb15-23">    ehdokas <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arvo_pisteita</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">250000</span>)</span>
<span id="cb15-24"></span>
<span id="cb15-25">    ehdokas_sf <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_as_sf</span>(ehdokas, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">coords =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lon"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lat"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">crs =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4326</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">remove =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb15-26">    osuma      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_join</span>(ehdokas_sf, maat_yhd, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">join =</span> st_intersects, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">left =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb15-27"></span>
<span id="cb15-28">    osa <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> osuma <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_drop_geometry</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>()</span>
<span id="cb15-29">    kertyma[[kierros]] <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> osa</span>
<span id="cb15-30">    saatu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> saatu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(osa)</span>
<span id="cb15-31">  }</span>
<span id="cb15-32"></span>
<span id="cb15-33">  maapisteet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_rows</span>(kertyma) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb15-34">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(lon, lat, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.keep_all =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb15-35">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_head</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> N_TAVOITE)</span>
<span id="cb15-36"></span>
<span id="cb15-37">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(maapisteet, polku_otos)</span>
<span id="cb15-38">}</span>
<span id="cb15-39">maapisteet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(polku_otos)</span>
<span id="cb15-40"></span>
<span id="cb15-41"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maapisteet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50000</span>)</span>
<span id="cb15-42"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(maapisteet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner)))</span>
<span id="cb15-43"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(maapisteet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">89.5</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(maapisteet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lon) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.9</span>))</span>
<span id="cb15-44"></span>
<span id="cb15-45"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Tarkistus: osumaosuuden pitaisi vastata maapinta-alan osuutta (n. 29 % ilman</span></span>
<span id="cb15-46"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Antarktista noin 26-27 %). Jos ei, otanta on vinoutunut.</span></span>
<span id="cb15-47"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maapisteita:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maapisteet), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Maapisteita: 60000 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb17-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">print</span>(maapisteet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(manner, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n)))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 5 × 3
  manner       n  osuus
  &lt;chr&gt;    &lt;int&gt;  &lt;dbl&gt;
1 Amerikat 18781 0.313 
2 Aasia    13935 0.232 
3 Afrikka  13291 0.222 
4 Eurooppa 10158 0.169 
5 Oseania   3835 0.0639</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-tip callout-titled" title="Miksi tämä tarkistus on tärkeä">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Miksi tämä tarkistus on tärkeä
</div>
</div>
<div class="callout-body-container callout-body">
<p>Yllä oleva mannerjakauma on samalla otannan laadunvarmistus. Koska otanta on tasa-aluepainotteinen, pisteiden osuuksien pitää vastata mantereiden todellisia pinta-alaosuuksia. Jos Eurooppa saisi 20 % pisteistä, tietäisin heti, että leveyspiiriotanta on väärin — ja koko postauksen tulokset olisivat roskaa. Tällaiset “pitäisi olla suunnilleen X” -tarkistukset ovat halpoja kirjoittaa ja säästävät nolouksilta.</p>
</div>
</div>
<hr>
</section>
</section>
<section id="tulos-1-mercatorin-vääristymä-ei-ole-luku-vaan-jakauma" class="level2" data-number="7">
<h2 data-number="7" class="anchored" data-anchor-id="tulos-1-mercatorin-vääristymä-ei-ole-luku-vaan-jakauma"><span class="header-section-number">7</span> Tulos 1: Mercatorin vääristymä ei ole luku vaan jakauma</h2>
<p>Lasketaan nyt vääristymä jokaiselle otospisteelle jokaisessa projektiossa.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb19-1">polku_vaar <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA_DIR, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaaristymat.qs"</span>)</span>
<span id="cb19-2"></span>
<span id="cb19-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(polku_vaar)) {</span>
<span id="cb19-4">  koord <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.matrix</span>(maapisteet[, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lon"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lat"</span>)])</span>
<span id="cb19-5"></span>
<span id="cb19-6">  vaaristymat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">imap_dfr</span>(PROJEKTIOT, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(crs, nimi) {</span>
<span id="cb19-7">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(koord, crs) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-8">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb19-9">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">projektio =</span> nimi,</span>
<span id="cb19-10">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ISO3_CODE =</span> maapisteet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE,</span>
<span id="cb19-11">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">manner    =</span> maapisteet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner</span>
<span id="cb19-12">      )</span>
<span id="cb19-13">  })</span>
<span id="cb19-14"></span>
<span id="cb19-15">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Normalisointi: suhteellinen pinta-alavaaristyma r = s / geometrinen keskiarvo</span></span>
<span id="cb19-16">  vaaristymat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-17">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(projektio) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-18">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r_pinta_ala =</span> pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(pinta_ala)))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-19">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-20">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb19-21">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">log2_r =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log2</span>(r_pinta_ala),</span>
<span id="cb19-22">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tyyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(PROJ_TYYPPI[projektio])</span>
<span id="cb19-23">    )</span>
<span id="cb19-24"></span>
<span id="cb19-25">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(vaaristymat, polku_vaar)</span>
<span id="cb19-26">}</span>
<span id="cb19-27">vaaristymat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(polku_vaar)</span>
<span id="cb19-28"></span>
<span id="cb19-29"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(vaaristymat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_pinta_ala)))</span>
<span id="cb19-30"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(vaaristymat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-9</span>))</span>
<span id="cb19-31"></span>
<span id="cb19-32"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sanity: pinta-alatarkoilla r pitaa olla 1</span></span>
<span id="cb19-33">tarkistus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-34">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(tyyppi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pinta-alatarkka"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb19-35">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">poikkeama =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(r_pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span>
<span id="cb19-36"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(tarkistus<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>poikkeama <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-3</span>)</span>
<span id="cb19-37"></span>
<span id="cb19-38"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Rivi\u00e4 yhteens\u00e4:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(vaaristymat), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Riviä yhteensä: 540000 </code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb21-1">merc <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>)</span>
<span id="cb21-2"></span>
<span id="cb21-3">kvantiilit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_pinta_ala, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.99</span>))</span>
<span id="cb21-4"></span>
<span id="cb21-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(merc, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> r_pinta_ala)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb21-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_histogram</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">bins =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">90</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb21-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb21-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"50%"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb21-9">             <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb21-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(</span>
<span id="cb21-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">trans  =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"log2"</span>,</span>
<span id="cb21-12">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>),</span>
<span id="cb21-13">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0,5\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"8\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"16\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"32\u00d7"</span>)</span>
<span id="cb21-14">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb21-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb21-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin pinta-alavääristymä on jakauma, ei luku"</span>,</span>
<span id="cb21-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(</span>
<span id="cb21-18">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Punainen viiva = kartan keskimääräinen maa-alue. Katkoviiva = mediaani ("</span>,</span>
<span id="cb21-19">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"50%"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7)."</span></span>
<span id="cb21-20">    ),</span>
<span id="cb21-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kuinka moninkertaiselta alue näyttää kartan keskimääräiseen maa-alueeseen verrattuna"</span>,</span>
<span id="cb21-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Otospisteiden lukumäärä"</span>,</span>
<span id="cb21-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aineisto: GISCO/Eurostat maarajat, 60 000 tasa-aluepainotettua otospistettä"</span></span>
<span id="cb21-24">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb21-25">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-mercator-jakauma" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-mercator-jakauma-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-mercator-jakauma-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-mercator-jakauma-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;1: Mercatorin projektion suhteellinen pinta-alavääristymä maa-alueilla. Vaaka-akseli on logaritminen: jokainen askel oikealle tarkoittaa kaksinkertaistumista.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Vaaka-akselilla on se, kuinka monikertaiselta maapallon eri kohdat näyttävät Mercatorin kartalla verrattuna kartan keskimääräiseen maa-alueeseen. Pystyakselilla on, kuinka moni otospiste osui kuhunkin kohtaan. Punainen pystyviiva kohdassa “1×” on se kohta, jossa alue näyttää täsmälleen keskimääräiseltä. Sen vasemmalla puolella alueet näyttävät liian pieniltä, oikealla puolella liian isoilta. Akseli on <strong>logaritminen</strong>: joka kerta kun siirryt yhden merkinnän oikealle, luku kaksinkertaistuu. Se on tarpeen, koska muuten oikea häntä olisi niin pitkä, ettei kuvasta näkisi mitään.</p>
<p>Numerot:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb22-1">merc_yhteenveto <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb22-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Tunnusluku =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"5. persentiili"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Alakvartiili"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mediaani"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Yläkvartiili"</span>,</span>
<span id="cb22-3">                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"95. persentiili"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"99. persentiili"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maksimi"</span>,</span>
<span id="cb22-4">                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ylin / alin (5% vs 95%)"</span>),</span>
<span id="cb22-5">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Arvo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb22-6">    kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"5%"</span>]], kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"25%"</span>]], kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"50%"</span>]],</span>
<span id="cb22-7">    kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"75%"</span>]], kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"95%"</span>]], kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"99%"</span>]],</span>
<span id="cb22-8">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_pinta_ala),</span>
<span id="cb22-9">    kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"95%"</span>]] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> kvantiilit[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"5%"</span>]]</span>
<span id="cb22-10">  )</span>
<span id="cb22-11">) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb22-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Arvo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(Arvo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>))</span>
<span id="cb22-13"></span>
<span id="cb22-14">knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(merc_yhteenveto,</span>
<span id="cb22-15">             <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin suhteellinen pinta-alavääristymä maa-alueilla"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Mercatorin suhteellinen pinta-alavääristymä maa-alueilla</caption>
<thead>
<tr class="header">
<th style="text-align: left;">Tunnusluku</th>
<th style="text-align: left;">Arvo</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">5. persentiili</td>
<td style="text-align: left;">0.57×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Alakvartiili</td>
<td style="text-align: left;">0.62×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Mediaani</td>
<td style="text-align: left;">0.76×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Yläkvartiili</td>
<td style="text-align: left;">1.34×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">95. persentiili</td>
<td style="text-align: left;">3.85×</td>
</tr>
<tr class="even">
<td style="text-align: left;">99. persentiili</td>
<td style="text-align: left;">8.98×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Maksimi</td>
<td style="text-align: left;">44.31×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Ylin / alin (5% vs 95%)</td>
<td style="text-align: left;">6.76×</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Tässä on postauksen ensimmäinen olennainen havainto. <strong>Mercatorin “pahuudelle” ei ole yhtä lukua.</strong> Puolet maapallon maa-alueesta on melko lähellä oikeaa suhdetta, mutta jakauman oikea häntä on hyvin pitkä. Ero jakauman ylä- ja alapään välillä on monikymmenkertainen. Jos joku sanoo “Mercator liioittelee noin kaksinkertaisesti”, hän puhuu mediaanista ja jättää kertomatta, että osalle maapalloa kerroin on kymmeniä.</p>
<p>Ja tässä on sama asia karttana:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb23-1">hila <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">expand.grid</span>(</span>
<span id="cb23-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.5</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb23-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">84.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">84.5</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb23-4">) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.matrix</span>()</span>
<span id="cb23-5"></span>
<span id="cb23-6">hila_v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(hila, PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb23-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r =</span> pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pinta_ala))))</span>
<span id="cb23-8"></span>
<span id="cb23-9">rajat_sf <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_geometry</span>()</span>
<span id="cb23-10"></span>
<span id="cb23-11"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb23-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_tile</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> hila_v, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> lon, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> lat, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log2</span>(r)),</span>
<span id="cb23-13">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">width =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">height =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb23-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_sf</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> rajat_sf, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey20"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.12</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb23-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_gradient2</span>(</span>
<span id="cb23-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">low =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mid =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f7f2e8"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">high =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">midpoint =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,</span>
<span id="cb23-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log2</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>)),</span>
<span id="cb23-18">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0,5\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"8\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"16\u00d7"</span>),</span>
<span id="cb23-19">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name   =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Näennäinen</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">koko"</span></span>
<span id="cb23-20">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb23-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coord_sf</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xlim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ylim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">85</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">85</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">expand =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">crs =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4326</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb23-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb23-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin vääristymä riippuu vain leveyspiiristä"</span>,</span>
<span id="cb23-24">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"valkoinen = näyttää liian pieneltä, punainen = näyttää liian isolta"</span>,</span>
<span id="cb23-25">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>,</span>
<span id="cb23-26">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kartta on piirretty tasakulmakoordinaatistossa, jotta vääristymä itse näkyy vääristymättä"</span></span>
<span id="cb23-27">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb23-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-vaaristymakartta" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-vaaristymakartta-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-vaaristymakartta-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-vaaristymakartta-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;2: Missä Mercator liioittelee ja missä se kutistaa. Väri kertoo suhteellisen pinta-alavääristymän.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä karttaa luetaan.</strong> Tämä kuva on piirretty tarkoituksella <em>ilman</em> Mercatoria — se on tavallinen pituus/leveysasteruudukko. Väri kertoo, mitä Mercator tekisi kullekin kohdalle. Vaalea keskikaista päiväntasaajan tienoilla on alue, jonka Mercator kutistaa. Voimakkaan punaiset alueet pohjoisessa ja etelässä ovat niitä, jotka se puhaltaa isoiksi. Huomaa, että väri riippuu vain korkeudesta kuvassa, ei lainkaan siitä ollaanko idässä vai lännessä: Mercatorin vääristymä on puhtaasti leveyspiirin funktio.</p>
<hr>
</section>
<section id="kestääkö-grönlanti-näyttää-afrikan-kokoiselta-tarkastelun" class="level2" data-number="8">
<h2 data-number="8" class="anchored" data-anchor-id="kestääkö-grönlanti-näyttää-afrikan-kokoiselta-tarkastelun"><span class="header-section-number">8</span> Kestääkö “Grönlanti näyttää Afrikan kokoiselta” tarkastelun?</h2>
<p>Tämä on kampanjan iskulause. Testataan se tarkasti — ei otantana vaan laskemalla maiden todelliset ja näennäiset pinta-alat suoraan rajapolygoneista.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb24-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Todelliset pinta-alat pallogeometrialla (s2)</span></span>
<span id="cb24-2">sf<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sf_use_s2</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb24-3">maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ala_tosi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_area</span>(maat))</span>
<span id="cb24-4"></span>
<span id="cb24-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rajaviivat pitaa TIHENTAA ennen projisointia. Muuten pitka suora rajaviiva</span></span>
<span id="cb24-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># (esim. USA/Kanada 49. leveyspiirilla) piirtyy kartalle suorana, vaikka sen</span></span>
<span id="cb24-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># pitaisi kaartua -- ja pinta-ala menee vaarin. 50 km segmentti riittaa.</span></span>
<span id="cb24-8">maat_tiheat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_segmentize</span>(maat, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">dfMaxLength =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50000</span>)</span>
<span id="cb24-9"></span>
<span id="cb24-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Naennaiset pinta-alat kartalla: projisoidaan polygonit ja mitataan tason ala.</span></span>
<span id="cb24-11">naennainen_ala <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(crs) {</span>
<span id="cb24-12">  sf<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sf_use_s2</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb24-13">  g <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maat_tiheat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb24-14">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_wrap_dateline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">options =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"WRAPDATELINE=YES"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DATELINEOFFSET=180"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb24-15">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_transform</span>(crs)</span>
<span id="cb24-16">  ala <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">st_area</span>(g))</span>
<span id="cb24-17">  sf<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sf_use_s2</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb24-18">  ala</span>
<span id="cb24-19">}</span>
<span id="cb24-20"></span>
<span id="cb24-21"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Gronlanti on Tanskan alue; GISCO:ssa erillinen koodi GRL.</span></span>
<span id="cb24-22">kohteet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"GRL"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"COD"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IND"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"FIN"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"BRA"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RUS"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AUS"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DZA"</span>)</span>
<span id="cb24-23"></span>
<span id="cb24-24">vertailu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb24-25">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ISO3_CODE   =</span> maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE,</span>
<span id="cb24-26">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">maa         =</span> maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>NAME_ENGL,</span>
<span id="cb24-27">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ala_tosi    =</span> maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ala_tosi,</span>
<span id="cb24-28">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ala_merc    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">naennainen_ala</span>(PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>]]),</span>
<span id="cb24-29">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ala_eqe     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">naennainen_ala</span>(PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>]])</span>
<span id="cb24-30">) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb24-31">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb24-32">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># normalisoidaan niin, etta maailman maa-alueiden yhteispinta-ala tasmaa</span></span>
<span id="cb24-33">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r_merc =</span> (ala_merc <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ala_merc)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (ala_tosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ala_tosi)),</span>
<span id="cb24-34">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r_eqe  =</span> (ala_eqe  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ala_eqe))  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (ala_tosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ala_tosi))</span>
<span id="cb24-35">  )</span>
<span id="cb24-36"></span>
<span id="cb24-37"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Equal Earth on pinta-alatarkka: suhteen pitaa olla 1 numeerisen tarkkuuden</span></span>
<span id="cb24-38"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># rajoissa. Tama on koko pinta-alalaskennan validointi.</span></span>
<span id="cb24-39"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth, suurin poikkeama ykkosesta:"</span>,</span>
<span id="cb24-40">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(vertailu<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_eqe <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Equal Earth, suurin poikkeama ykkosesta: 5e-04 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb26" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb26-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(vertailu<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_eqe <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.02</span>)</span>
<span id="cb26-2"></span>
<span id="cb26-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Afrikan yhteispinta-ala</span></span>
<span id="cb26-4">afr_iso <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE[maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Afrikka"</span>]</span>
<span id="cb26-5">afr <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vertailu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(ISO3_CODE <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> afr_iso) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb26-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tosi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ala_tosi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">merc =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ala_merc))</span>
<span id="cb26-7"></span>
<span id="cb26-8">grl <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vertailu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(ISO3_CODE <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"GRL"</span>)</span>
<span id="cb26-9"></span>
<span id="cb26-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Afrikan todellinen pinta-ala / Gronlannin:"</span>,</span>
<span id="cb26-11">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(afr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>tosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> grl<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ala_tosi, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Afrikan todellinen pinta-ala / Gronlannin: 13.88 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb28-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Afrikan naennainen pinta-ala Mercatorilla / Gronlannin:"</span>,</span>
<span id="cb28-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(afr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>merc <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> grl<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ala_merc, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Afrikan naennainen pinta-ala Mercatorilla / Gronlannin: 0.94 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb30" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb30-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gronlannin liioittelukerroin Mercatorilla:"</span>,</span>
<span id="cb30-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(grl<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_merc, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Gronlannin liioittelukerroin Mercatorilla: 6.79 </code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb32" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb32-1">vertailu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb32-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(ISO3_CODE <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> kohteet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb32-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(r_merc)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb32-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb32-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Maa =</span> maa,</span>
<span id="cb32-6">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Todellinen pinta-ala (milj. km²)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(ala_tosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e12</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>),</span>
<span id="cb32-7">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Liioittelukerroin Mercatorilla</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(r_merc, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>)</span>
<span id="cb32-8">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb32-9">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kuinka moninkertaiselta maa näyttää Mercatorin kartalla"</span>)</span></code></pre></div></div>
</details>
<div id="tbl-maat" class="cell quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-tbl figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-tbl" id="tbl-maat-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Table&nbsp;1: Kuinka moninkertaiselta maa näyttää Mercatorin kartalla
</figcaption>
<div aria-describedby="tbl-maat-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<div class="cell-output-display">
<table class="cell caption-top table table-sm table-striped small">
<colgroup>
<col style="width: 34%">
<col style="width: 34%">
<col style="width: 31%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Maa</th>
<th style="text-align: right;">Todellinen pinta-ala (milj. km²)</th>
<th style="text-align: left;">Liioittelukerroin Mercatorilla</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Greenland</td>
<td style="text-align: right;">2.16</td>
<td style="text-align: left;">6.79×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Finland</td>
<td style="text-align: right;">0.34</td>
<td style="text-align: left;">2.26×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Russian Federation</td>
<td style="text-align: right;">16.85</td>
<td style="text-align: left;">2.03×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Algeria</td>
<td style="text-align: right;">2.31</td>
<td style="text-align: left;">0.54×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Australia</td>
<td style="text-align: right;">7.71</td>
<td style="text-align: left;">0.52×</td>
</tr>
<tr class="even">
<td style="text-align: left;">India</td>
<td style="text-align: right;">2.97</td>
<td style="text-align: left;">0.49×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Brazil</td>
<td style="text-align: right;">8.52</td>
<td style="text-align: left;">0.44×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Democratic Republic of The Congo</td>
<td style="text-align: right;">2.34</td>
<td style="text-align: left;">0.42×</td>
</tr>
</tbody>
</table>
</div>
</div>
</figure>
</div>
</div>
<p>Tässä on kiinnostava nyanssi. Väite “Afrikka ja Grönlanti näyttävät samankokoisilta” on <strong>liioiteltu</strong>, jos sillä tarkoitetaan täsmällistä yhtäsuuruutta. Todellinen suhde on noin 14:1, ja Mercator kutistaa sen laskennallisesti selvästi — mutta ei aivan ykköseen asti. Yksi syy on se, että Grönlanti ei ole kokonaan hyvin pohjoisessa: sen eteläkärki on 60. leveyspiirin tuntumassa, missä liioittelukerroin on paljon pienempi kuin pohjoiskärjessä.</p>
<p>Miksi väite silti tuntuu useimmista ihmisistä oikealta? Todennäköisin selitys on, että Grönlanti sijaitsee kartan yläreunassa, jossa se on iso ja yhtenäinen muoto, kun taas Afrikkaa katsotaan keskellä muiden mantereiden ympäröimänä. Havaintopsykologia ja geometria eivät ole sama asia.</p>
<p>Tässä on tämän blogin peruskysymys tiivistettynä: <strong>kampanjan pointti on oikea (Mercator vääristää pinta-aloja systemaattisesti ja voimakkaasti), mutta markkinointiin valittu yksittäinen luku ei kestä tarkkaa tarkastelua.</strong> Molemmat asiat voivat olla totta yhtä aikaa, ja päättäjän on hyvä osata erottaa ne.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Faktalaatikko 2: vaikuttaako Mercator oikeasti ihmisten maailmankuvaan?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Faktalaatikko 2: vaikuttaako Mercator oikeasti ihmisten maailmankuvaan?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Kampanjan keskeinen väite on, että Mercator vääristää ihmisten mielikuvaa maailmasta. Väitteelle on empiiristä tutkimusta — ja tulos on yllättävän epäselvä.</p>
<p><strong>Battersby &amp; Montello (2009)</strong> tutkivat kahdella kokeella, kuinka tarkasti ihmiset arvioivat maailman alueiden pinta-aloja. Muistista tuotetut arviot eivät noudattaneet Mercatorin vääristymän kaavaa: napa-alueita ei arvioitu suhteettoman suuriksi sillä tavalla kuin “Mercator-efekti” ennustaisi. Arviot seurasivat pikemminkin psykofysiikan yleistä lainalaisuutta, jossa suuria määriä aliarvioidaan ja pieniä yliarvioidaan. Sen sijaan silloin, kun koehenkilöt katsoivat karttaa suoraan, he onnistuivat vain osittain korjaamaan vääristymää mielessään.</p>
<p><strong>De Boeck &amp; Ooms (2019)</strong> toistivat kokeen sukupolvella, joka on kasvanut Web Mercatoriin perustuvien verkkokarttojen kanssa, eli altistunut Mercatorille selvästi enemmän kuin alkuperäinen tutkimusjoukko.</p>
<p><strong>Vastaskenaario:</strong> jos Mercator-efekti muistiarvioissa olisi voimakas, YK:n päätöksen käytännön vaikutus olisi suuri: kartan vaihtaminen korjaisi suoraan ihmisten maailmankuvaa. Jos taas efektiä ei ole, päätöksen merkitys on enemmän symbolinen ja institutionaalinen — mikä ei tarkoita, ettei se olisi merkittävä, mutta se on eri asia.</p>
<p>Huomionarvoista: tästä kysymyksestä ei ole julkaistua meta-analyysiä. Tutkimuksia on vähän, otokset ovat pieniä ja koostuvat pääosin opiskelijoista. Tämä on rehellisyyden nimissä sanottava: <strong>väite kartan vaikutuksesta maailmankuvaan on uskottava mutta heikosti todennettu.</strong></p>
<p><em>Lähteet:</em> Battersby, S. E. &amp; Montello, D. R. (2009). Area estimation of world regions and the projection of the global-scale cognitive map. <em>Annals of the Association of American Geographers</em>, 99(2), 273–291. — De Boeck, M. &amp; Ooms, K. (2019). Evaluating young people’s area estimation of countries and continents. <em>ISPRS International Journal of Geo-Information</em>, 8(3), 125.</p>
</div>
</div>
<hr>
</section>
<section id="tulos-2-kaikki-projektiot-rinnakkain" class="level2" data-number="9">
<h2 data-number="9" class="anchored" data-anchor-id="tulos-2-kaikki-projektiot-rinnakkain"><span class="header-section-number">9</span> Tulos 2: kaikki projektiot rinnakkain</h2>
<p>Nyt varsinainen vertailu. Piirretään jokaisen projektion kaksi vääristymäjakaumaa vierekkäin.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb33" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb33-1">jarjestys <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb33-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(projektio) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb33-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">m =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(omega), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb33-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(m) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb33-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(projektio)</span>
<span id="cb33-6"></span>
<span id="cb33-7">d_plot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb33-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">projektio =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(projektio, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> jarjestys))</span>
<span id="cb33-9"></span>
<span id="cb33-10">VARIT <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pinta-alatarkka"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>,</span>
<span id="cb33-11">           <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"konforminen"</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>,</span>
<span id="cb33-12">           <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kompromissi"</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>)</span>
<span id="cb33-13"></span>
<span id="cb33-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># HUOM: osa jakaumista on degeneroituneita eli vakioita. Pinta-alatarkoilla</span></span>
<span id="cb33-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># projektioilla r_pinta_ala == 1 kaikkialla ja Mercatorilla omega == 0</span></span>
<span id="cb33-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># kaikkialla. Ydinestimointi (bw.SJ) kaatuu vakiodataan, joten slab lasketaan</span></span>
<span id="cb33-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># histogrammilla. Se on tassa myos rehellisempi esitys: piikki on aito piikki,</span></span>
<span id="cb33-18"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ei levitetty kumpare.</span></span>
<span id="cb33-19"></span>
<span id="cb33-20">p1 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(d_plot, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> r_pinta_ala, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> projektio, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> tyyppi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_halfeye</span>(</span>
<span id="cb33-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">density   =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"histogram"</span>,</span>
<span id="cb33-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.width    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>),</span>
<span id="cb33-24">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">normalize =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"groups"</span>,</span>
<span id="cb33-25">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">slab_alpha =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.85</span>,</span>
<span id="cb33-26">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">point_size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.6</span>,</span>
<span id="cb33-27">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">interval_size_range =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.2</span>)</span>
<span id="cb33-28">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-30">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(</span>
<span id="cb33-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">trans  =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"log2"</span>,</span>
<span id="cb33-32">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>),</span>
<span id="cb33-33">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0,5\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"8\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"16\u00d7"</span>)</span>
<span id="cb33-34">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-35">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coord_cartesian</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xlim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-36">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> VARIT) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-37">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Pinta-alavääristymä"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Näennäinen koko"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-38">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span>
<span id="cb33-39"></span>
<span id="cb33-40">p2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(d_plot, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> omega, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> projektio, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> tyyppi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-41">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_halfeye</span>(</span>
<span id="cb33-42">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">density   =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"histogram"</span>,</span>
<span id="cb33-43">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.width    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.9</span>),</span>
<span id="cb33-44">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">normalize =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"groups"</span>,</span>
<span id="cb33-45">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">slab_alpha =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.85</span>,</span>
<span id="cb33-46">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">point_size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.6</span>,</span>
<span id="cb33-47">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">interval_size_range =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.2</span>)</span>
<span id="cb33-48">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-49">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(x, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-50">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coord_cartesian</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xlim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">80</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-51">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> VARIT) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-52">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kulmavääristymä (muotojen vääristymä)"</span>,</span>
<span id="cb33-53">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suurin kulmavirhe"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-54">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span>
<span id="cb33-55"></span>
<span id="cb33-56">(p1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> p2) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-57">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot_layout</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">guides =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"collect"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb33-58">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot_annotation</span>(</span>
<span id="cb33-59">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jokainen projektio valitsee, kummasta virheestä se maksaa"</span>,</span>
<span id="cb33-60">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmalla pinta-alojen virhe, oikealla muotojen virhe. Sama piste-otos molemmissa."</span>,</span>
<span id="cb33-61">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(</span>
<span id="cb33-62">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"60 000 tasa-aluepainotettua otospistett\u00e4 maa-alueilta. "</span>,</span>
<span id="cb33-63">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Akselit on rajattu luettavuuden vuoksi; Mercatorin pinta-alah\u00e4nt\u00e4 jatkuu "</span>,</span>
<span id="cb33-64">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(vaaristymat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_pinta_ala[vaaristymat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>]),</span>
<span id="cb33-65">              <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7 asti."</span></span>
<span id="cb33-66">    )</span>
<span id="cb33-67">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span></span>
<span id="cb33-68">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-vertailu" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-vertailu-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-vertailu-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-vertailu-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;3: Kaikkien vertailtujen projektioiden vääristymäjakaumat maa-alueilla.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Jokaista projektiota kohti on piirretty kaksi “vuorenharjannetta”. Harjanteen korkeus kertoo, kuinka tavallinen kyseinen arvo on: leveä ja matala harjanne tarkoittaa, että vääristymä vaihtelee paljon paikasta toiseen, kapea ja korkea harjanne tarkoittaa, että vääristymä on lähes sama kaikkialla. Harjanteen alla oleva paksu jana kattaa keskimmäiset 50 % maa-alueesta ja ohut jana keskimmäiset 90 %. Vasemmalla puolella kaikki vihreät harjanteet ovat kapeita piikkejä kohdassa 1× — se on pinta-alatarkkuuden määritelmä. Oikealla puolella juuri nuo samat vihreät ovat leveitä: hinta maksetaan muodoissa.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb34" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb34-1">yhteenveto <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb34-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(projektio, tyyppi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb34-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb34-4">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pa_med   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(r_pinta_ala),</span>
<span id="cb34-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pa_p95   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(r_pinta_ala, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb34-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pa_haj   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(r_pinta_ala, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(r_pinta_ala, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>),</span>
<span id="cb34-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">om_med   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(omega),</span>
<span id="cb34-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">om_p95   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(omega, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb34-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">om_max   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(omega),</span>
<span id="cb34-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups  =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb34-11">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb34-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(om_med)</span>
<span id="cb34-13"></span>
<span id="cb34-14">yhteenveto <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb34-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb34-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Projektio =</span> projektio,</span>
<span id="cb34-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Tyyppi    =</span> tyyppi,</span>
<span id="cb34-18">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Pinta-ala, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(pa_med, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb34-19">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Pinta-ala, 95 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(pa_p95, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb34-20">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Ylin/alin -suhde</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(pa_haj, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb34-21">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(om_med, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>),</span>
<span id="cb34-22">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, 95 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(om_p95, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)</span>
<span id="cb34-23">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb34-24">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Projektioiden vertailu maa-alueiden yli"</span>)</span></code></pre></div></div>
</details>
<div id="tbl-yhteenveto" class="cell quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-tbl figure">
<figcaption class="quarto-float-caption-top quarto-float-caption quarto-float-tbl" id="tbl-yhteenveto-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Table&nbsp;2: Projektioiden vertailu maa-alueiden yli
</figcaption>
<div aria-describedby="tbl-yhteenveto-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<div class="cell-output-display">
<table class="cell caption-top table table-sm table-striped small">
<colgroup>
<col style="width: 11%">
<col style="width: 13%">
<col style="width: 16%">
<col style="width: 13%">
<col style="width: 14%">
<col style="width: 17%">
<col style="width: 14%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Projektio</th>
<th style="text-align: left;">Tyyppi</th>
<th style="text-align: left;">Pinta-ala, mediaani</th>
<th style="text-align: left;">Pinta-ala, 95 %</th>
<th style="text-align: left;">Ylin/alin -suhde</th>
<th style="text-align: left;">Kulmavirhe, mediaani</th>
<th style="text-align: left;">Kulmavirhe, 95 %</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Mercator</td>
<td style="text-align: left;">konforminen</td>
<td style="text-align: left;">0.76×</td>
<td style="text-align: left;">3.85×</td>
<td style="text-align: left;">6.8×</td>
<td style="text-align: left;">0.0°</td>
<td style="text-align: left;">0.0°</td>
</tr>
<tr class="even">
<td style="text-align: left;">Plate carree</td>
<td style="text-align: left;">kompromissi</td>
<td style="text-align: left;">0.87×</td>
<td style="text-align: left;">1.96×</td>
<td style="text-align: left;">2.6×</td>
<td style="text-align: left;">8.5°</td>
<td style="text-align: left;">52.9°</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Robinson</td>
<td style="text-align: left;">kompromissi</td>
<td style="text-align: left;">0.94×</td>
<td style="text-align: left;">1.40×</td>
<td style="text-align: left;">1.7×</td>
<td style="text-align: left;">12.0°</td>
<td style="text-align: left;">54.3°</td>
</tr>
<tr class="even">
<td style="text-align: left;">Natural Earth</td>
<td style="text-align: left;">kompromissi</td>
<td style="text-align: left;">0.94×</td>
<td style="text-align: left;">1.45×</td>
<td style="text-align: left;">1.7×</td>
<td style="text-align: left;">12.2°</td>
<td style="text-align: left;">49.9°</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Winkel Tripel</td>
<td style="text-align: left;">kompromissi</td>
<td style="text-align: left;">0.94×</td>
<td style="text-align: left;">1.48×</td>
<td style="text-align: left;">1.8×</td>
<td style="text-align: left;">13.8°</td>
<td style="text-align: left;">48.8°</td>
</tr>
<tr class="even">
<td style="text-align: left;">Equal Earth</td>
<td style="text-align: left;">pinta-alatarkka</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.0×</td>
<td style="text-align: left;">18.4°</td>
<td style="text-align: left;">63.2°</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Eckert IV</td>
<td style="text-align: left;">pinta-alatarkka</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.0×</td>
<td style="text-align: left;">19.2°</td>
<td style="text-align: left;">65.1°</td>
</tr>
<tr class="even">
<td style="text-align: left;">Mollweide</td>
<td style="text-align: left;">pinta-alatarkka</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.0×</td>
<td style="text-align: left;">21.8°</td>
<td style="text-align: left;">78.0°</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Gall-Peters</td>
<td style="text-align: left;">pinta-alatarkka</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.00×</td>
<td style="text-align: left;">1.0×</td>
<td style="text-align: left;">30.6°</td>
<td style="text-align: left;">66.0°</td>
</tr>
</tbody>
</table>
</div>
</div>
</figure>
</div>
</div>
<p>Taulukko kertoo tarinan tiiviisti. Mercator on ainoa, jonka kulmavirhe on nolla kaikkialla — se on <strong>täsmälleen</strong> konforminen. Hinta näkyy vasemmassa sarakkeessa: ylin/alin -suhde on kymmeniä. Pinta-alatarkat projektiot ovat peilikuva: pinta-alasarake on täsmälleen 1,00× kaikkialla, mutta kulmasarake kasvaa. Kompromissiprojektiot asettuvat väliin molemmissa.</p>
<hr>
</section>
<section id="mistä-equal-earth-luopuu" class="level2" data-number="10">
<h2 data-number="10" class="anchored" data-anchor-id="mistä-equal-earth-luopuu"><span class="header-section-number">10</span> Mistä Equal Earth luopuu</h2>
<p>Nyt päästään postauksen otsikkokysymykseen. Equal Earth on pinta-alatarkka, joten sen pinta-alavirhe on nolla. Mistä se maksaa sen?</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb35" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb35-1">hila_eqe <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(hila, PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>]])</span>
<span id="cb35-2"></span>
<span id="cb35-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb35-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_tile</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> hila_eqe, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> lon, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> lat, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> omega),</span>
<span id="cb35-5">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">width =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">height =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb35-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_sf</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> rajat_sf, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey15"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.12</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb35-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_gradientn</span>(</span>
<span id="cb35-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colours =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f7f2e8"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#7a1020"</span>),</span>
<span id="cb35-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values  =</span> scales<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rescale</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">35</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">70</span>)),</span>
<span id="cb35-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kulmavirhe"</span>,</span>
<span id="cb35-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels  =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(x, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)</span>
<span id="cb35-12">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb35-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coord_sf</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xlim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ylim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">85</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">85</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">expand =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">crs =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4326</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb35-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb35-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earthin hinta: muodot vääristyvät reunoilla ja navoilla"</span>,</span>
<span id="cb35-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vaalea = muodot lähes oikein, tumma = muodot pahasti vääristyneet"</span>,</span>
<span id="cb35-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span></span>
<span id="cb35-18">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb35-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-eqearth-kartta" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-eqearth-kartta-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-eqearth-kartta-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-eqearth-kartta-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;4: Equal Earthin kulmavääristymä eli muotojen vääristymä maapallon yli.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä karttaa luetaan.</strong> Vaaleat alueet ovat niitä, joissa Equal Earth piirtää muodot melkein oikein. Tummat alueet ovat niitä, joissa muodot venyvät tai litistyvät pahasti. Huomaa kuvion muoto: se ei enää riipu pelkästä leveyspiiristä kuten Mercatorilla, vaan myös siitä, kuinka kaukana ollaan kartan keskimeridiaanista (nollameridiaani, joka kulkee Greenwichin läpi). Kartan oikea ja vasen reuna ovat huonompia kuin keskikaista. Tähän palataan vastaskenaarioissa, koska se tarkoittaa että <strong>kartan keskikohdan valinta on poliittinen päätös, jolla on mitattava seuraus.</strong></p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb36" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb36-1">eqe <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>)</span>
<span id="cb36-2"></span>
<span id="cb36-3">pahin <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> eqe <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb36-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(manner) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb36-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb36-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(omega),</span>
<span id="cb36-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p90      =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(omega, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.90</span>),</span>
<span id="cb36-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus_yli_20 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(omega <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>),</span>
<span id="cb36-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb36-10">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb36-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(mediaani))</span>
<span id="cb36-12"></span>
<span id="cb36-13">pahin <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb36-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb36-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Manner =</span> manner,</span>
<span id="cb36-16">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(mediaani, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>),</span>
<span id="cb36-17">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, 90 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(p90, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>),</span>
<span id="cb36-18">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Osuus, jossa yli 20°</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(osuus_yli_20, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb36-19">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb36-20">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earthin muotovirhe mantereittain"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Equal Earthin muotovirhe mantereittain</caption>
<colgroup>
<col style="width: 13%">
<col style="width: 30%">
<col style="width: 25%">
<col style="width: 30%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Manner</th>
<th style="text-align: left;">Kulmavirhe, mediaani</th>
<th style="text-align: left;">Kulmavirhe, 90 %</th>
<th style="text-align: left;">Osuus, jossa yli 20°</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Eurooppa</td>
<td style="text-align: left;">40.8°</td>
<td style="text-align: left;">66.8°</td>
<td style="text-align: left;">77.8%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Oseania</td>
<td style="text-align: left;">25.3°</td>
<td style="text-align: left;">33.3°</td>
<td style="text-align: left;">90.9%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Amerikat</td>
<td style="text-align: left;">21.9°</td>
<td style="text-align: left;">60.4°</td>
<td style="text-align: left;">54.7%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Aasia</td>
<td style="text-align: left;">18.9°</td>
<td style="text-align: left;">31.1°</td>
<td style="text-align: left;">44.0%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Afrikka</td>
<td style="text-align: left;">15.1°</td>
<td style="text-align: left;">16.9°</td>
<td style="text-align: left;">0.0%</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Tässä on tulos, joka ei ole ollut esillä uutisoinnissa: <strong>Equal Earthin muotovirhe on suurin juuri niillä alueilla, joita kampanja halusi kohdella oikeudenmukaisemmin.</strong> Pinta-ala tulee oikein, mutta muodot vääristyvät merkittävästi kartan reunoilla ja korkeilla leveyspiireillä. Tämä ei ole argumentti Equal Earthia vastaan — se on Theorema Egregium toiminnassa. Jokin on pakko uhrata. Mutta rehellinen keskustelu edellyttää, että uhraus sanotaan ääneen.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Faktalaatikko 3: Equal Earth ja sen suunnitteluperiaate">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Faktalaatikko 3: Equal Earth ja sen suunnitteluperiaate
</div>
</div>
<div class="callout-body-container callout-body">
<p>Equal Earth julkaistiin vuonna 2018. Sen tekivät slovenialainen geodeetti <strong>Bojan Šavrič</strong>, yhdysvaltalainen kartografi <strong>Tom Patterson</strong> ja sveitsiläinen kartografian tutkija <strong>Bernhard Jenny</strong>.</p>
<p>Projektio on <strong>pseudosylinterinen</strong> ja <strong>pinta-alatarkka</strong>. Sen suunnittelun lähtökohta oli nimenomaan esteettinen ja viestinnällinen: tekijät halusivat pinta-alatarkan projektion, joka <em>näyttää</em> miellyttävältä, koska aiemmat pinta-alatarkat vaihtoehdot (etenkin Gall–Peters) koettiin laajalti rumiksi ja siksi niitä ei otettu käyttöön. Kaavat sovitettiin numeerisesti Robinsonin projektion ulkoasua muistuttaviksi, mutta pinta-alatarkkuuden ehdolla.</p>
<p><strong>Vastaskenaario:</strong> jos vuonna 2018 ei olisi julkaistu Equal Earthia, vaihtoehtoina olisivat olleet Mollweide, Eckert IV tai Gall–Peters. Tämän postauksen taulukoista näkyy, että Mollweiden ja Eckert IV:n vääristymäprofiilit ovat samaa luokkaa Equal Earthin kanssa — matemaattisesti kyse ei ole isosta harppauksesta. Equal Earthin merkittävin panos ei ole matemaattinen vaan sosiaalinen: se teki pinta-alatarkasta kartasta poliittisesti hyväksyttävän näköisen. Se on hyvä muistutus siitä, että menetelmän omaksuminen riippuu harvoin pelkästä matematiikasta.</p>
<p><em>Lähde:</em> Šavrič, B., Patterson, T. &amp; Jenny, B. (2019). The Equal Earth map projection. <em>International Journal of Geographical Information Science</em>, 33(3), 454–465.</p>
</div>
</div>
<hr>
</section>
<section id="väestöpainotus-kenen-vääristymä-oikeastaan-on-tärkeä" class="level2" data-number="11">
<h2 data-number="11" class="anchored" data-anchor-id="väestöpainotus-kenen-vääristymä-oikeastaan-on-tärkeä"><span class="header-section-number">11</span> Väestöpainotus: kenen vääristymä oikeastaan on tärkeä?</h2>
<p>Tähän asti olen painottanut <strong>maapinta-alaa</strong>. Mutta ihmiset eivät jakaudu maapinta-alan mukaan. Siperia, Sahara ja Australian sisäosat ovat valtavia ja lähes asumattomia.</p>
<p>Jos kysymys on siitä, miten kartta vaikuttaa <strong>ihmisten</strong> käsitykseen omasta maastaan, oikea painotus ei olekaan neliökilometri vaan ihminen. Lasketaan sama jakauma väestöpainotettuna.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb37" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb37-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Jokaiselle otospisteelle paino = maan vakiluku / kyseisen maan otospisteiden lkm.</span></span>
<span id="cb37-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Tama vastaa oletusta, etta vaesto jakautuu tasaisesti maan sisalla. Oletus on</span></span>
<span id="cb37-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># karkea, mutta se ei riipu mistaan projektiosta eika lisaa piilo-oletuksia</span></span>
<span id="cb37-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># muuta kuin maan sisalla, missa leveyspiirivaihtelu on useimmilla mailla pieni.</span></span>
<span id="cb37-5"></span>
<span id="cb37-6">pisteet_per_maa <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maapisteet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(ISO3_CODE, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"n_pisteita"</span>)</span>
<span id="cb37-7"></span>
<span id="cb37-8">painot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> pisteet_per_maa <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb37-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">inner_join</span>(vaesto_raaka, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ISO3_CODE"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb37-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">paino =</span> vakiluku <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> n_pisteita)</span>
<span id="cb37-11"></span>
<span id="cb37-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maita, joille saatiin sek\u00e4 otospisteit\u00e4 ett\u00e4 v\u00e4kiluku:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(painot), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Maita, joille saatiin sekä otospisteitä että väkiluku: 179 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb39" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb39-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Katettu v\u00e4est\u00f6:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(painot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vakiluku), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Katettu väestö: 8 095 006 408 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb41" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb41-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(painot) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">150</span>)</span>
<span id="cb41-2"></span>
<span id="cb41-3">vaaristymat_p <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb41-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">inner_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(painot, ISO3_CODE, paino), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ISO3_CODE"</span>)</span>
<span id="cb41-5"></span>
<span id="cb41-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Painotettu kvantiilifunktio (ei lisariippuvuuksia)</span></span>
<span id="cb41-7">painotettu_kvantiili <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x, w, p) {</span>
<span id="cb41-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(w), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(w <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(x)))</span>
<span id="cb41-9">  jarj <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">order</span>(x)</span>
<span id="cb41-10">  x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> x[jarj]; w <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> w[jarj]</span>
<span id="cb41-11">  kumul <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cumsum</span>(w) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(w)</span>
<span id="cb41-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">vapply</span>(p, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(pp) x[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.max</span>(kumul <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> pp)], <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">numeric</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb41-13">}</span>
<span id="cb41-14"></span>
<span id="cb41-15">vertailu_painotus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat_p <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb41-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb41-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb41-18">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Maapinta-ala, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(r_pinta_ala),</span>
<span id="cb41-19">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Väestöpainotettu, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">painotettu_kvantiili</span>(r_pinta_ala, paino, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>),</span>
<span id="cb41-20">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Maapinta-ala, 90 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>       <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(r_pinta_ala, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.90</span>),</span>
<span id="cb41-21">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Väestöpainotettu, 90 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>   <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">painotettu_kvantiili</span>(r_pinta_ala, paino, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.90</span>)</span>
<span id="cb41-22">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb41-23">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">everything</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Painotus"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Arvo"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb41-24">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Arvo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(Arvo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>))</span>
<span id="cb41-25"></span>
<span id="cb41-26">knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(vertailu_painotus,</span>
<span id="cb41-27">             <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin vääristymä riippuu ratkaisevasti siitä, mitä painotetaan"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Mercatorin vääristymä riippuu ratkaisevasti siitä, mitä painotetaan</caption>
<thead>
<tr class="header">
<th style="text-align: left;">Painotus</th>
<th style="text-align: left;">Arvo</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Maapinta-ala, mediaani</td>
<td style="text-align: left;">0.77×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Väestöpainotettu, mediaani</td>
<td style="text-align: left;">0.70×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Maapinta-ala, 90 %</td>
<td style="text-align: left;">2.69×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Väestöpainotettu, 90 %</td>
<td style="text-align: left;">1.18×</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb42" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb42-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Vertailukohta: tasainen otanta koko maapallon pinnalta, meret mukaan lukien.</span></span>
<span id="cb42-2">pallo_otos <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cbind</span>(</span>
<span id="cb42-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">60000</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">179.9</span>),</span>
<span id="cb42-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">60000</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi</span>
<span id="cb42-5">)</span>
<span id="cb42-6">pallo_otos <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> pallo_otos[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(pallo_otos[, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lat"</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">89.5</span>, , drop <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>]</span>
<span id="cb42-7"></span>
<span id="cb42-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Normalisoidaan samalla vakiolla kuin maa-alueet, jotta kaikki kolme kayraa</span></span>
<span id="cb42-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ovat samalla asteikolla ja keskenaan vertailukelpoisia.</span></span>
<span id="cb42-10">G_MERC <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>pinta_ala)))</span>
<span id="cb42-11"></span>
<span id="cb42-12">pallo_v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(pallo_otos, PROJEKTIOT[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb42-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r =</span> pinta_ala <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> G_MERC)</span>
<span id="cb42-14"></span>
<span id="cb42-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Painotettu kertymafunktio. Aloituspiste F = 0 lisataan, jotta askelkuvaaja</span></span>
<span id="cb42-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># lahtee nollasta eika ensimmaisen havainnon korkeudelta.</span></span>
<span id="cb42-17">ecdf_painotettu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">w =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rep</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x)), nimi) {</span>
<span id="cb42-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(w), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(x)), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(w <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb42-19">  jarj <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">order</span>(x)</span>
<span id="cb42-20">  x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> x[jarj]; w <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> w[jarj]</span>
<span id="cb42-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb42-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arvo     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(x[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], x),</span>
<span id="cb42-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">F        =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cumsum</span>(w) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(w)),</span>
<span id="cb42-24">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">painotus =</span> nimi</span>
<span id="cb42-25">  )</span>
<span id="cb42-26">}</span>
<span id="cb42-27"></span>
<span id="cb42-28">mercp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat_p <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>)</span>
<span id="cb42-29"></span>
<span id="cb42-30">kaikki_ecdf <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_rows</span>(</span>
<span id="cb42-31">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ecdf_painotettu</span>(pallo_v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r,             <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koko maapallon pinta"</span>),</span>
<span id="cb42-32">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ecdf_painotettu</span>(merc<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_pinta_ala,      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maa-alueet"</span>),</span>
<span id="cb42-33">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ecdf_painotettu</span>(mercp<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r_pinta_ala, mercp<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>paino, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ihmiset"</span>)</span>
<span id="cb42-34">) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb42-35">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">painotus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(painotus,</span>
<span id="cb42-36">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koko maapallon pinta"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maa-alueet"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ihmiset"</span>)))</span>
<span id="cb42-37"></span>
<span id="cb42-38"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb42-39">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(</span>
<span id="cb42-40">    kaikki_ecdf <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(painotus) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">m =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(F)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(m) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb42-41">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-9</span>)</span>
<span id="cb42-42">)</span>
<span id="cb42-43"></span>
<span id="cb42-44"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(kaikki_ecdf, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> arvo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> F, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> painotus)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-45">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_step</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-46">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey50"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dotted"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-47">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(</span>
<span id="cb42-48">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">trans  =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"log2"</span>,</span>
<span id="cb42-49">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">32</span>),</span>
<span id="cb42-50">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0,5\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"4\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"8\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"16\u00d7"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"32\u00d7"</span>)</span>
<span id="cb42-51">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-52">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> percent, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">limits =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-53">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rajaus tehdaan coord_cartesianilla, EI scale_x:n limits-argumentilla:</span></span>
<span id="cb42-54">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># limits pudottaisi havainnot pois datasta, jolloin kertymakayra ei enaa</span></span>
<span id="cb42-55">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># yltaisi sataan prosenttiin. coord_cartesian vain zoomaa.</span></span>
<span id="cb42-56">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coord_cartesian</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xlim =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-57">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_colour_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koko maapallon pinta"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>,</span>
<span id="cb42-58">                                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maa-alueet"</span>           <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb42-59">                                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ihmiset"</span>              <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-60">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb42-61">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kenen näkökulmasta Mercator on paha?"</span>,</span>
<span id="cb42-62">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kertymäfunktio: käyrä kertoo, kuinka suuri osuus jää kunkin vääristymäarvon alle"</span>,</span>
<span id="cb42-63">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Näennäinen koko Mercatorin kartalla"</span>,</span>
<span id="cb42-64">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kertymäosuus"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Painotus"</span>,</span>
<span id="cb42-65">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Väestöpainotus: Maailmanpankki SP.POP.TOTL. Vaaka-akseli on rajattu, ei suodatettu."</span></span>
<span id="cb42-66">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb42-67">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-painotus" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-painotus-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-painotus-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-painotus-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;5: Sama projektio, kolme eri painotusta, kolme eri vastausta.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Jokainen käyrä nousee vasemmalta oikealle nollasta sataan prosenttiin. Kun valitset vaaka-akselilta jonkin arvon, käyrän korkeus siinä kohdassa kertoo, kuinka suuri osuus jää sen arvon <em>alle</em>. Esimerkiksi jos vihreä käyrä on 2× kohdalla korkeudella 80 %, se tarkoittaa: 80 % maailman ihmisistä asuu alueella, joka näyttää Mercatorin kartalla vähemmän kuin kaksinkertaiselta. Mitä enemmän käyrä on <strong>vasemmalla</strong>, sitä pienempiä vääristymiä kyseinen painotus tuottaa.</p>
<p>Tulos on kirkas ja se on tämän postauksen kiinnostavin yksittäinen havainto: <strong>väestöpainotettuna Mercator on paljon vähemmän paha kuin pinta-alapainotettuna.</strong> Syy on yksinkertainen: valtaosa maailman ihmisistä asuu suhteellisen matalilla leveyspiireillä, missä Mercatorin vääristymä on maltillinen. Pahimmat liioittelut kohdistuvat Grönlantiin, Pohjois-Kanadaan, Siperiaan, Huippuvuorille ja Antarktikselle — alueille, joilla asuu hyvin vähän ihmisiä.</p>
<p>Tämä ei kumoa kampanjan pointtia. Se tarkentaa sitä: Mercatorin ongelma ei ole ensisijaisesti se, että se vääristäisi <em>asuttujen</em> alueiden keskinäisiä suhteita rajusti. Ongelma on se, että se antaa <em>muutamalle harvaan asutulle pohjoiselle alueelle</em> suhteettoman suuren visuaalisen painoarvon — ja nämä alueet sattuvat olemaan pohjoisen pallonpuoliskon vauraiden valtioiden alueita. Se on eri väite kuin “Afrikka näyttää liian pieneltä”, ja itse asiassa vahvempi väite, koska se kestää tarkastelun.</p>
<hr>
</section>
<section id="tilastolliset-testit-eroavatko-mantereet-toisistaan" class="level2" data-number="12">
<h2 data-number="12" class="anchored" data-anchor-id="tilastolliset-testit-eroavatko-mantereet-toisistaan"><span class="header-section-number">12</span> Tilastolliset testit: eroavatko mantereet toisistaan?</h2>
<p>Tehdään nyt asianmukainen tilastollinen vertailu. Ensin on kuitenkin välttämätöntä puhua siitä, mitä testi tässä tilanteessa oikeastaan tarkoittaa.</p>
<div class="callout callout-style-default callout-warning callout-titled" title="Faktalaatikko 4: milloin p-arvo on hyödytön">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Warning</span>Faktalaatikko 4: milloin p-arvo on hyödytön
</div>
</div>
<div class="callout-body-container callout-body">
<p>Karttaprojektion vääristymä on <strong>deterministinen</strong>. Jokaisessa maapallon pisteessä sillä on täsmälleen yksi oikea arvo, joka voidaan laskea kaavasta. Siinä ei ole satunnaisuutta.</p>
<p>Ainoa satunnaisuus tässä analyysissä tulee siitä, että olen <strong>arponut</strong> 60 000 pistettä sen sijaan että olisin laskenut integraalin analyyttisesti. Tilastollinen testi vastaa siis kysymykseen: <em>“onko havaittu ero suurempi kuin oman otantani kohina?”</em> Koska otos on suuri ja ero on iso, vastaus on triviaalisti kyllä. <strong>P-arvo lähestyy nollaa riippumatta siitä, onko ero käytännössä merkityksellinen.</strong></p>
<p>Tämä on täsmälleen sama ongelma, joka vaivaa yritysten A/B-testejä ja rekisteritutkimuksia: kun n on satojatuhansia, kaikki on “tilastollisesti merkitsevää”. Siksi raportoin p-arvon rinnalla aina <strong>efektikoon</strong> — luvun, joka kertoo <em>kuinka suuri</em> ero on, ei vain onko sitä.</p>
<p>Toinen tekninen ongelma: otospisteet eivät ole riippumattomia. Kaksi vierekkäistä pistettä Grönlannissa kertovat lähes saman asian. Tämä on <strong>spatiaalista autokorrelaatiota</strong>, ja se tekee nimellisistä p-arvoista liian pieniä. Korjaan tämän kahdella tavalla: klusteroidulla bootstrapilla (maa klusterina) ja hierarkkisella bayesilaisella mallilla.</p>
<p><strong>Vastaskenaario:</strong> jos otospisteet olisivat aidosti riippumattomia havaintoja jostakin satunnaisilmiöstä, tavallinen Wilcoxonin testi olisi oikea työkalu ja sen p-arvo tulkittavissa suoraan. Näin ei ole, ja siksi raportoin kolme eri lähestymistapaa: lukija näkee itse, kuinka paljon johtopäätös riippuu menetelmävalinnasta.</p>
</div>
</div>
<section id="testi-1-mantereiden-väliset-erot-kruskalwallis" class="level3" data-number="12.1">
<h3 data-number="12.1" class="anchored" data-anchor-id="testi-1-mantereiden-väliset-erot-kruskalwallis"><span class="header-section-number">12.1</span> Testi 1: mantereiden väliset erot (Kruskal–Wallis)</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb43" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb43-1">merc_test <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb43-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb43-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(log2_r, manner, ISO3_CODE)</span>
<span id="cb43-4"></span>
<span id="cb43-5">kw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kruskal.test</span>(log2_r <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> manner, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> merc_test)</span>
<span id="cb43-6"></span>
<span id="cb43-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Efektikoko: epsilon-neliö = (H - k + 1) / (n - k)</span></span>
<span id="cb43-8">n_kaikki <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(merc_test)</span>
<span id="cb43-9">k_ryhmat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner)</span>
<span id="cb43-10">eps2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>((kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> k_ryhmat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (n_kaikki <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> k_ryhmat))</span>
<span id="cb43-11"></span>
<span id="cb43-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kruskal-Wallis H ="</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb43-13">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| df ="</span>, kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>parameter,</span>
<span id="cb43-14">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| p ="</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format.pval</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">eps =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-300</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Kruskal-Wallis H = 25251.8 | df = 4 | p = &lt;1e-300 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb45" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb45-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Efektikoko epsilon^2 ="</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(eps2, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Efektikoko epsilon^2 = 0.421 </code></pre>
</div>
</div>
<p><strong>Miten tämä tulkitaan.</strong> Kruskal–Wallisin testi on ei-parametrinen varianssianalyysi: se vertaa ryhmien <strong>järjestyslukuja</strong>, ei keskiarvoja. Valitsin sen kahdesta syystä. Ensinnäkin vääristymäjakauma on voimakkaasti vino ja pitkä häntäinen, jolloin normaalijakaumaoletukseen nojaava varianssianalyysi ei ole perusteltu. Toiseksi vertailen mediaaneja, jotka ovat tässä kiinnostavampia kuin keskiarvot: keskiarvoa hallitsisi muutama Grönlannin pohjoiskärjen piste.</p>
<p>Efektikoko <img src="https://latex.codecogs.com/png.latex?%5Cvarepsilon%5E2"> on asteikolla 0–1 ja kertoo, kuinka suuri osuus järjestyslukujen vaihtelusta selittyy mantereella. P-arvo on olematon, kuten edellä ennakoitiin — efektikoko on se, jota kannattaa katsoa.</p>
</section>
<section id="testi-2-pareittaiset-vertailut-efektikokoineen" class="level3" data-number="12.2">
<h3 data-number="12.2" class="anchored" data-anchor-id="testi-2-pareittaiset-vertailut-efektikokoineen"><span class="header-section-number">12.2</span> Testi 2: pareittaiset vertailut efektikokoineen</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb47" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb47-1">mantereet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sort</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner))</span>
<span id="cb47-2">parit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">combn</span>(mantereet, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">simplify =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb47-3"></span>
<span id="cb47-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rank-biserial -korrelaatio Wilcoxonin U:sta.</span></span>
<span id="cb47-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># HUOM: kokonaisluvun ylivuoto on todellinen riski kun n1*n2 &gt; 2^31,</span></span>
<span id="cb47-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># siksi as.numeric() ennen kertolaskua.</span></span>
<span id="cb47-7">rank_biserial <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x, y) {</span>
<span id="cb47-8">  w <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">wilcox.test</span>(x, y, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">exact =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">correct =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb47-9">  U <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(w<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic)</span>
<span id="cb47-10">  n1 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x)); n2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(y))</span>
<span id="cb47-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> w<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">r =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> U <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (n1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> n2) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb47-12">}</span>
<span id="cb47-13"></span>
<span id="cb47-14">tulokset_parit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(parit, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(pp) {</span>
<span id="cb47-15">  x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>log2_r[merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> pp[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]]</span>
<span id="cb47-16">  y <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>log2_r[merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> pp[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]]</span>
<span id="cb47-17">  rb <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rank_biserial</span>(x, y)</span>
<span id="cb47-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb47-19">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ryhma1 =</span> pp[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ryhma2 =</span> pp[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>],</span>
<span id="cb47-20">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani1 =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(x), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani2 =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(y),</span>
<span id="cb47-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p_raaka =</span> rb<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">rank_biserial =</span> rb<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>r</span>
<span id="cb47-22">  )</span>
<span id="cb47-23">}) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb47-24">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p_bh =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">p.adjust</span>(p_raaka, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">method =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"BH"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb47-25">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(rank_biserial)))</span>
<span id="cb47-26"></span>
<span id="cb47-27">tulokset_parit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb47-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb47-29">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Vertailu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(ryhma1, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vs."</span>, ryhma2),</span>
<span id="cb47-30">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Mediaani 1</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(mediaani1, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb47-31">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Mediaani 2</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(mediaani2, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb47-32">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Rank-biserial</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(rank_biserial, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>),</span>
<span id="cb47-33">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p (BH-korjattu)</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format.pval</span>(p_bh, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">eps =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-300</span>)</span>
<span id="cb47-34">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb47-35">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin vääristymän erot mantereiden välillä"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Mercatorin vääristymän erot mantereiden välillä</caption>
<colgroup>
<col style="width: 29%">
<col style="width: 14%">
<col style="width: 14%">
<col style="width: 18%">
<col style="width: 21%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Vertailu</th>
<th style="text-align: left;">Mediaani 1</th>
<th style="text-align: left;">Mediaani 2</th>
<th style="text-align: left;">Rank-biserial</th>
<th style="text-align: left;">p (BH-korjattu)</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Afrikka vs.&nbsp;Eurooppa</td>
<td style="text-align: left;">0.61×</td>
<td style="text-align: left;">2.03×</td>
<td style="text-align: left;">-0.99</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="even">
<td style="text-align: left;">Eurooppa vs.&nbsp;Oseania</td>
<td style="text-align: left;">2.03×</td>
<td style="text-align: left;">0.69×</td>
<td style="text-align: left;">0.99</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Aasia vs.&nbsp;Eurooppa</td>
<td style="text-align: left;">0.79×</td>
<td style="text-align: left;">2.03×</td>
<td style="text-align: left;">-0.94</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="even">
<td style="text-align: left;">Aasia vs.&nbsp;Afrikka</td>
<td style="text-align: left;">0.79×</td>
<td style="text-align: left;">0.61×</td>
<td style="text-align: left;">0.65</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Amerikat vs.&nbsp;Eurooppa</td>
<td style="text-align: left;">0.86×</td>
<td style="text-align: left;">2.03×</td>
<td style="text-align: left;">-0.58</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="even">
<td style="text-align: left;">Afrikka vs.&nbsp;Oseania</td>
<td style="text-align: left;">0.61×</td>
<td style="text-align: left;">0.69×</td>
<td style="text-align: left;">-0.52</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Afrikka vs.&nbsp;Amerikat</td>
<td style="text-align: left;">0.61×</td>
<td style="text-align: left;">0.86×</td>
<td style="text-align: left;">-0.50</td>
<td style="text-align: left;">&lt; 1e-300</td>
</tr>
<tr class="even">
<td style="text-align: left;">Aasia vs.&nbsp;Oseania</td>
<td style="text-align: left;">0.79×</td>
<td style="text-align: left;">0.69×</td>
<td style="text-align: left;">0.35</td>
<td style="text-align: left;">8.6e-248</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Amerikat vs.&nbsp;Oseania</td>
<td style="text-align: left;">0.86×</td>
<td style="text-align: left;">0.69×</td>
<td style="text-align: left;">0.27</td>
<td style="text-align: left;">1.5e-156</td>
</tr>
<tr class="even">
<td style="text-align: left;">Aasia vs.&nbsp;Amerikat</td>
<td style="text-align: left;">0.79×</td>
<td style="text-align: left;">0.86×</td>
<td style="text-align: left;">-0.11</td>
<td style="text-align: left;">2.2e-70</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><strong>Rank-biserial -korrelaatio</strong> on efektikoko, joka kertoo suoraan: jos poimit satunnaisen pisteen ryhmästä A ja satunnaisen pisteen ryhmästä B, kuinka todennäköisesti A:n vääristymä on suurempi? Arvo 0 tarkoittaa täyttä sattumanvaraisuutta (50–50), arvo 1 tarkoittaa että A on aina suurempi ja −1 että B on aina suurempi. Toisin kuin p-arvo, se ei riipu otoskoosta.</p>
</section>
<section id="testi-3-klusteroitu-bootstrap" class="level3" data-number="12.3">
<h3 data-number="12.3" class="anchored" data-anchor-id="testi-3-klusteroitu-bootstrap"><span class="header-section-number">12.3</span> Testi 3: klusteroitu bootstrap</h3>
<p>Edellä olevat p-arvot ovat harhaisia spatiaalisen autokorrelaation vuoksi. Korjaan sen bootstrapilla, jossa uudelleenotanta tehdään <strong>maiden tasolla</strong>, ei pisteiden tasolla. Tämä vastaa kysymykseen: <em>kuinka paljon tulos muuttuisi, jos maailmassa olisi hieman eri joukko maita?</em></p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb48" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb48-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4711</span>)</span>
<span id="cb48-2">B <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span>
<span id="cb48-3"></span>
<span id="cb48-4">maalista    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">split</span>(merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>log2_r, merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE)</span>
<span id="cb48-5">maan_manner <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> merc_test <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(ISO3_CODE, manner)</span>
<span id="cb48-6"></span>
<span id="cb48-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(maan_manner<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(maalista)))</span>
<span id="cb48-8"></span>
<span id="cb48-9">boot_mediaanit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq_len</span>(B), <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(i) {</span>
<span id="cb48-10">  otos_maat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maan_manner <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-11">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(manner) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-12">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_sample</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">prop =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">replace =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-13">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb48-14"></span>
<span id="cb48-15">  arvot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map2</span>(otos_maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE, otos_maat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>manner,</span>
<span id="cb48-16">                <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">log2_r =</span> maalista[[.x]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">manner =</span> .y)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-17">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_rows</span>()</span>
<span id="cb48-18"></span>
<span id="cb48-19">  arvot <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-20">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(manner) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-21">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">med =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(log2_r), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-22">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">toisto =</span> i)</span>
<span id="cb48-23">})</span>
<span id="cb48-24"></span>
<span id="cb48-25">boot_ci <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> boot_mediaanit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(manner) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb48-28">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alaraja =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(med, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.025</span>),</span>
<span id="cb48-29">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">piste   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(med, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>),</span>
<span id="cb48-30">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ylaraja =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(med, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.975</span>),</span>
<span id="cb48-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb48-32">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-33">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(alaraja, piste, ylaraja), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span>.x)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-34">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(piste))</span>
<span id="cb48-35"></span>
<span id="cb48-36">boot_ci <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-37">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb48-38">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Manner =</span> manner,</span>
<span id="cb48-39">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Mediaanivääristymä</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(piste, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb48-40">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">95 % luottamusväli</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(</span>
<span id="cb48-41">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(alaraja, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u2013"</span>,</span>
<span id="cb48-42">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(ylaraja, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span></span>
<span id="cb48-43">    )</span>
<span id="cb48-44">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb48-45">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin mediaanivääristymä mantereittain, maatason bootstrap"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Mercatorin mediaanivääristymä mantereittain, maatason bootstrap</caption>
<thead>
<tr class="header">
<th style="text-align: left;">Manner</th>
<th style="text-align: left;">Mediaanivääristymä</th>
<th style="text-align: left;">95 % luottamusväli</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Eurooppa</td>
<td style="text-align: left;">2.02×</td>
<td style="text-align: left;">1.24–2.25×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Amerikat</td>
<td style="text-align: left;">0.85×</td>
<td style="text-align: left;">0.60–1.55×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Aasia</td>
<td style="text-align: left;">0.78×</td>
<td style="text-align: left;">0.67–0.91×</td>
</tr>
<tr class="even">
<td style="text-align: left;">Oseania</td>
<td style="text-align: left;">0.69×</td>
<td style="text-align: left;">0.58–0.95×</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Afrikka</td>
<td style="text-align: left;">0.61×</td>
<td style="text-align: left;">0.59–0.64×</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb49" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb49-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(boot_ci, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> piste, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">reorder</span>(manner, piste))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb49-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb49-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_errorbarh</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xmin =</span> alaraja, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xmax =</span> ylaraja), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">height =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>,</span>
<span id="cb49-4">                 <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb49-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_point</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb49-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">trans =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"log2"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>),</span>
<span id="cb49-7">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gsub</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">."</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">","</span>, x), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb49-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb49-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercatorin liioittelu mantereittain"</span>,</span>
<span id="cb49-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Piste = mediaani, jana = 95 % luottamusväli </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> (maatason bootstrap, 1000 toistoa)"</span>,</span>
<span id="cb49-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Näennäinen koko suhteessa kartan keskimääräiseen </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> maa-alueeseen"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span></span>
<span id="cb49-12">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb49-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-bootstrap" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-bootstrap-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-bootstrap-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-bootstrap-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;6: Mantereiden mediaanivääristymät ja niiden epävarmuus.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Jokaisella mantereella on yksi piste ja yksi jana. Piste on paras arvio mantereen tyypillisestä vääristymästä. Jana kertoo, kuinka epävarma tuo arvio on: jos janat eivät mene päällekkäin, ero on selvä myös epävarmuus huomioiden. Punainen katkoviiva on “oikein” -kohta. Huomaa, että janat ovat leveitä. Se johtuu siitä, että bootstrap-menetelmä arpoo maita uudelleen, ja mantereen tulos riippuu paljon siitä, mitkä maat siihen sattuvat osumaan. Tavallinen pistetason luottamusväli olisi ollut lähes olematon — ja harhaanjohtava.</p>
</section>
<section id="testi-4-hierarkkinen-bayesilainen-malli" class="level3" data-number="12.4">
<h3 data-number="12.4" class="anchored" data-anchor-id="testi-4-hierarkkinen-bayesilainen-malli"><span class="header-section-number">12.4</span> Testi 4: hierarkkinen bayesilainen malli</h3>
<p>Vielä yksi näkökulma. Bootstrap käsittelee maita vaihdettavina yksikköinä. Bayesilainen hierarkkinen malli tekee jotain hienovaraisempaa: se <strong>kutistaa</strong> pienten maiden estimaatteja kohti mantereen keskiarvoa sitä enemmän, mitä vähemmän niistä on tietoa. Tämä on juuri se ominaisuus, joka tekee bayesilaisista menetelmistä hyödyllisiä epätasapainoisissa aineistoissa — ja maailmankartta on erittäin epätasapainoinen aineisto (Venäjä vs.&nbsp;Malta).</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb50" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb50-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(brms)</span>
<span id="cb50-2"></span>
<span id="cb50-3">polku_malli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA_DIR, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"malli_manner_meta.qs"</span>)</span>
<span id="cb50-4"></span>
<span id="cb50-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># HUOM: jos mallin kaava tai aineiston rakenne muuttuu, TÄMÄ TIEDOSTO ON</span></span>
<span id="cb50-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># POISTETTAVA KÄSIN. Muuten if(!file.exists()) lataa hiljaa vanhentuneen mallin.</span></span>
<span id="cb50-7"></span>
<span id="cb50-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Maatason yhteenveto. Koska otospisteet arvottiin tasaisesti maapallon</span></span>
<span id="cb50-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># pinnalta, kunkin maan sisällä ne ovat riippumattomia poimintoja maan</span></span>
<span id="cb50-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># pinta-alalta -- keskivirhe sd/sqrt(n) on siis paikkansapitäväk.</span></span>
<span id="cb50-11">maatason <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> merc_test <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb50-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(ISO3_CODE, manner) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb50-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb50-14">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n         =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(),</span>
<span id="cb50-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keskiarvo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(log2_r),</span>
<span id="cb50-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hajonta   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sd</span>(log2_r),</span>
<span id="cb50-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups   =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb50-18">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb50-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(hajonta), hajonta <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb50-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb50-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">se     =</span> hajonta <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(n),</span>
<span id="cb50-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">manner =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(manner)</span>
<span id="cb50-23">  )</span>
<span id="cb50-24"></span>
<span id="cb50-25"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Raportoidaan mita jai pois, jotta lukija nakee rajauksen vaikutuksen.</span></span>
<span id="cb50-26"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maita mallissa:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maatason),</span>
<span id="cb50-27">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| pudonneet (alle 20 otospistetta):"</span>,</span>
<span id="cb50-28">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(merc_test<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ISO3_CODE) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maatason), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Maita mallissa: 133 | pudonneet (alle 20 otospistetta): 52 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb52" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb52-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mallissa olevien maiden osuus otospisteista:"</span>,</span>
<span id="cb52-2">    scales<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(maatason<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(merc_test), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Mallissa olevien maiden osuus otospisteista: 99.4% </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb54" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb54-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(maatason<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>se <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(maatason) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb54-2"></span>
<span id="cb54-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(polku_malli)) {</span>
<span id="cb54-4">  malli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brm</span>(</span>
<span id="cb54-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># se(): maakohtainen mittausepavarmuus on TUNNETTU, ei estimoitava.</span></span>
<span id="cb54-6">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># sigma = TRUE: sen paalle estimoidaan maiden valinen heterogeenisuus.</span></span>
<span id="cb54-7">    keskiarvo <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">se</span>(se, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sigma =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> manner,</span>
<span id="cb54-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data    =</span> maatason,</span>
<span id="cb54-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">family  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">student</span>(),          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># paksut hannat: Gronlannin kaltaiset poikkeamat</span></span>
<span id="cb54-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">prior   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb54-11">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">prior</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">normal</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">class =</span> b),</span>
<span id="cb54-12">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">prior</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exponential</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">class =</span> sigma)</span>
<span id="cb54-13">    ),</span>
<span id="cb54-14">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">chains  =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">iter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">warmup =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,</span>
<span id="cb54-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cores   =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seed =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20260909</span>,</span>
<span id="cb54-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">control =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">adapt_delta =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb54-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">refresh =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb54-18">  )</span>
<span id="cb54-19">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(malli, polku_malli)</span>
<span id="cb54-20">}</span>
<span id="cb54-21">malli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(polku_malli)</span>
<span id="cb54-22"></span>
<span id="cb54-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Konvergenssin tarkistus. Nama kolme ovat minimivaatimus ennen kuin</span></span>
<span id="cb54-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># posteriorijakaumasta saa sanoa yhtaan mitaan.</span></span>
<span id="cb54-25">diag <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> brms<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nuts_params</span>(malli)</span>
<span id="cb54-26">divergenssit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(diag<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>Value[diag<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>Parameter <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"divergent__"</span>])</span>
<span id="cb54-27">rhat_max     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(brms<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rhat</span>(malli), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb54-28">ess_min      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(brms<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">neff_ratio</span>(malli), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb54-29"></span>
<span id="cb54-30"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Divergensseja:"</span>, divergenssit,</span>
<span id="cb54-31">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| suurin R-hat:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(rhat_max, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>),</span>
<span id="cb54-32">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"| pienin ESS-suhde:"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(ess_min, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Divergensseja: 0 | suurin R-hat: 1.0007 | pienin ESS-suhde: 0.413 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb56" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb56-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(divergenssit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, rhat_max <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.01</span>, ess_min <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb56-2"></span>
<span id="cb56-3">posteriori <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> brms<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_draws_df</span>(malli) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb56-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb56-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">starts_with</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"b_manner"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb56-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">everything</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"manner"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"log2_r"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb56-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb56-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">manner  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gsub</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"^b_manner"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>, manner),</span>
<span id="cb56-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kerroin =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span>log2_r</span>
<span id="cb56-10">  )</span></code></pre></div></div>
</details>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb57" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb57-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(posteriori, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> kerroin, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">reorder</span>(manner, kerroin))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb57-2">  ggdist<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_halfeye</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.width =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.85</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb57-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb57-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">trans =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"log2"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>),</span>
<span id="cb57-5">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gsub</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">."</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">","</span>, x), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb57-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb57-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sama kysymys bayesilaisittain"</span>,</span>
<span id="cb57-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Harjanne = uskottavuusjakauma. </span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;"> Leveys kertoo epävarmuuden, sijainti kertoimen"</span>,</span>
<span id="cb57-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tyypillinen näennäinen koko Mercatorin kartalla"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>,</span>
<span id="cb57-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"brms, Student-t -jakauma, maakohtainen satunnaisvaikutus"</span></span>
<span id="cb57-11">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb57-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-posteriori" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-posteriori-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-posteriori-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-posteriori-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;7: Bayesilaisen mallin posteriorijakaumat mantereiden tyypilliselle vääristymälle.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Toisin kuin edellisessä kuvassa, tässä ei ole yksittäistä pistettä ja janaa vaan kokonainen harjanne. Harjanne on uskottavuusjakauma: sen korkeus jokaisessa kohdassa kertoo, kuinka uskottava kyseinen arvo on annetun aineiston valossa. Tämä on täsmälleen se, mitä tarkoitan sloganilla “maailma on jakauma” — vastaus ei ole luku vaan jakauma mahdollisista luvuista, ja jakauman leveys on yhtä tärkeä tieto kuin sen sijainti.</p>
<p>Vertaa tätä ja edellistä kuvaa: bootstrapin ja bayesilaisen mallin johtopäätökset ovat samansuuntaiset. Se on hyvä merkki. Kun kaksi menetelmällisesti erilaista lähestymistapaa antaa saman vastauksen, tulos ei ole menetelmävalinnan artefakti.</p>
<hr>
</section>
</section>
<section id="miksi-mercator-sitten-valittiin-suoran-kurssin-hinta" class="level2" data-number="13">
<h2 data-number="13" class="anchored" data-anchor-id="miksi-mercator-sitten-valittiin-suoran-kurssin-hinta"><span class="header-section-number">13</span> Miksi Mercator sitten valittiin? Suoran kurssin hinta</h2>
<p>Nyt siirryn siihen puoleen tarinaa, joka useimmiten jää uutisoinnista kokonaan pois. <strong>Mercator ei ollut virhe.</strong> Se oli erinomainen ratkaisu erittäin tärkeään ongelmaan, ja tuo ongelma oli navigointi.</p>
<p>Mercatorin projektiolla on yksi ainutlaatuinen ominaisuus: <strong>loksodromi eli tasakulmaviiva piirtyy suorana viivana.</strong> Loksodromi on reitti, jolla kompassin lukema pysyy koko ajan samana. Purjelaivan navigaattorille tämä oli mullistavaa: piirrä viivain kartalle lähtö- ja määräsataman välille, lue viivan kulma, aseta ruori siihen kulmaan ja pysy siinä. Ei laskutoimituksia, ei jatkuvaa kurssin korjausta, ei tähtitieteellistä osaamista.</p>
<p>Vaihtoehto on <strong>ortodromi eli isoympyräreitti</strong>, joka on lyhin mahdollinen reitti pallon pinnalla. Se on lyhyempi, mutta sen seuraaminen vaatii kompassisuunnan jatkuvaa muuttamista.</p>
<p>Kysymys kuuluu: <strong>kuinka paljon pidempi loksodromi oikeasti on?</strong> Sitä ei ole tapana kysyä, koska vastaus on jakauma.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb58" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb58-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Isoympyraetaisyys (haversine)</span></span>
<span id="cb58-2">etaisyys_ortodromi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(lon1, lat1, lon2, lat2, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">R =</span> R_MAA) {</span>
<span id="cb58-3">  rad <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span></span>
<span id="cb58-4">  dphi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (lat2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> lat1) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad</span>
<span id="cb58-5">  dlam <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (lon2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> lon1) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad</span>
<span id="cb58-6">  a <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sin</span>(dphi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(lat1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(lat2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sin</span>(dlam <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb58-7">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> R <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(a), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb58-8">}</span>
<span id="cb58-9"></span>
<span id="cb58-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Loksodromietaisyys isometrisen leveyden avulla</span></span>
<span id="cb58-11">etaisyys_loksodromi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(lon1, lat1, lon2, lat2, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">R =</span> R_MAA) {</span>
<span id="cb58-12">  rad  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span></span>
<span id="cb58-13">  phi1 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lat1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad; phi2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lat2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad</span>
<span id="cb58-14">  dphi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> phi2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> phi1</span>
<span id="cb58-15">  dlam <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> (lon2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> lon1) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> rad</span>
<span id="cb58-16">  dlam <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ((dlam <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> pi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> pi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> pi        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># lyhin suunta</span></span>
<span id="cb58-17">  dpsi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tan</span>(pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> phi2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tan</span>(pi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> phi1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))</span>
<span id="cb58-18">  q <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ifelse</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(dpsi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-12</span>, dphi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> dpsi, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cos</span>(phi1))</span>
<span id="cb58-19">  R <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(dphi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> q<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> dlam<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">^</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb58-20">}</span>
<span id="cb58-21"></span>
<span id="cb58-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Validointi: paivantasaajaa pitkin loksodromi = ortodromi</span></span>
<span id="cb58-23"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_loksodromi</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">90</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_ortodromi</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">90</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb58-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Validointi: samaa meridiaania pitkin myos yhta pitkat</span></span>
<span id="cb58-25"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_loksodromi</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_ortodromi</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb58-26"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Loksodromi ei koskaan lyhyempi</span></span>
<span id="cb58-27"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">99</span>)</span>
<span id="cb58-28">tst <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">a =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">b =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi,</span>
<span id="cb58-29">              <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">c =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">d =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi)</span>
<span id="cb58-30"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_loksodromi</span>(tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>a, tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>b, tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>c, tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>d) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span></span>
<span id="cb58-31">              <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_ortodromi</span>(tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>a, tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>b, tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>c, tst<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>d) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb58-32"></span>
<span id="cb58-33"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Loksodromifunktion validointi lapaisty.</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Loksodromifunktion validointi lapaisty.</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb60" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb60-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1569</span>)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Mercatorin kartan julkaisuvuosi</span></span>
<span id="cb60-2">N_REITTI <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200000</span></span>
<span id="cb60-3"></span>
<span id="cb60-4">reitit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb60-5">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon1 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(N_REITTI, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>),</span>
<span id="cb60-6">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat1 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(N_REITTI, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi,</span>
<span id="cb60-7">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(N_REITTI, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>),</span>
<span id="cb60-8">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">asin</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">runif</span>(N_REITTI, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pi</span>
<span id="cb60-9">) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb60-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">d_orto =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_ortodromi</span>(lon1, lat1, lon2, lat2) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,</span>
<span id="cb60-12">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">d_lokso =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">etaisyys_loksodromi</span>(lon1, lat1, lon2, lat2) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,</span>
<span id="cb60-13">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ylimaara =</span> d_lokso <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> d_orto <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb60-14">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(d_orto <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(ylimaara))</span>
<span id="cb60-16"></span>
<span id="cb60-17"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(reitit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ylimaara <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-6</span>))</span>
<span id="cb60-18"></span>
<span id="cb60-19">reitit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> reitit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pituusluokka =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cut</span>(</span>
<span id="cb60-21">    d_orto,</span>
<span id="cb60-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3000</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6000</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10000</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20100</span>),</span>
<span id="cb60-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"alle 1 000 km"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1 000\u20133 000 km"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"3 000\u20136 000 km"</span>,</span>
<span id="cb60-24">               <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"6 000\u201310 000 km"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"yli 10 000 km"</span>)</span>
<span id="cb60-25">  ))</span>
<span id="cb60-26"></span>
<span id="cb60-27">lokso_yht <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> reitit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(pituusluokka) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb60-30">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(),</span>
<span id="cb60-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(ylimaara),</span>
<span id="cb60-32">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p75 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>),</span>
<span id="cb60-33">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p95 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb60-34">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb60-35">  )</span>
<span id="cb60-36"></span>
<span id="cb60-37">lokso_yht <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-38">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb60-39">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Reitin pituus</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> pituusluokka,</span>
<span id="cb60-40">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Reittejä</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span>(n, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>),</span>
<span id="cb60-41">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Ylimääräinen matka, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(mediaani, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>),</span>
<span id="cb60-42">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">75. persentiili</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(p75, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>),</span>
<span id="cb60-43">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">95. persentiili</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(p95, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb60-44">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb60-45">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kuinka paljon pidempi suora kompassikurssi on lyhimpään reittiin verrattuna"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Kuinka paljon pidempi suora kompassikurssi on lyhimpään reittiin verrattuna</caption>
<colgroup>
<col style="width: 18%">
<col style="width: 10%">
<col style="width: 33%">
<col style="width: 18%">
<col style="width: 18%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Reitin pituus</th>
<th style="text-align: left;">Reittejä</th>
<th style="text-align: left;">Ylimääräinen matka, mediaani</th>
<th style="text-align: left;">75. persentiili</th>
<th style="text-align: left;">95. persentiili</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">alle 1 000 km</td>
<td style="text-align: left;">1 234</td>
<td style="text-align: left;">0.0%</td>
<td style="text-align: left;">0.0%</td>
<td style="text-align: left;">0.2%</td>
</tr>
<tr class="even">
<td style="text-align: left;">1 000–3 000 km</td>
<td style="text-align: left;">9 547</td>
<td style="text-align: left;">0.0%</td>
<td style="text-align: left;">0.3%</td>
<td style="text-align: left;">2.5%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">3 000–6 000 km</td>
<td style="text-align: left;">30 350</td>
<td style="text-align: left;">0.2%</td>
<td style="text-align: left;">1.3%</td>
<td style="text-align: left;">12.8%</td>
</tr>
<tr class="even">
<td style="text-align: left;">6 000–10 000 km</td>
<td style="text-align: left;">58 944</td>
<td style="text-align: left;">1.0%</td>
<td style="text-align: left;">4.9%</td>
<td style="text-align: left;">25.8%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">yli 10 000 km</td>
<td style="text-align: left;">99 916</td>
<td style="text-align: left;">3.1%</td>
<td style="text-align: left;">9.2%</td>
<td style="text-align: left;">22.8%</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb61" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb61-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Luokiteltu puolisilmakuvaaja ei toimi tassa: ylimaarainen matka on nollassa</span></span>
<span id="cb61-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># kiinni valtaosalla reitteja, jolloin tiheysestimaatista tulee nakymattoman</span></span>
<span id="cb61-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># kapea piikki. Piirretaan sen sijaan kvantiilivyohykkeet jatkuvana.</span></span>
<span id="cb61-4"></span>
<span id="cb61-5">BIN_LEVEYS <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># km</span></span>
<span id="cb61-6"></span>
<span id="cb61-7">vyohykkeet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> reitit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">bin =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">floor</span>(d_orto <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> BIN_LEVEYS) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> BIN_LEVEYS <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> BIN_LEVEYS <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(bin) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span>          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ohuet reunabinit pois</span></span>
<span id="cb61-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb61-12">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(),</span>
<span id="cb61-13">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p05 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>),</span>
<span id="cb61-14">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p25 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>),</span>
<span id="cb61-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p50 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.50</span>),</span>
<span id="cb61-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p75 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.75</span>),</span>
<span id="cb61-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p95 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(ylimaara, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb61-18">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb61-19">  )</span>
<span id="cb61-20"></span>
<span id="cb61-21"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(vyohykkeet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(vyohykkeet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p05 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb61-22"></span>
<span id="cb61-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Toinen paneeli: kuinka suuri osuus reiteista jaa alle viiden prosentin</span></span>
<span id="cb61-24"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ylimaaran. Tama on se luku, joka ratkaisi asian 1500-luvun navigaattorille.</span></span>
<span id="cb61-25">osuudet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> reitit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">bin =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">floor</span>(d_orto <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> BIN_LEVEYS) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> BIN_LEVEYS <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> BIN_LEVEYS <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(bin) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb61-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus_alle_5 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(ylimaara <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span>
<span id="cb61-30"></span>
<span id="cb61-31">pA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(vyohykkeet, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> bin)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-32">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_ribbon</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymin =</span> p05, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymax =</span> p95), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-33">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_ribbon</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymin =</span> p25, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymax =</span> p75), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.45</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-34">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> p50), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-35">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_hline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">yintercept =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>,</span>
<span id="cb61-36">             <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-37">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">annotate</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"text"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(vyohykkeet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>bin), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.052</span>,</span>
<span id="cb61-38">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">label =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"5 %"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hjust =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vjust =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.4</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-39">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span>(x, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-40">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(</span>
<span id="cb61-41">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">trans  =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sqrt"</span>,                     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># neliojuuriasteikko: pieni pää auki</span></span>
<span id="cb61-42">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.4</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6</span>),</span>
<span id="cb61-43">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent_format</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb61-44">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-45">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb61-46">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suoran kompassikurssin hinta kasvaa matkan mukana"</span>,</span>
<span id="cb61-47">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(</span>
<span id="cb61-48">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oranssi viiva = mediaani. Tumma vyöhyke = keskimmäiset 50 %, "</span>,</span>
<span id="cb61-49">      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaalea = keskimmäiset 90 %."</span></span>
<span id="cb61-50">    ),</span>
<span id="cb61-51">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ylimääräinen matka"</span></span>
<span id="cb61-52">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-53">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span>
<span id="cb61-54"></span>
<span id="cb61-55">pB <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(osuudet, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> bin, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> osuus_alle_5)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-56">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-57">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_hline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">yintercept =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey50"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dotted"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-58">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span>(x, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-59">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> percent, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">limits =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-60">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb61-61">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Reitin pituus (km)"</span>,</span>
<span id="cb61-62">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus reiteistä,</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">joilla hukka alle 5 %"</span></span>
<span id="cb61-63">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-64">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span>
<span id="cb61-65"></span>
<span id="cb61-66">(pA <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pB) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-67">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot_layout</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">heights =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb61-68">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot_annotation</span>(</span>
<span id="cb61-69">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"200 000 satunnaista reittiparia maapallon pinnalla, tasa-aluepainotettu otanta"</span></span>
<span id="cb61-70">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span></span>
<span id="cb61-71">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-loksodromi" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-loksodromi-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-loksodromi-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-loksodromi-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;8: Suoran kompassikurssin hinta reitin pituuden funktiona.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Jokainen harjanne vastaa yhtä reitinpituusluokkaa. Pystyakselilla on se, kuinka monta prosenttia pidempi suora kompassikurssi on verrattuna lyhimpään mahdolliseen reittiin. Nolla tarkoittaisi, että hukkaa ei synny lainkaan. Harjanteen leveys kertoo, kuinka paljon tulos vaihtelee reitistä toiseen: lyhyillä reiteillä lähes kaikki reitit ovat lähellä nollaa, mutta pitkillä reiteillä hajonta kasvaa rajusti.</p>
<p>Tässä on Mercatorin puolustus numeroina. Lyhyillä ja keskipitkillä reiteillä suoran kompassikurssin hinta on tyypillisesti muutamia prosentteja. 1500-luvun purjelaivalle tuo muutaman prosentin lisämatka oli <strong>täysin merkityksetön</strong> verrattuna siihen etuun, että navigointi muuttui viivaimen ja kompassin tehtäväksi. Isoympyräreitin laskeminen käsin pallotrigonometrialla oli aikansa huipputiedettä.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Faktalaatikko 5: Web Mercator ja se, miksi Mercator ei ole poistunut">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Faktalaatikko 5: Web Mercator ja se, miksi Mercator ei ole poistunut
</div>
</div>
<div class="callout-body-container callout-body">
<p>Mercatorin projektio ei elä pelkästään historiasta. Käytännössä jokainen verkkokartta — Google Maps, OpenStreetMap, Bing, useimmat mobiilisovellukset — käyttää muunnelmaa nimeltä <strong>Web Mercator</strong> (EPSG:3857). Sen leveyspiirialue katkaistaan noin ±85,05 asteeseen, koska muuten kartta olisi äärettömän korkea.</p>
<p><strong>Battersby, Finn, Usery &amp; Yamamoto (2014)</strong> analysoivat, miksi Web Mercator syrjäytti muut vaihtoehdot verkkokartoissa. Keskeiset syyt ovat teknisiä: konformisuus tarkoittaa, että kartta näyttää oikealta millä tahansa zoomaustasolla, kadut kohtaavat oikeissa kulmissa, eikä kuvaa tarvitse laskea uudelleen kun käyttäjä zoomaa. Lisäksi projektio on laskennallisesti erittäin kevyt, mikä 2000-luvun alun palvelinkapasiteetilla oli ratkaisevaa.</p>
<p><strong>Vastaskenaario:</strong> jos verkkokartat käyttäisivät Equal Earthia, katujen kulmat piirtyisivät väärin ja korttelit vinoutuisivat sitä enemmän, mitä kauempana päiväntasaajasta ollaan. Suomessa, jossa vääristymä olisi merkittävä, kaupunkinavigointi kärsisi konkreettisesti. YK:n suositus koskeekin maailmankarttoja — ei paikallista navigointia. Tätä eroa ei uutisoinnissa juuri tehdä, ja se on eron ymmärtämisen kannalta olennainen.</p>
<p><em>Lähde:</em> Battersby, S. E., Finn, M. P., Usery, E. L. &amp; Yamamoto, K. H. (2014). Implications of web Mercator and its use in online mapping. <em>Cartographica</em>, 49(2), 85–101.</p>
</div>
</div>
<hr>
</section>
<section id="vastaskenaariot-mitä-olisi-voinut-olla-toisin" class="level2" data-number="14">
<h2 data-number="14" class="anchored" data-anchor-id="vastaskenaariot-mitä-olisi-voinut-olla-toisin"><span class="header-section-number">14</span> Vastaskenaariot: mitä olisi voinut olla toisin</h2>
<p>Nyt tehdään se, mitä tässä blogissa aina tehdään: kysytään, mitä olisi tapahtunut toisenlaisilla valinnoilla. Vastaskenaario on paras tapa tehdä valinnan hinta näkyväksi, koska se pakottaa vertaamaan johonkin konkreettiseen vaihtoehtoon sen sijaan että vertailtaisiin abstraktiin “täydellisyyteen”, jota ei ole olemassa.</p>
<section id="vastaskenaario-1-entä-jos-maailma-olisi-valinnut-gallpetersin" class="level3" data-number="14.1">
<h3 data-number="14.1" class="anchored" data-anchor-id="vastaskenaario-1-entä-jos-maailma-olisi-valinnut-gallpetersin"><span class="header-section-number">14.1</span> Vastaskenaario 1: entä jos maailma olisi valinnut Gall–Petersin?</h3>
<p>1970- ja 80-luvuilla käytiin kiivas julkinen kiista, jossa saksalainen historioitsija Arno Peters vaati Mercatorin korvaamista pinta-alatarkalla projektiolla. Monet järjestöt, kuten UNESCO ja useat kehitysyhteistyöjärjestöt, ottivat sen käyttöön. Kartografit vastustivat kiivaasti. Miksi?</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb62" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb62-1">vertailu_cf1 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb62-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gall-Peters"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mollweide"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eckert IV"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb62-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(projektio) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb62-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb62-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_mediaani =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(omega),</span>
<span id="cb62-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_p90      =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(omega, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.90</span>),</span>
<span id="cb62-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus_yli_30   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(omega <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>),</span>
<span id="cb62-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb62-9">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb62-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(kulma_mediaani)</span>
<span id="cb62-11"></span>
<span id="cb62-12">vertailu_cf1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb62-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb62-14">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Projektio =</span> projektio,</span>
<span id="cb62-15">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(kulma_mediaani, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>),</span>
<span id="cb62-16">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, 90 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span>     <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(kulma_p90, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>),</span>
<span id="cb62-17">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Osuus maa-alasta, jossa yli 30°</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(osuus_yli_30, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb62-18">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb62-19">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Pinta-alatarkkojen projektioiden muotovirheet"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Pinta-alatarkkojen projektioiden muotovirheet</caption>
<colgroup>
<col style="width: 14%">
<col style="width: 25%">
<col style="width: 20%">
<col style="width: 39%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Projektio</th>
<th style="text-align: left;">Kulmavirhe, mediaani</th>
<th style="text-align: left;">Kulmavirhe, 90 %</th>
<th style="text-align: left;">Osuus maa-alasta, jossa yli 30°</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Equal Earth</td>
<td style="text-align: left;">18.4°</td>
<td style="text-align: left;">51.0°</td>
<td style="text-align: left;">25.9%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Eckert IV</td>
<td style="text-align: left;">19.2°</td>
<td style="text-align: left;">51.7°</td>
<td style="text-align: left;">22.6%</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Mollweide</td>
<td style="text-align: left;">21.8°</td>
<td style="text-align: left;">63.5°</td>
<td style="text-align: left;">38.9%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Gall-Peters</td>
<td style="text-align: left;">30.6°</td>
<td style="text-align: left;">48.0°</td>
<td style="text-align: left;">51.7%</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Kaikki neljä ovat täsmälleen yhtä hyviä pinta-aloissa — mutta niiden muotovirheet eroavat merkittävästi. Gall–Peters venyttää tropiikin pystysuuntaan ja litistää napa-alueet vaakasuuntaan. Se on syy siihen, miksi kartografit inhosivat sitä ja miksi se ei koskaan levinnyt laajaan käyttöön kiistan kiivaudesta huolimatta.</p>
<p><strong>Vastaskenaarion johtopäätös:</strong> jos Gall–Peters olisi voittanut 1980-luvulla, pinta-alakiista olisi ratkennut mutta muotokiista olisi alkanut. Equal Earthin todellinen saavutus on, että se saavuttaa saman pinta-alatarkkuuden huomattavasti pienemmällä muotovirheellä. Se on paras vastaus kysymykseen “miksi juuri Equal Earth eikä jokin vanha pinta-alatarkka projektio”.</p>
</section>
<section id="vastaskenaario-2-entä-jos-kartta-olisi-keskitetty-ihmisten-mukaan" class="level3" data-number="14.2">
<h3 data-number="14.2" class="anchored" data-anchor-id="vastaskenaario-2-entä-jos-kartta-olisi-keskitetty-ihmisten-mukaan"><span class="header-section-number">14.2</span> Vastaskenaario 2: entä jos kartta olisi keskitetty ihmisten mukaan?</h3>
<p>Kaikki maailmankartat keskitetään käytännössä Greenwichin nollameridiaaniin. Se ei ole matemaattinen välttämättömyys vaan historiallinen sopimus vuodelta 1884. Equal Earthin muotovirhe kasvaa sitä suuremmaksi, mitä kauempana kartan keskimeridiaanista ollaan. Mikä olisi <strong>väestön kannalta optimaalinen</strong> keskimeridiaani?</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb63" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb63-1">testi_lon0 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">175</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb63-2"></span>
<span id="cb63-3">kohdat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> maapisteet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb63-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">inner_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(painot, ISO3_CODE, paino), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ISO3_CODE"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb63-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_sample</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20000</span>)</span>
<span id="cb63-6"></span>
<span id="cb63-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(kohdat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20000</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(kohdat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>paino <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb63-8"></span>
<span id="cb63-9">koord_k <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.matrix</span>(kohdat[, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lon"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lat"</span>)])</span>
<span id="cb63-10"></span>
<span id="cb63-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kartan takasauma on kohdassa lon_0 + 180. Numeerinen derivaatta hyppaa siina,</span></span>
<span id="cb63-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># joten sen valittomassa laheisyydessa olevat pisteet on jatettava pois.</span></span>
<span id="cb63-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Poisjaava kaista on 1 aste 360:sta, eli vaikutus tuloksiin on olematon.</span></span>
<span id="cb63-14">optimointi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(testi_lon0, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(l0) {</span>
<span id="cb63-15">  crs <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sprintf</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=eqearth +lon_0=%g +R=6371007 +no_defs"</span>, l0)</span>
<span id="cb63-16"></span>
<span id="cb63-17">  suht_lon <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ((koord_k[, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> l0 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">360</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span></span>
<span id="cb63-18">  ok <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(suht_lon) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span></span>
<span id="cb63-19"></span>
<span id="cb63-20">  v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(koord_k[ok, , <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">drop =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>], crs)</span>
<span id="cb63-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega)))</span>
<span id="cb63-22"></span>
<span id="cb63-23">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb63-24">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon_0 =</span> l0,</span>
<span id="cb63-25">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_kaytetty =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(ok),</span>
<span id="cb63-26">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_painotettu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">weighted.mean</span>(v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega, kohdat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>paino[ok]),</span>
<span id="cb63-27">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_maa_ala    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega)</span>
<span id="cb63-28">  )</span>
<span id="cb63-29">})</span>
<span id="cb63-30"></span>
<span id="cb63-31"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n_kaytetty) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">19800</span>)</span>
<span id="cb63-32"></span>
<span id="cb63-33">paras_vaesto <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lon_0[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.min</span>(optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu)]</span>
<span id="cb63-34">paras_ala    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lon_0[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.min</span>(optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_maa_ala)]</span>
<span id="cb63-35">greenwich    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> optimointi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(lon_0 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb63-36"></span>
<span id="cb63-37"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vaestopainotettu optimi:"</span>, paras_vaesto, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"astetta</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Vaestopainotettu optimi: 75 astetta</code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb65" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb65-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maa-alapainotettu optimi:"</span>, paras_ala, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"astetta</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Maa-alapainotettu optimi: 40 astetta</code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb67" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb67-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Greenwich (nykyinen), vaestopainotettu kulmavirhe:"</span>,</span>
<span id="cb67-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(greenwich<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"astetta</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Greenwich (nykyinen), vaestopainotettu kulmavirhe: 19.71 astetta</code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb69" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb69-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Optimi, vaestopainotettu kulmavirhe:"</span>,</span>
<span id="cb69-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"astetta</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Optimi, vaestopainotettu kulmavirhe: 16.39 astetta</code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb71" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb71-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Parannus:"</span>,</span>
<span id="cb71-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> greenwich<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu,</span>
<span id="cb71-3">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Parannus: 16.8% </code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb73" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb73-1">optimointi_pitka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> optimointi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb73-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>n_kaytetty) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb73-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(kulma_painotettu, kulma_maa_ala),</span>
<span id="cb73-4">               <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"painotus"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kulmavirhe"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb73-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">painotus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">recode</span>(painotus,</span>
<span id="cb73-6">                           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_painotettu =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Väestöpainotettu"</span>,</span>
<span id="cb73-7">                           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_maa_ala    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maapinta-alapainotettu"</span>))</span>
<span id="cb73-8"></span>
<span id="cb73-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(optimointi_pitka, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> lon_0, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> kulmavirhe, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> painotus)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">annotate</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"text"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(optimointi_pitka<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulmavirhe),</span>
<span id="cb73-13">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">label =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Greenwich"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hjust =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.4</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">breaks =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">180</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">60</span>),</span>
<span id="cb73-15">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(x, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(x, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_colour_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Väestöpainotettu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>,</span>
<span id="cb73-18">                                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maapinta-alapainotettu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb73-20">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kartan keskikohdan valinta on mitattava päätös"</span>,</span>
<span id="cb73-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskimääräinen muotovirhe Equal Earthilla eri keskimeridiaaneilla"</span>,</span>
<span id="cb73-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kartan keskimeridiaani"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskimääräinen kulmavirhe"</span>,</span>
<span id="cb73-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span></span>
<span id="cb73-24">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb73-25">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-keskimeridiaani" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-keskimeridiaani-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-keskimeridiaani-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-keskimeridiaani-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;9: Equal Earthin muotovirhe kartan keskikohdan funktiona.
</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten tätä kuvaa luetaan.</strong> Vaaka-akselilla on se, minkä pituuspiirin kohdalle kartta keskitetään. Pystyakselilla on siitä seuraava keskimääräinen muotovirhe. Mitä alempana käyrä on, sitä parempi kyseinen keskitys on. Punainen katkoviiva on nykyinen valinta, Greenwich. Kaksi käyrää vastaavat kahta eri kysymystä: vihreä painottaa ihmisiä, oranssi maapinta-alaa. Huomaa, että käyrät eivät ole minimissään samassa kohdassa — kysymyksenasettelu määrää vastauksen.</p>
<p>Tämä on hyvä esimerkki siitä, että karttavalinnassa on <strong>useampi kuin yksi poliittinen päätös</strong>. Projektion valinta on ollut uutisissa. Keskimeridiaanin valinta ei ole, vaikka sillä on mitattava vaikutus siihen, kenen alue piirtyy kartalle hyvin ja kenen huonosti.</p>
</section>
<section id="vastaskenaario-3-entä-jos-standardileveyspiiri-valittaisiin-väestön-mukaan" class="level3" data-number="14.3">
<h3 data-number="14.3" class="anchored" data-anchor-id="vastaskenaario-3-entä-jos-standardileveyspiiri-valittaisiin-väestön-mukaan"><span class="header-section-number">14.3</span> Vastaskenaario 3: entä jos standardileveyspiiri valittaisiin väestön mukaan?</h3>
<p>Gall–Petersin projektio on erikoistapaus <strong>sylinterisestä pinta-alaprojektiosta</strong>, jonka ainoa parametri on ns. standardileveyspiiri: se leveyspiiri, jolla muodot ovat täsmälleen oikein. Peters valitsi 45 astetta. Mitä tapahtuisi muilla valinnoilla?</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb74" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb74-1">testi_lat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">75</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb74-2"></span>
<span id="cb74-3">lat_optimointi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(testi_lat, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(lt) {</span>
<span id="cb74-4">  crs <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sprintf</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"+proj=cea +lat_ts=%g +lon_0=0 +R=6371007 +no_defs"</span>, lt)</span>
<span id="cb74-5">  v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">laske_vaaristymat</span>(koord_k, crs)</span>
<span id="cb74-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb74-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat_ts =</span> lt,</span>
<span id="cb74-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_painotettu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">weighted.mean</span>(v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega, kohdat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>paino),</span>
<span id="cb74-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_maa_ala    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(v<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>omega)</span>
<span id="cb74-10">  )</span>
<span id="cb74-11">})</span>
<span id="cb74-12"></span>
<span id="cb74-13">paras_lat_vaesto <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lat_optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lat_ts[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.min</span>(lat_optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu)]</span>
<span id="cb74-14">paras_lat_ala    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lat_optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lat_ts[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.min</span>(lat_optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_maa_ala)]</span>
<span id="cb74-15">peters <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lat_optimointi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(lat_ts <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">45</span>)</span>
<span id="cb74-16"></span>
<span id="cb74-17"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Petersin valinta (45 astetta), vaestopainotettu kulmavirhe:"</span>,</span>
<span id="cb74-18">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(peters<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Petersin valinta (45 astetta), vaestopainotettu kulmavirhe: 26.04 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb76" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb76-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vaestopainotettu optimi:"</span>, paras_lat_vaesto, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"astetta, kulmavirhe:"</span>,</span>
<span id="cb76-2">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(lat_optimointi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulma_painotettu), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Vaestopainotettu optimi: 26 astetta, kulmavirhe: 12.81 </code></pre>
</div>
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb78" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb78-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cat</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maa-alapainotettu optimi:"</span>, paras_lat_ala, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"astetta</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\n</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>Maa-alapainotettu optimi: 29 astetta</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb80" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb80-1">lat_pitka <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> lat_optimointi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb80-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(kulma_painotettu, kulma_maa_ala),</span>
<span id="cb80-3">               <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"painotus"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kulmavirhe"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb80-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">painotus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">recode</span>(painotus,</span>
<span id="cb80-5">                           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_painotettu =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Väestöpainotettu"</span>,</span>
<span id="cb80-6">                           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kulma_maa_ala    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maapinta-alapainotettu"</span>))</span>
<span id="cb80-7"></span>
<span id="cb80-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(lat_pitka, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> lat_ts, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> kulmavirhe, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> painotus)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1.1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">45</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">annotate</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"text"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(lat_pitka<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kulmavirhe),</span>
<span id="cb80-12">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">label =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Petersin valinta"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hjust =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.4</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(x, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(x, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_colour_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Väestöpainotettu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>,</span>
<span id="cb80-16">                                 <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maapinta-alapainotettu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(</span>
<span id="cb80-18">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title    =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Petersin valinta ei ollut optimaalinen kummallakaan mittarilla"</span>,</span>
<span id="cb80-19">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sylinterinen pinta-alaprojektio: muotovirhe standardileveyspiirin mukaan"</span>,</span>
<span id="cb80-20">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Standardileveyspiiri"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskimääräinen kulmavirhe"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">colour =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span></span>
<span id="cb80-21">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb80-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kristian</span>()</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div id="fig-latts" class="quarto-float quarto-figure quarto-figure-center anchored">
<figure class="quarto-float quarto-float-fig figure">
<div aria-describedby="fig-latts-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
<img src="https://kristianvepsalainen.com/posts/karttaprojektiot_files/figure-html/fig-latts-1.png" class="img-fluid figure-img" width="1800">
</div>
<figcaption class="quarto-float-caption-bottom quarto-float-caption quarto-float-fig" id="fig-latts-caption-0ceaefa1-69ba-4598-a22c-09a6ac19f8ca">
Figure&nbsp;10: Sylinterisen pinta-alaprojektion muotovirhe standardileveyspiirin funktiona.
</figcaption>
</figure>
</div>
</div>
</div>
<p>Tämä on hyvä esimerkki siitä, mitä numerot voivat tehdä poliittiselle väittelylle. Petersin kartta esitettiin 1970-luvulla ainoana oikeudenmukaisena vaihtoehtona, ja sen parametrivalintaa ei juuri kyseenalaistettu. Kun sama projektioperhe optimoidaan eksplisiittisellä kriteerillä, käy ilmi, että valinta oli mielivaltainen. Ja tässä on olennainen huomio: <strong>argumentti “pinta-alat oikein” ei riitä määrittämään yhtä karttaa.</strong> Pinta-alatarkkoja projektioita on ääretön määrä, ja niiden välillä valitseminen vaatii jonkin <em>toisen</em> kriteerin. Se toinen kriteeri on aina arvovalinta.</p>
</section>
<section id="vastaskenaario-4-entä-jos-kouluihin-valittaisiin-kompromissiprojektio" class="level3" data-number="14.4">
<h3 data-number="14.4" class="anchored" data-anchor-id="vastaskenaario-4-entä-jos-kouluihin-valittaisiin-kompromissiprojektio"><span class="header-section-number">14.4</span> Vastaskenaario 4: entä jos kouluihin valittaisiin kompromissiprojektio?</h3>
<p>Yhdysvaltain National Geographic Society käyttää maailmankartoissaan Winkel Tripeliä, ei Equal Earthia eikä Mercatoria. Miten se pärjää?</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb81" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb81-1">vertailu_cf4 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaaristymat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb81-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(projektio <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mercator"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Equal Earth"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Winkel Tripel"</span>,</span>
<span id="cb81-3">                          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Robinson"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Natural Earth"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb81-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(projektio) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb81-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb81-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pa_p05  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(r_pinta_ala, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span>),</span>
<span id="cb81-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pa_p95  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(r_pinta_ala, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb81-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pa_suhde =</span> pa_p95 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> pa_p05,</span>
<span id="cb81-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">om_med  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(omega),</span>
<span id="cb81-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">om_p95  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(omega, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>),</span>
<span id="cb81-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span></span>
<span id="cb81-12">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb81-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(pa_suhde)</span>
<span id="cb81-14"></span>
<span id="cb81-15">vertailu_cf4 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb81-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(</span>
<span id="cb81-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Projektio =</span> projektio,</span>
<span id="cb81-18">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Pinta-alojen ylin/alin -suhde</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(pa_suhde, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00d7"</span>),</span>
<span id="cb81-19">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, mediaani</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(om_med, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>),</span>
<span id="cb81-20">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Kulmavirhe, 95 %</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">formatC</span>(om_p95, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">digits =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"f"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"\u00b0"</span>)</span>
<span id="cb81-21">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb81-22">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">caption =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kompromissiprojektiot Mercatorin ja Equal Earthin välissä"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Kompromissiprojektiot Mercatorin ja Equal Earthin välissä</caption>
<colgroup>
<col style="width: 17%">
<col style="width: 36%">
<col style="width: 25%">
<col style="width: 20%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Projektio</th>
<th style="text-align: left;">Pinta-alojen ylin/alin -suhde</th>
<th style="text-align: left;">Kulmavirhe, mediaani</th>
<th style="text-align: left;">Kulmavirhe, 95 %</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Equal Earth</td>
<td style="text-align: left;">1.0×</td>
<td style="text-align: left;">18.4°</td>
<td style="text-align: left;">63.2°</td>
</tr>
<tr class="even">
<td style="text-align: left;">Robinson</td>
<td style="text-align: left;">1.7×</td>
<td style="text-align: left;">12.0°</td>
<td style="text-align: left;">54.3°</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Natural Earth</td>
<td style="text-align: left;">1.7×</td>
<td style="text-align: left;">12.2°</td>
<td style="text-align: left;">49.9°</td>
</tr>
<tr class="even">
<td style="text-align: left;">Winkel Tripel</td>
<td style="text-align: left;">1.8×</td>
<td style="text-align: left;">13.8°</td>
<td style="text-align: left;">48.8°</td>
</tr>
<tr class="odd">
<td style="text-align: left;">Mercator</td>
<td style="text-align: left;">6.8×</td>
<td style="text-align: left;">0.0°</td>
<td style="text-align: left;">0.0°</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Kompromissiprojektiot tekevät täsmälleen sen, mitä nimi lupaa. Winkel Tripel ja Robinson vääristävät pinta-aloja selvästi vähemmän kuin Mercator ja muotoja selvästi vähemmän kuin Equal Earth — mutta kumpaakaan ne eivät saa oikein.</p>
<p><strong>Vastaskenaarion johtopäätös:</strong> jos tavoite on “kartta, joka ei valehtele pahasti missään”, kompromissiprojektio on puolustettavissa. Jos tavoite on “kartta, jonka pinta-aloista voi lukea totuuden”, vain pinta-alatarkka kelpaa. YK:n päätös valitsi jälkimmäisen. Se on <strong>arvovalinta, ei tekninen totuus</strong>, ja juuri siksi siitä äänestettiin eikä sitä laskettu.</p>
<hr>
</section>
</section>
<section id="yhteenveto-mitä-tästä-jää-käteen" class="level2" data-number="15">
<h2 data-number="15" class="anchored" data-anchor-id="yhteenveto-mitä-tästä-jää-käteen"><span class="header-section-number">15</span> Yhteenveto: mitä tästä jää käteen</h2>
<p>Kootaan langat yhteen.</p>
<ol type="1">
<li><p><strong>Jokainen tasokartta on väärä.</strong> Gaussin Theorema Egregium takaa sen. Ei ole olemassa parasta karttaa, on vain kartta, joka on paras johonkin tarkoitukseen.</p></li>
<li><p><strong>Mercator vääristää pinta-aloja systemaattisesti ja voimakkaasti.</strong> Vääristymä ei ole yksi luku vaan jakauma, jonka ylä- ja alapään ero on monikymmenkertainen.</p></li>
<li><p><strong>Kampanjan iskulause “Afrikka ja Grönlanti näyttävät samankokoisilta” ei kestä tarkkaa tarkastelua</strong> — mutta sen taustalla oleva väite Mercatorin systemaattisesta vääristymästä kestää.</p></li>
<li><p><strong>Väestöpainotettuna Mercator on paljon vähemmän paha.</strong> Suurin osa maailman ihmisistä asuu alueilla, joissa vääristymä on maltillinen. Mercatorin todellinen ongelma on se, että se antaa muutamalle harvaan asutulle pohjoiselle alueelle suhteettoman visuaalisen painoarvon.</p></li>
<li><p><strong>Equal Earth maksaa pinta-alatarkkuutensa muodoissa</strong>, ja muotovirhe on suurin juuri kartan reunoilla ja korkeilla leveyspiireillä.</p></li>
<li><p><strong>Mercator ei ollut virhe.</strong> Se ratkaisi navigointiongelman erinomaisesti, ja suoran kompassikurssin hinta oli tyypillisesti muutamia prosentteja.</p></li>
<li><p><strong>Pinta-alatarkkuus ei määrää yhtä karttaa.</strong> Niitä on ääretön määrä, ja niiden välillä valitaan jollakin toisella kriteerillä, joka on aina arvovalinta.</p></li>
<li><p><strong>Karttavalinnassa on useampi kuin yksi poliittinen päätös.</strong> Keskimeridiaanin valinta on niistä toinen, ja siitä ei keskustella lainkaan, vaikka sen vaikutus on mitattava.</p></li>
</ol>
<p>Jos yksi asia jää mieleen, olkoon se tämä: <strong>kun joku esittää yhden luvun, kysy mikä jakauma sen takana on ja millä painotuksella se on laskettu.</strong> Karttaprojektioiden tapauksessa vastaus muuttuu radikaalisti sen mukaan, lasketaanko neliökilometrejä vai ihmisiä.</p>
<hr>
</section>
<section id="miten-tätä-käytetään-yrityksessä" class="level2" data-number="16">
<h2 data-number="16" class="anchored" data-anchor-id="miten-tätä-käytetään-yrityksessä"><span class="header-section-number">16</span> Miten tätä käytetään yrityksessä</h2>
<p>Tämä ei ollut myyntipostaus, mutta olisi epärehellistä olla sanomatta ääneen, että sama matematiikka tulee vastaan yritysdatassa joka viikko. Tässä konkreettiset kohdat, joissa olen nähnyt täsmälleen tämän ilmiön:</p>
<p><strong>1. Koneoppimisen dimensioreduktio on karttaprojektio.</strong> Kun ajat UMAP- tai t-SNE-visualisoinnin asiakassegmenteistä, teet täsmälleen saman asian: kuvaat korkeaulotteisen avaruuden kaksiulotteiselle tasolle. Ja täsmälleen sama Theorema Egregium pätee — et voi säilyttää sekä paikallisia että globaalisia etäisyyksiä. t-SNE valitsee paikalliset (kuin Mercator kulmat), MDS valitsee globaalit (kuin Equal Earth pinta-alat). <strong>Klusterien koko t-SNE-kuvassa ei tarkoita mitään</strong>, aivan kuten Grönlannin koko Mercatorilla ei tarkoita mitään. Tämä on yleisimpiä virheitä, joita näen data-esityksissä.</p>
<p><strong>2. Karttavisualisointi liiketoimintadatassa.</strong> Kun piirrät myyntiluvut Suomen kartalle värialueina, Lapin kunnat vievät valtavan osan pinta-alasta ja Helsinki mikroskooppisen — vaikka asiakkaista valtaosa on Helsingissä. Katsojan silmä painottaa pinta-alaa, ei asiakasmäärää. Ratkaisuja on: kartogrammi, jossa alueiden koko skaalataan asiakasmäärään, tai heksakartta, jossa jokainen alue on samankokoinen. Molemmat ovat “vääriä” karttoja, jotka viestivät oikeamman asian.</p>
<p><strong>3. Mittariston normalisointi.</strong> Kysymys “mikä on oikea painotus” on täsmälleen sama kuin tässä postauksessa. Onko toimipisteen suoritus per neliömetri, per työntekijä vai per asiakas? Jokainen näistä antaa eri paremmuusjärjestyksen, jokainen on puolustettavissa, eikä yksikään ole “oikea”. Yleisin virhe on valita painotus kertomatta siitä — jolloin mittarista tulee salaa poliittinen väline.</p>
<p><strong>4. Riskimalleissa asteikkovalinta on projektiovalinta.</strong> Kun luottoriskimallissa raportoidaan PD:tä, valinta lineaarisen ja logit-asteikon välillä on täsmälleen sama päätös kuin Mercator vs.&nbsp;Equal Earth: toinen säilyttää suhteelliset erot matalilla arvoilla, toinen absoluuttiset erot. Väärä valinta piilottaa riskikeskittymän täsmälleen kuten Mercator piilottaa Afrikan koon.</p>
<p><strong>5. Kysy jokaisesta luvusta, mikä jakauma sen takana on.</strong> Tämä on sen arvoinen, että sen voi tehdä johtoryhmän käytännöksi. “Keskimääräinen läpimenoaika on 4 päivää” on Mercator-tason tieto. “Puolet menee alle kahdessa päivässä, mutta joka kymmenes kestää yli kolme viikkoa” on Equal Earth -tason tieto. Jälkimmäinen kertoo, mihin resurssit kannattaa laittaa.</p>
<p>Jos organisaatiossanne on datavisualisointeja tai mittaristoja, joissa epäilette tällaista piilotettua painotusvalintaa, se on tyypillisesti puolen päivän tarkastelu — ja tulos on lähes aina, että vähintään yksi keskeinen mittari kertoo eri tarinan kuin sen oli tarkoitus kertoa. Otan mielelläni tuollaisen tarkastelun tehtäväksi.</p>
<hr>
</section>
<section id="lähteet" class="level2" data-number="17">
<h2 data-number="17" class="anchored" data-anchor-id="lähteet"><span class="header-section-number">17</span> Lähteet</h2>
<p><strong>Matemaattinen perusta</strong></p>
<ul>
<li>Gauss, C. F. (1827). Disquisitiones generales circa superficies curvas. <em>Commentationes Societatis Regiae Scientiarum Gottingensis Recentiores</em>, 6, 99–146.</li>
<li>Tissot, N. A. (1881). <em>Mémoire sur la représentation des surfaces et les projections des cartes géographiques.</em> Gauthier-Villars, Pariisi.</li>
<li>Snyder, J. P. (1987). <em>Map Projections: A Working Manual.</em> U.S. Geological Survey Professional Paper 1395.</li>
</ul>
<p><strong>Projektiot ja niiden arviointi</strong></p>
<ul>
<li>Šavrič, B., Patterson, T. &amp; Jenny, B. (2019). The Equal Earth map projection. <em>International Journal of Geographical Information Science</em>, 33(3), 454–465.</li>
<li>Goldberg, D. M. &amp; Gott, J. R. (2007). Flexion and skewness in map projections of the Earth. <em>Cartographica</em>, 42(4), 297–318.</li>
<li>Battersby, S. E., Finn, M. P., Usery, E. L. &amp; Yamamoto, K. H. (2014). Implications of web Mercator and its use in online mapping. <em>Cartographica</em>, 49(2), 85–101.</li>
<li>Canters, F. (2002). <em>Small-scale Map Projection Design.</em> Taylor &amp; Francis.</li>
</ul>
<p><strong>Kartat ja havaintokyky</strong></p>
<ul>
<li>Battersby, S. E. &amp; Montello, D. R. (2009). Area estimation of world regions and the projection of the global-scale cognitive map. <em>Annals of the Association of American Geographers</em>, 99(2), 273–291.</li>
<li>De Boeck, M. &amp; Ooms, K. (2019). Evaluating young people’s area estimation of countries and continents. <em>ISPRS International Journal of Geo-Information</em>, 8(3), 125.</li>
<li>Monmonier, M. (2004). <em>Rhumb Lines and Map Wars: A Social History of the Mercator Projection.</em> University of Chicago Press.</li>
</ul>
<p><strong>Aineistot</strong></p>
<ul>
<li>GISCO / Eurostat: Countries 2020, resoluutio 1:20 milj. (<code>giscoR</code>-paketti)</li>
<li>Maailmanpankki: World Development Indicators, indikaattori <code>SP.POP.TOTL</code></li>
<li>PROJ-kirjasto (versio <code>sf</code>-paketin kautta), projektiokaavat</li>
</ul>
<p><strong>Uutislähteet</strong></p>
<ul>
<li>YK:n yleiskokouksen päätöslauselma 4.9.2026 (164–1, 6 pidättyi)</li>
<li>Afrikan unionin tuki <em>Correct the Map</em> -kampanjalle, elokuu 2025</li>
</ul>


<!-- -->

</section>

 ]]></description>
  <category>matematiikka</category>
  <category>geometria</category>
  <category>avoin data</category>
  <category>visualisointi</category>
  <category>päätöksenteko</category>
  <guid>https://kristianvepsalainen.com/posts/karttaprojektiot.html</guid>
  <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Mistä eduskunnassa tehdään aloitteita — ja miten se muuttuu</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa10-aihevirta.html</link>
  <description><![CDATA[ 





<section id="uutiskoukku-mikä-on-pinnalla-eduskunnassa" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-mikä-on-pinnalla-eduskunnassa">Uutiskoukku: mikä on pinnalla eduskunnassa?</h2>
<p>Media kertoo, mistä poliitikot puhuvat. Mutta mistä he tekevät konkreettisia aloitteita ja kysymyksiä — ja miten se on muuttunut? Vastaus on aineistossa, ja tärkeää on, että käytämme <strong>aineiston omia aihetunnisteita</strong>, emme itse tehtyä tekstiluokitusta.</p>
<div class="callout callout-style-default callout-note callout-titled" title="Miksi ei NLP?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Miksi ei NLP?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aloitteet sisältävät valmiiksi luokitellut aihetunnisteet (<code>AiheTeksti</code>). Ne ovat eduskunnan itsensä antamia, joten ne ovat läpinäkyviä ja toistettavia — toisin kuin aihemallinnus (LDA tms.), joka olisi herkkä suomen kielen taivutukselle ja mallin valinnoille. Käytämme siis rakenteista dataa, joka on sekä luotettavampi että rehellisempi.</p>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist)</span>
<span id="cb1-2">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-4">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keltainen =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"yellow"</span>)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>()))</span>
<span id="cb1-8">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-9">init <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_init.qs"</span>))</span>
<span id="cb1-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aja ensin R/vaski-data-prep.R"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(init) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>)</span></code></pre></div></div>
</details>
</div>
</section>
<section id="aiheet-pitkässä-muodossa" class="level2">
<h2 class="anchored" data-anchor-id="aiheet-pitkässä-muodossa">Aiheet pitkässä muodossa</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">aiheet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> init <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(id, vpvuosi, tyyppi, aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(aiheet), aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">aihe =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_squish</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_to_lower</span>(aiheet)))</span>
<span id="cb2-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aihetunnisteita ei löytynyt"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>)</span>
<span id="cb2-5"></span>
<span id="cb2-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Yleisimmät aiheet koko aineistossa</span></span>
<span id="cb2-7">top <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(aihe, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_head</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb2-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(top, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> n, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_reorder</span>(aihe, n))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Yleisimmät aloitteiden ja kysymysten aiheet"</span>,</span>
<span id="cb2-11">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aineiston omat aihetunnisteet"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mainintoja"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa10-aihevirta_files/figure-html/aiheet-long-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="aihevirta-ajassa" class="level2">
<h2 class="anchored" data-anchor-id="aihevirta-ajassa">Aihevirta ajassa</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">top_aiheet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> top <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_head</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(aihe)</span>
<span id="cb3-2">per_vuosi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(vpvuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"n_yht"</span>)</span>
<span id="cb3-3">trendi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(aihe <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> top_aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(vpvuosi, aihe) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(per_vuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vpvuosi"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> n_yht) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2026</span>)</span>
<span id="cb3-6"></span>
<span id="cb3-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(trendi, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vpvuosi, osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> aihe)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_point</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aiheiden painopiste liikkuu vuosien yli"</span>,</span>
<span id="cb3-12">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kuuden yleisimmän aiheen osuus aloitteiden aihetunnisteista"</span>,</span>
<span id="cb3-13">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus maininnoista"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa10-aihevirta_files/figure-html/trendi-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="onko-aihejakauma-muuttunut-tilastollinen-testi" class="level2">
<h2 class="anchored" data-anchor-id="onko-aihejakauma-muuttunut-tilastollinen-testi">Onko aihejakauma muuttunut? Tilastollinen testi</h2>
<p>Verrataan aihejakaumaa aineiston <strong>ensimmäisen</strong> ja <strong>viimeisen</strong> täyden vaalikauden välillä. Aiheet ovat kategorinen muuttuja, joten käytämme khii-neliötä ja efektikokona Cramérin V:tä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">kaudet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(aihe <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> top_aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kausi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2018</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2015–2018"</span>,</span>
<span id="cb4-3">                           vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2022</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2019–2022"</span>,</span>
<span id="cb4-4">                           <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(kausi))</span>
<span id="cb4-6"></span>
<span id="cb4-7">taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">table</span>(kaudet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>aihe, kaudet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kausi)</span>
<span id="cb4-8">khi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">chisq.test</span>(taulu)</span>
<span id="cb4-9">cramers_v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(taulu) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dim</span>(taulu)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span>
<span id="cb4-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">khi2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">df =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>parameter),</span>
<span id="cb4-11">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">signif</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cramers_V =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(cramers_v,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
   khi2    df         p cramers_V
  &lt;dbl&gt; &lt;int&gt;     &lt;dbl&gt;     &lt;dbl&gt;
1  738.     5 3.55e-157     0.513</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Tulkinta">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Tulkinta
</div>
</div>
<div class="callout-body-container callout-body">
<p>Merkitsevä ero kertoo, että aihejakauma <em>muuttui</em> kausien välillä; efektikoko (Cramérin V) kertoo <em>kuinka paljon</em>. Suuri aineisto tekee lähes mistä tahansa erosta merkitsevän, joten efektikoko on tässä olennaisempi kuin p-arvo.</p>
</div>
</div>
</section>
<section id="aihejakauma-tyypeittäin" class="level2">
<h2 class="anchored" data-anchor-id="aihejakauma-tyypeittäin">Aihejakauma tyypeittäin</h2>
<p>Eri asiakirjatyypit painottuvat eri aiheisiin — lakialoitteet eri tavoin kuin kirjalliset kysymykset.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1">aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(aihe <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> top_aiheet, tyyppi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"KK"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TPA"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(tyyppi, aihe) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(tyyppi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(osuus, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_rev</span>(aihe), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> tyyppi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dodge"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>)])) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aiheet painottuvat eri tavoin asiakirjatyypeittäin"</span>,</span>
<span id="cb6-8">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus tyypin maininnoista"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa10-aihevirta_files/figure-html/tyypeittain-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Aihepainotukset ovat mitattava jakauma</strong>, joka liikkuu — ja liikkeen suuruus on kvantifioitavissa, ei fiiliksen varassa.</li>
<li><strong>Rakenteinen data voittaa mallinnuksen</strong>, kun se on olemassa: aineiston omat aihetunnisteet ovat läpinäkyvämpiä ja toistettavampia kuin tekstimalli.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aiheiden ja painopisteiden seuranta rakenteisesta datasta, ilman mustan laatikon malleja — <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data, VaskiData (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>aihemallinnus</category>
  <category>jakaumat</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa10-aihevirta.html</guid>
  <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Kolme eri lukua samasta asiasta</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/latausverkko-01-kolme-lukua.html</link>
  <description><![CDATA[ 





<section id="luku-jota-kukaan-ei-ole-tarkistanut" class="level2">
<h2 class="anchored" data-anchor-id="luku-jota-kukaan-ei-ole-tarkistanut">Luku, jota kukaan ei ole tarkistanut</h2>
<p>Kun latausinfrasta puhutaan, keskustelussa kelluu aina yksi luku. Latauspisteitä on tuhansia. Tavoite on kymmeniä tuhansia. EU:n AFIR-asetus edellyttää tiettyä tehoa tietyin välein. Luvut esitetään ilman epävarmuutta, ikään kuin joku olisi käynyt laskemassa ne.</p>
<p>Kukaan ei ole käynyt laskemassa niitä. Ja mikä olennaisempaa: <strong>kysymykseen ei ole yhtä oikeaa vastausta, ennen kuin kysyjä kertoo mitä hän laskee.</strong></p>
<p>Tämä ei ole saivartelua. Kun avaan Fintrafficin ylläpitämän kansallisen latausverkkoaineiston ja lasken rivit kolmella eri tasolla, saan kolme lukua, jotka eroavat toisistaan yli viisinkertaisesti. Kaikki kolme ovat oikein.</p>
<p>Tämä postaus aloittaa kolmentoista osan sarjan, jossa Suomen latausverkosta rakennetaan graafi ja etsitään sen murtumiskohdat. Ennen kuin verkkoa voi analysoida, on tiedettävä mistä se koostuu. Osoittautuu, että kysymys on odotettua hankalampi — ja hankaluus on itsessään tulos.</p>
</section>
<section id="aineistot" class="level2">
<h2 class="anchored" data-anchor-id="aineistot">Aineistot</h2>
<p>Käytän kahta lähdettä, jotka ovat syntyneet täysin eri tavoin.</p>
<p><strong>Open Charge Map</strong> on maailmanlaajuinen, yhteisön ylläpitämä rekisteri. Osa tiedoista tulee vapaaehtoisilta, osa tuodaan automaattisesti operaattoreiden syötteistä. Rajapinta on avoin ja vaatii ilmaisen API-avaimen.</p>
<p><strong>Fintrafficin AFIR-rajapinta</strong> on kansallinen kooste, johon latausoperaattoreilla on lakisääteinen velvollisuus toimittaa tietonsa. Se julkaistaan Digitrafficin kautta OCPI-standardiin pohjautuvassa muodossa.</p>
<p>Ensimmäinen on joukkoistettu, toinen viranomaisvetoinen. Ensimmäisessä havainto syntyy siitä, että joku huomaa aseman. Toisessa siitä, että operaattori täyttää velvollisuutensa. Nämä ovat erilaisia havaintomekanismeja, ja juuri se tekee niiden vertailusta hyödyllistä.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1">ocm_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ocm_raw.qs"</span>)</span>
<span id="cb1-2"></span>
<span id="cb1-3">hae_ocm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">maxresults =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50000</span>) {</span>
<span id="cb1-4">  avain <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.getenv</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM_API_KEY"</span>)</span>
<span id="cb1-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM_API_KEY puuttuu .Renviron-tiedostosta"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nzchar</span>(avain))</span>
<span id="cb1-6"></span>
<span id="cb1-7">  resp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">request</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://api.openchargemap.io/v3/poi/"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-8">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_headers</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">X-API-Key</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> avain,</span>
<span id="cb1-9">                <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">User-Agent</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kristianvepsalainen.com / latausverkko"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-10">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_url_query</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">countrycode =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"FI"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">output =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"json"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">compact =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"false"</span>,</span>
<span id="cb1-11">                  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">verbose =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"false"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">maxresults =</span> maxresults) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-12">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_retry</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_tries =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb1-13">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_perform</span>()</span>
<span id="cb1-14"></span>
<span id="cb1-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM palautti muun kuin 200"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">resp_status</span>(resp) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>)</span>
<span id="cb1-16">  poi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">resp_body_json</span>(resp)</span>
<span id="cb1-17"></span>
<span id="cb1-18">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Hiljainen katkaisu näyttäisi täysin normaalilta aineistolta,</span></span>
<span id="cb1-19">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># joten se on tarkistettava erikseen.</span></span>
<span id="cb1-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb1-21">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM-vastaus on katkaistu: kasvata maxresults"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(poi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> maxresults,</span>
<span id="cb1-22">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM palautti tyhjän vastauksen"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(poi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb1-23">  )</span>
<span id="cb1-24">  poi</span>
<span id="cb1-25">}</span>
<span id="cb1-26"></span>
<span id="cb1-27"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(ocm_path)) {</span>
<span id="cb1-28">  ocm_raw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hae_ocm</span>()</span>
<span id="cb1-29">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(ocm_raw, ocm_path)</span>
<span id="cb1-30">} <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> {</span>
<span id="cb1-31">  ocm_raw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(ocm_path)</span>
<span id="cb1-32">}</span></code></pre></div></div>
</details>
</div>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">afir_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"afir_raw.qs"</span>)</span>
<span id="cb2-2"></span>
<span id="cb2-3">afir <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(polku, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cursor =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>) {</span>
<span id="cb2-4">  req <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">request</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://afir.digitraffic.fi"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-5">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_url_path_append</span>(polku) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-6">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_headers</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Digitraffic-User</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kristianvepsalainen.com/latausverkko"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-7">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_retry</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_tries =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb2-8">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.null</span>(cursor)) req <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_url_query</span>(req, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cursor =</span> cursor)</span>
<span id="cb2-9">  resp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_perform</span>(req)</span>
<span id="cb2-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AFIR palautti muun kuin 200"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">resp_status</span>(resp) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>)</span>
<span id="cb2-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">resp_body_json</span>(resp)</span>
<span id="cb2-12">}</span>
<span id="cb2-13"></span>
<span id="cb2-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sivutus on kursoripohjaista. Käytän sitä koosteen (/all) sijaan, koska</span></span>
<span id="cb2-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># sivu kerrallaan eteneminen paljastaa jos rajapinta jää silmukkaan.</span></span>
<span id="cb2-16">hae_kaikki <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(polku, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_sivuja =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>) {</span>
<span id="cb2-17">  sivut <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(); cursor <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>; i <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb2-18">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">repeat</span> {</span>
<span id="cb2-19">    i <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> i <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb2-20">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sivutus ei pääty – tarkista nextCursor"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> i <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> max_sivuja)</span>
<span id="cb2-21">    v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">afir</span>(polku, cursor)</span>
<span id="cb2-22">    sivut[[i]] <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> v</span>
<span id="cb2-23">    cursor <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(v, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pagination"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"nextCursor"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span>
<span id="cb2-24">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.null</span>(cursor)) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span></span>
<span id="cb2-25">  }</span>
<span id="cb2-26">  sivut</span>
<span id="cb2-27">}</span>
<span id="cb2-28"></span>
<span id="cb2-29"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(afir_path)) {</span>
<span id="cb2-30">  afir_raw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(</span>
<span id="cb2-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">operaattorit =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">afir</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/api/charging-network/v1/operators"</span>),</span>
<span id="cb2-32">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sijainnit    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hae_kaikki</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/api/charging-network/v1/locations"</span>)</span>
<span id="cb2-33">  )</span>
<span id="cb2-34">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(afir_raw, afir_path)</span>
<span id="cb2-35">} <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> {</span>
<span id="cb2-36">  afir_raw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(afir_path)</span>
<span id="cb2-37">}</span></code></pre></div></div>
</details>
</div>
</section>
<section id="ensimmäinen-kerros-mitä-yksi-rivi-tarkoittaa" class="level2">
<h2 class="anchored" data-anchor-id="ensimmäinen-kerros-mitä-yksi-rivi-tarkoittaa">Ensimmäinen kerros: mitä yksi rivi tarkoittaa?</h2>
<p>AFIR-aineisto on kolmitasoinen. Ylimpänä on <strong>sijainti</strong> — esimerkiksi kauppakeskuksen parkkihalli. Sen alla on yksi tai useampi <strong>latauslaite</strong>, standardin kielellä EVSE. Ja laitteen alla on <strong>konnektorit</strong>, eli fyysiset pistokkeet.</p>
<p>Yksi latauspylväs, jossa on sekä CHAdeMO- että CCS-pistoke, on yksi laite ja kaksi konnektoria. Kymmenen pylvään latauskenttä on yksi sijainti ja kymmenen laitetta.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">piirteet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list_flatten</span>(</span>
<span id="cb3-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map</span>(afir_raw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>sijainnit, \(s) purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(s, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"features"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>()))</span>
<span id="cb3-3">)</span>
<span id="cb3-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Piirteitä ei löytynyt"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(piirteet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb3-5"></span>
<span id="cb3-6">nap_sijainnit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(piirteet, \(f) {</span>
<span id="cb3-7">  p <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> f<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>properties</span>
<span id="cb3-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb3-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">raaka_id  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>),</span>
<span id="cb3-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi      =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"name"</span>),</span>
<span id="cb3-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">op_id     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"operator"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>),</span>
<span id="cb3-12">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">op_nimi   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"operator"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"details"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"name"</span>),</span>
<span id="cb3-13">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kunta     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"address"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"city"</span>),</span>
<span id="cb3-14">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">postinro  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"address"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"postalCode"</span>),</span>
<span id="cb3-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">aina_auki =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.logical</span>(purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"openingTimes"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"twentyFourSeven"</span>,</span>
<span id="cb3-16">                                        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)),</span>
<span id="cb3-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">luotu     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"createdAt"</span>),</span>
<span id="cb3-18">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">muokattu  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"modifiedAt"</span>),</span>
<span id="cb3-19">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon       =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(f, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"geometry"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"coordinates"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb3-20">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat       =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(f, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"geometry"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"coordinates"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>),</span>
<span id="cb3-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.rows =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb3-22">  )</span>
<span id="cb3-23">}) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-24">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">avain =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(op_id, raaka_id, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sep =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"|"</span>))</span>
<span id="cb3-25"></span>
<span id="cb3-26">nap_kon <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(piirteet, \(f) {</span>
<span id="cb3-27">  p <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> f<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>properties</span>
<span id="cb3-28">  avain <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"operator"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sep =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"|"</span>)</span>
<span id="cb3-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"evses"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>()), \(e) {</span>
<span id="cb3-30">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(e, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"connectors"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>()), \(k) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb3-31">      avain,</span>
<span id="cb3-32">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">evse_id   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(e, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>),</span>
<span id="cb3-33">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">standardi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"standard"</span>),</span>
<span id="cb3-34">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">virta     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"powerType"</span>),</span>
<span id="cb3-35">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">muoto     =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"format"</span>),</span>
<span id="cb3-36">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">volttia   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maxVoltage"</span>),</span>
<span id="cb3-37">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ampeeria  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maxAmperage"</span>),</span>
<span id="cb3-38">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># maxElectricPower on OCPI:ssa watteja, ei kilowatteja</span></span>
<span id="cb3-39">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">teho_kw   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maxElectricPower"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>,</span>
<span id="cb3-40">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tariffi   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(k, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"tariffIds"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb3-41">    ))</span>
<span id="cb3-42">  })</span>
<span id="cb3-43">})</span>
<span id="cb3-44"></span>
<span id="cb3-45"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb3-46">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sijaintitaulu on tyhjä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_sijainnit) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,</span>
<span id="cb3-47">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Konnektoritaulu on tyhjä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_kon) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,</span>
<span id="cb3-48">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koordinaatteja puuttuu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(nap_sijainnit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lat)),</span>
<span id="cb3-49">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koordinaatit Suomen ulkopuolella"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb3-50">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">between</span>(nap_sijainnit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lat, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">59.4</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">70.2</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span></span>
<span id="cb3-51">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">between</span>(nap_sijainnit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>lon, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">18.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">31.7</span>))</span>
<span id="cb3-52">)</span>
<span id="cb3-53"></span>
<span id="cb3-54">kolme_lukua <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb3-55">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sijainteja  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_sijainnit),</span>
<span id="cb3-56">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laitteita   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(nap_kon<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>evse_id),</span>
<span id="cb3-57">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">konnektorit =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_kon)</span>
<span id="cb3-58">)</span></code></pre></div></div>
</details>
</div>
<p>Kolme lukua samasta aineistosta: <strong>3 048 sijaintia, 16 588 latauslaitetta ja 16 675 pistoketta.</strong></p>
<p>Kun uutisessa sanotaan, että latauspisteitä on noin 17 000, se on tosi. Kun sanotaan, että latausasemia on noin 3 000, sekin on tosi. Kumpikaan ei ole väärin. Ne mittaavat eri asiaa, eikä kumpikaan yleensä kerro kumpaa tarkoitetaan.</p>
<p>Päättäjälle tällä on suora seuraus. Jos tavoitteeksi asetetaan “50 000 latauspistettä vuoteen 2030 mennessä”, tavoite on kolmella eri tulkinnalla kolmen eri kokoinen. Ero ei ole prosentteja vaan kertaluokka.</p>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-01-kolme-lukua_files/figure-html/kuva-tasot-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Sama aineisto kolmella eri laskentatasolla.</figcaption>
</figure>
</div>
</div>
</div>
</section>
<section id="toinen-kerros-rekisteri-ei-ole-yksimielinen-itsensä-kanssa" class="level2">
<h2 class="anchored" data-anchor-id="toinen-kerros-rekisteri-ei-ole-yksimielinen-itsensä-kanssa">Toinen kerros: rekisteri ei ole yksimielinen itsensä kanssa</h2>
<p>Valitaan taso — sanotaan sijainti, koska verkostoanalyysissä solmu on paikka johon ajetaan, ei pistoke johon kytketään. Nyt pitäisi voida laskea rivit.</p>
<p>Ei pitäisi.</p>
<section id="sama-tunniste-kaksi-eri-asemaa" class="level3">
<h3 class="anchored" data-anchor-id="sama-tunniste-kaksi-eri-asemaa">Sama tunniste, kaksi eri asemaa</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">tormaykset <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_sijainnit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(raaka_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb4-2"></span>
<span id="cb4-3">n_tormays_ryhmia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(tormaykset<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>raaka_id)</span>
<span id="cb4-4">n_tormays_riveja <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(tormaykset)</span>
<span id="cb4-5"></span>
<span id="cb4-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Ovatko rivit saman aseman toistoja vai aidosti eri asemia?</span></span>
<span id="cb4-7">tormays_luonne <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tormaykset <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(raaka_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">eri_nimia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(nimi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">eri_op =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(op_id),</span>
<span id="cb4-10">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span>
<span id="cb4-11"></span>
<span id="cb4-12">kaikki_eri <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(tormays_luonne<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>eri_nimia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> tormays_luonne<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>eri_op <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb4-13"></span>
<span id="cb4-14">tunnistetyyli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_sijainnit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">numeerinen =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(raaka_id, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"^[0-9]+$"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(op_id, op_nimi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">numeerisia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(numeerinen), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span>
<span id="cb4-18"></span>
<span id="cb4-19">n_numeerisia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(tunnistetyyli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>numeerisia)</span>
<span id="cb4-20">n_op_numeerisia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(tunnistetyyli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>numeerisia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span></code></pre></div></div>
</details>
</div>
<p>Aineistossa on <strong>28 tunnistetta, jotka viittaavat useampaan kuin yhteen sijaintiin</strong>, yhteensä 57 riviä. Kaikissa tapauksissa nimi, koordinaatit ja operaattori ovat eri — kyse ei siis ole saman rivin toistumisesta vaan aidosti eri asemista, jotka jakavat tunnisteen.</p>
<p>Tunniste <code>10</code> on sekä St1:n asema Pihtiputaalla että Evenlin asema Nokialla. Tunniste <code>29</code> on St1 Porvoossa ja Wattery Muhoksella.</p>
<p>Syy näkyy tunnisteiden muodossa. Suurin osa on satunnaisia merkkijonoja, mutta törmäävät ovat pieniä kokonaislukuja. 6 operaattoria — yhteensä 478 sijaintia — käyttää omia juoksevia numeroitaan, jotka on välitetty koosteeseen sellaisenaan. OCPI-standardissa sijainnin yksilöi vasta kolmikko maakoodi, osapuolitunnus ja sijaintitunnus, mutta koosteen tunnistekenttä sisältää vain viimeisen.</p>
<p>Korjaus on rakentaa yhdistelmäavain itse. Se on triviaali — mutta vain jos huomaa, että se tarvitaan. Kuka tahansa, joka lukee aineiston tietokantaan sijaintitunniste avaimena, saa hiljaisesti väärän tuloksen.</p>
</section>
<section id="toistuvat-konnektorit" class="level3">
<h3 class="anchored" data-anchor-id="toistuvat-konnektorit">Toistuvat konnektorit</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">n_ennen <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_kon)</span>
<span id="cb5-2"></span>
<span id="cb5-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rajapinta toistaa osan konnektoreista sellaisenaan. Sarakkeet</span></span>
<span id="cb5-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># luetellaan nimeltä eikä käytetä pelkkää kolmikkoa avain–laite–standardi,</span></span>
<span id="cb5-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># koska aidossa kaksipistokkeisessa laturissa sama standardi voi</span></span>
<span id="cb5-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># esiintyä eri teholla.</span></span>
<span id="cb5-7">nap_kon <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_kon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(avain, evse_id, standardi, virta, muoto,</span>
<span id="cb5-9">           volttia, ampeeria, teho_kw, tariffi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.keep_all =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb5-10"></span>
<span id="cb5-11">n_toistoja <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> n_ennen <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_kon)</span>
<span id="cb5-12"></span>
<span id="cb5-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb5-14">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Yli 1 % konnektoririveistä oli toistoja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> n_toistoja <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> n_ennen <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.01</span>,</span>
<span id="cb5-15">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Konnektoririvit eivät ole uniikkeja puhdistuksen jälkeen"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb5-16">    <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">duplicated</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(nap_kon, avain, evse_id, standardi, teho_kw))),</span>
<span id="cb5-17">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Yhdistelmäavaimessa duplikaatteja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">duplicated</span>(nap_sijainnit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>avain))</span>
<span id="cb5-18">)</span></code></pre></div></div>
</details>
</div>
<p>Rajapinta palautti 4 konnektoririviä kahteen kertaan täysin identtisinä, tariffitunnistetta myöten. Määrä on mitätön, mutta korjaus on tehtävä ennen kuin mitään lasketaan.</p>
</section>
<section id="sama-laite-kaksi-eri-asemaa" class="level3">
<h3 class="anchored" data-anchor-id="sama-laite-kaksi-eri-asemaa">Sama laite, kaksi eri asemaa</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1">jaetut_evse <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_kon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(evse_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(avain) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb6-5"></span>
<span id="cb6-6">n_jaettuja <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(jaetut_evse<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>evse_id)</span>
<span id="cb6-7">n_paallekkaisia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(jaetut_evse<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>avain)</span></code></pre></div></div>
</details>
</div>
<p>6 latauslaitetta on kirjattu <strong>kahden eri sijainnin alle</strong>. Turun Toriparkissa sama laite on sekä “ylempi krs” että “K1”. Espoossa sama neljä laitetta on sekä “Toyota Espoo” että “Toyota Espoo Julkinen”.</p>
<p>Nämä eivät ole kaksi asemaa vaan yksi asema kahdella kirjauksella. Sijaintien lukumäärä on siis yliarvio, ja ainoa keino havaita se on mennä tasoa alemmas ja katsoa laitetunnisteita.</p>
</section>
<section id="sama-operaattori-kolme-eri-nimeä" class="level3">
<h3 class="anchored" data-anchor-id="sama-operaattori-kolme-eri-nimeä">Sama operaattori, kolme eri nimeä</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1">ops <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(afir_raw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>operaattorit, \(o) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb7-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">op_id =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(o, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>),</span>
<span id="cb7-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">op_virallinen =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(o, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"details"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"name"</span>),</span>
<span id="cb7-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">maakoodi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(o, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"countryCode"</span>)</span>
<span id="cb7-5">))</span>
<span id="cb7-6"></span>
<span id="cb7-7">nimivariantit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_sijainnit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(op_id, op_nimi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(op_id, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"nimia"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(nimia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(ops, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"op_id"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(nimia))</span>
<span id="cb7-13"></span>
<span id="cb7-14"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb7-15">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sijainneissa operaattori jota ei ole rekisterissä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb7-16">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">setdiff</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(nap_sijainnit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id), ops<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,</span>
<span id="cb7-17">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Rekisterissä operaattori jolla ei ole sijainteja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb7-18">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">setdiff</span>(ops<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(nap_sijainnit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb7-19">)</span></code></pre></div></div>
</details>
</div>
<p>Operaattorin nimi on vapaa tekstikenttä, ja se näkyy. Sama tunnus esiintyy kirjoitusasuissa, jotka eroavat yhden kirjaimen kokoisesti. Yksi operaattori on lisäksi eri niminen operaattorirajapinnassa kuin sijaintiaineistossa.</p>
<p>Avain on siis tunnus, ei nimi. Tämä on tavanomainen datankäsittelyn opetus, mutta se kannattaa sanoa ääneen, koska nimen käyttäminen avaimena olisi tässä tuottanut kolme operaattoria siellä missä on yksi.</p>
</section>
<section id="ja-yksi-operaattori-ei-ole-operaattori" class="level3">
<h3 class="anchored" data-anchor-id="ja-yksi-operaattori-ei-ole-operaattori">Ja yksi operaattori ei ole operaattori</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1">alustatunnus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nimivariantit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_max</span>(nimia, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb8-2"></span>
<span id="cb8-3">alustan_asiakkaat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_sijainnit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(op_id <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> alustatunnus<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_id[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(op_nimi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span></code></pre></div></div>
</details>
</div>
<p>Yhden operaattoritunnuksen alla esiintyy 5 eri toimijan nimeä: suuri latausoperaattori ja sen lisäksi joukko pieniä toimijoita — isännöintiyhtiö, autokauppa, teknologiayritys.</p>
<p>Kyse ei ole virheestä. Kyse on siitä, että <strong>alustatoimittaja hoitaa AFIR-ilmoituksen asiakkaidensa puolesta</strong>. Pieni isännöintiyhtiö ei ole tehnyt itsenäistä päätöstä ilmoittaa latauspisteensä kansalliseen rekisteriin. Se on valinnut latausoperaattorinsa, ja operaattori on hoitanut loput.</p>
<p>Tällä on suora seuraus siihen, mitä seuraavaksi teen. Jos halutaan arvioida kuinka moni asema puuttuu rekisteristä, ei voi olettaa että jokainen asema päätyy sinne itsenäisesti. Havaitseminen ei tapahdu asema kerrallaan eikä edes toimija kerrallaan, vaan alusta kerrallaan.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Puretaan päällekkäiskirjaukset: jos kaksi sijaintia jakaa latauslaitteen,</span></span>
<span id="cb9-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ne ovat sama asema. Yhdistetään ne ensimmäisen avaimen alle.</span></span>
<span id="cb9-3">evse_ryhmat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_kon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(avain, evse_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(evse_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ryhma =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(avain)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(avain, ryhma) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(avain) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kanoninen =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(ryhma), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span>
<span id="cb9-11"></span>
<span id="cb9-12">nap <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_sijainnit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(evse_ryhmat, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"avain"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kanoninen =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(kanoninen, avain),</span>
<span id="cb9-15">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">luotu_apu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(luotu, muokattu)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(kanoninen) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_min</span>(luotu_apu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">with_ties =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>luotu_apu)</span>
<span id="cb9-20"></span>
<span id="cb9-21">n_poistettu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_sijainnit) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap)</span>
<span id="cb9-22"></span>
<span id="cb9-23"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb9-24">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kanonisointi poisti epäuskottavan monta riviä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb9-25">    n_poistettu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap_sijainnit) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span></span>
<span id="cb9-26">)</span></code></pre></div></div>
</details>
</div>
</section>
<section id="tehokenttä-ja-sen-naapurit" class="level3">
<h3 class="anchored" data-anchor-id="tehokenttä-ja-sen-naapurit">Tehokenttä ja sen naapurit</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Yli 400 kW on henkilöautolatauksessa epäuskottava, mutta raskaan</span></span>
<span id="cb10-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># kaluston pikalataus yltää korkeammalle. Erotellaan nämä toisistaan</span></span>
<span id="cb10-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># pistoketyypin perusteella.</span></span>
<span id="cb10-4">nap_kon <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_kon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb10-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb10-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">raskas =</span> teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">350</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> standardi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IEC_62196_T2_COMBO"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"MCS"</span>),</span>
<span id="cb10-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">teho_epailyttava =</span> teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">400</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span></span>
<span id="cb10-8">      standardi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DOMESTIC_F"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DOMESTIC_H"</span>)</span>
<span id="cb10-9">  )</span>
<span id="cb10-10"></span>
<span id="cb10-11">n_epailyttavia <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(nap_kon<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_epailyttava, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb10-12"></span>
<span id="cb10-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb10-14">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kotitalouspistoke mahdottomalla teholla useammin kuin odotettua"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb10-15">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(nap_kon<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_epailyttava, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.005</span></span>
<span id="cb10-16">)</span>
<span id="cb10-17"></span>
<span id="cb10-18">nap_kon <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_kon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb10-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">teho_kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(teho_epailyttava, <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_real_</span>, teho_kw))</span>
<span id="cb10-20"></span>
<span id="cb10-21"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb10-22">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tehoja yli 600 kW myös roskan poiston jälkeen"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb10-23">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(nap_kon<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">600</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(nap_kon<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw)),</span>
<span id="cb10-24">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Negatiivisia tehoja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(nap_kon<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb10-25">)</span></code></pre></div></div>
</details>
</div>
<p>Aineistossa on 5 riviä, joissa kotitalouspistorasialle on merkitty yli 400 kilowatin teho — yhdessä tapauksessa 1 200 kilowattia. Kotitalouspistorasiasta saa noin kaksi. Nämä on merkitty puuttuviksi.</p>
<p>Sen sijaan CCS-pistokkeiden 560 kilowatin merkinnät satamissa ja liikenneasemilla ovat uskottavia: ne ovat raskaan kaluston latureita, joita Suomeen on rakennettu. Ne säilytetään mutta merkitään erikseen, koska ne eivät kuulu henkilöautoverkkoon.</p>
</section>
</section>
<section id="ocmn-puolella-samat-ongelmat-eri-muodossa" class="level2">
<h2 class="anchored" data-anchor-id="ocmn-puolella-samat-ongelmat-eri-muodossa">OCM:n puolella samat ongelmat, eri muodossa</h2>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1">ocm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(ocm_raw, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(p) {</span>
<span id="cb11-2">  liitokset <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Connections"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>())</span>
<span id="cb11-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb11-4">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ocm_id      =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ID"</span>),</span>
<span id="cb11-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi        =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AddressInfo"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Title"</span>),</span>
<span id="cb11-6">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kunta       =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AddressInfo"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Town"</span>),</span>
<span id="cb11-7">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">postinro    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AddressInfo"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Postcode"</span>),</span>
<span id="cb11-8">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lat         =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AddressInfo"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Latitude"</span>),</span>
<span id="cb11-9">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lon         =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AddressInfo"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Longitude"</span>),</span>
<span id="cb11-10">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">operaattori =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OperatorInfo"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Title"</span>),</span>
<span id="cb11-11">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">julkinen    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.logical</span>(purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"UsageType"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IsPublicAccess"</span>,</span>
<span id="cb11-12">                                          <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)),</span>
<span id="cb11-13">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">toiminnassa =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.logical</span>(purrr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"StatusType"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IsOperational"</span>,</span>
<span id="cb11-14">                                          <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.default =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)),</span>
<span id="cb11-15">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">datalahde   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DataProviderID"</span>),</span>
<span id="cb11-16">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pisteita    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"NumberOfPoints"</span>),</span>
<span id="cb11-17">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">paivitetty  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DateLastStatusUpdate"</span>),</span>
<span id="cb11-18">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">varmistettu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(p, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"DateLastVerified"</span>),</span>
<span id="cb11-19">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">liitokset   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(liitokset, \(c) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb11-20">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pistoketyyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_chr</span>(c, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ConnectionType"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Title"</span>),</span>
<span id="cb11-21">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">teho_kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(c, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PowerKW"</span>),</span>
<span id="cb11-22">      <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lkm =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pluck_num</span>(c, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Quantity"</span>)</span>
<span id="cb11-23">    ))),</span>
<span id="cb11-24">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.rows =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb11-25">  )</span>
<span id="cb11-26">}) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb11-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb11-28">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_kw =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(liitokset, \(d)</span>
<span id="cb11-29">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(d) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">||</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw))) <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_real_</span></span>
<span id="cb11-30">      <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>teho_kw, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)),</span>
<span id="cb11-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hpc =</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(max_kw) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> max_kw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">150</span></span>
<span id="cb11-32">  )</span>
<span id="cb11-33"></span>
<span id="cb11-34"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Roskatietueet. Sanaraja \\btest\\b on tarkoituksellinen: pelkkä "test"</span></span>
<span id="cb11-35"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># osuisi paikannimiin ja poistaisi oikeita asemia hiljaisesti.</span></span>
<span id="cb11-36">ocm_luokiteltu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb11-37">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hylkaysyy =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb11-38">    lat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> lon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"nollakoordinaatit"</span>,</span>
<span id="cb11-39">    <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">between</span>(lat, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">59.4</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">70.2</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">between</span>(lon, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">18.9</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">31.7</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suomen ulkopuolella"</span>,</span>
<span id="cb11-40">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_to_lower</span>(nimi), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">btest</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b|testi|demo|dummy|sample"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"testitietue"</span>,</span>
<span id="cb11-41">    <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span></span>
<span id="cb11-42">  ))</span>
<span id="cb11-43"></span>
<span id="cb11-44">hylatyt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm_luokiteltu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(hylkaysyy)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(hylkaysyy)</span>
<span id="cb11-45"></span>
<span id="cb11-46"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb11-47">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Yli 2 % tietueista hylättiin – tarkista haun rajaus"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb11-48">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(hylatyt<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(ocm) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.02</span>,</span>
<span id="cb11-49">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM-tunnisteissa duplikaatteja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">duplicated</span>(ocm<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ocm_id))</span>
<span id="cb11-50">)</span>
<span id="cb11-51"></span>
<span id="cb11-52">ocm <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm_luokiteltu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(hylkaysyy)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>hylkaysyy)</span></code></pre></div></div>
</details>
</div>
<p>Hylättyjä tietueita on 6. Osa on koordinaateiltaan mahdottomia: yksi asema väittää sijaitsevansa Tyynellämerellä, toinen Norjanmeren pohjoisosassa. Yksi on pisteessä nolla-nolla — Guineanlahdella, mikä on käytännössä aina merkki siitä, että sijainti puuttuu ja jokin järjestelmä on täyttänyt tyhjän kentän nollilla.</p>
<p>Loput ovat testitietueita, joita joku on syöttänyt rajapintaa kokeillessaan eikä ole poistanut. Yksi niistä on koordinaateiltaan täysin uskottava ja olisi läpäissyt jokaisen geometrisen tarkistuksen — sen löytämiseen tarvittiin nimihaku.</p>
<section id="kenttä-joka-näyttää-laadunvarmistukselta" class="level3">
<h3 class="anchored" data-anchor-id="kenttä-joka-näyttää-laadunvarmistukselta">Kenttä, joka näyttää laadunvarmistukselta</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb12-1">varmistustesti <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb12-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(varmistettu), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(paivitetty)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb12-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ero_h =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">difftime</span>(</span>
<span id="cb12-4">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.POSIXct</span>(varmistettu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tz =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"UTC"</span>),</span>
<span id="cb12-5">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.POSIXct</span>(paivitetty, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tz =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"UTC"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">units =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"hours"</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb12-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sama_hetki =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(ero_h) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb12-7">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani_ero =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(ero_h))</span></code></pre></div></div>
</details>
</div>
<p>OCM:ssä on kenttä nimeltä “viimeksi varmistettu”. Se kuulostaa siltä, että joku olisi käynyt tarkistamassa aseman olemassaolon.</p>
<p>Kaikilla 5 750 asemalla varmistuspäivä on <strong>täsmälleen sama kuin päivityspäivä</strong>. Mediaaniero on nolla tuntia, eikä hajontaa ole lainkaan. Kenttä päivittyy automaattisesti aina kun syöte päivittyy.</p>
<p>Se ei siis mittaa tiedon oikeellisuutta vaan integraation aktiivisuutta. Ero on olennainen: rekisterissä on kenttä, joka näyttää laadunvarmistukselta mutta ei ole sitä, ja jokainen joka lukee sen nimen mukaan päättelee väärin.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb13-1">lahteet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(datalahde, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n))</span></code></pre></div></div>
</details>
</div>
<p>OCM:n Suomen aineisto tulee kolmesta lähteestä: käsin syötetyistä yhteisömerkinnöistä, automaattisesta OCPI-tuonnista ja pohjoismaisesta NOBIL-rekisteristä. Nämä olisivat periaatteessa erilaisia havaintomekanismeja, mutta OCM yhdistää päällekkäiset tietueet ennen julkaisua — sama asema näkyy kerran, ei kolmesti. Lähteiden välistä peittävyyttä ei siis voi mitata OCM:n sisältä, ja siihen tarvitaan ulkopuolinen vertailukohta.</p>
</section>
</section>
<section id="kolmas-kerros-kuinka-moni-puuttuu-molemmista" class="level2">
<h2 class="anchored" data-anchor-id="kolmas-kerros-kuinka-moni-puuttuu-molemmista">Kolmas kerros: kuinka moni puuttuu molemmista?</h2>
<p>Vasta nyt päästään alkuperäiseen kysymykseen.</p>
<section id="menetelmä-miten-hylkeitä-lasketaan" class="level3">
<h3 class="anchored" data-anchor-id="menetelmä-miten-hylkeitä-lasketaan">Menetelmä: miten hylkeitä lasketaan</h3>
<p>Biologi haluaa tietää, montako hyljettä lahdessa on. Hän pyydystää sata, merkitsee ne ja päästää vapaaksi. Viikon päästä hän pyydystää sata uudestaan. Niistä kaksikymmentä on merkittyjä. Jos toisessa pyynnissä viidennes osui merkittyihin, merkityt sata ovat noin viidennes populaatiosta — hylkeitä on siis noin viisisataa.</p>
<p>Menetelmä on nimeltään merkintä-takaisinpyynti. Sitä käytetään ekologian lisäksi epidemiologiassa aliraportoinnin korjaamiseen, ihmisoikeustyössä konfliktien uhrilukujen arviointiin ja ohjelmistotestauksessa löytämättömien virheiden määrän arviointiin.</p>
<p>Latausasemien kohdalla hylkeitä ovat asemat, ensimmäinen pyynti on OCM ja toinen AFIR-kooste. Päällekkäisyys kertoo, kuinka moni asema ei ole kummassakaan.</p>
</section>
<section id="miksi-naiivi-laskenta-on-tässä-väärin" class="level3">
<h3 class="anchored" data-anchor-id="miksi-naiivi-laskenta-on-tässä-väärin">Miksi naiivi laskenta on tässä väärin</h3>
<p>Menetelmä olettaa, että jokainen asema päätyy rekisteriin toisistaan riippumatta. Edellinen luku osoitti, ettei näin ole. Operaattori joko toimittaa tietonsa AFIR-koosteeseen tai ei — ja jos toimittaa, käytännössä kaikki sen asemat tulevat kerralla. Alustatoimittajan tapauksessa päätös tehdään vielä tasoa ylempänä.</p>
<p>Havaintoja ei siis ole tuhansia vaan kymmeniä. Naiivi laskenta olettaa tuhansia riippumattomia kolikonheittoja siellä missä niitä on muutamia kymmeniä, ja tuottaa siksi aivan liian kapean epävarmuusvälin.</p>
<p>Oikea rakenne on kaksitasoinen. Ensin arvioidaan, kuinka moni <strong>operaattori</strong> puuttuu. Sitten arvioidaan, kuinka monta asemaa puuttuvilla operaattoreilla on, käyttäen havaittua operaattorikokojen jakaumaa.</p>
</section>
<section id="operaattorit-linkitetään-käsin" class="level3">
<h3 class="anchored" data-anchor-id="operaattorit-linkitetään-käsin">Operaattorit linkitetään käsin</h3>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb14-1">ocm_operaattorit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb14-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(operaattori)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb14-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(operaattori)</span>
<span id="cb14-4"></span>
<span id="cb14-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kahdenkymmenen toimijan linkitys tehdään käsin. Sumea nimivertailu ei</span></span>
<span id="cb14-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># tunnista, että "VIRTA" ja "Liikennevirta" ovat sama yhtiö, eikä erota</span></span>
<span id="cb14-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># operaattoria merkinnästä aseman hallinnasta.</span></span>
<span id="cb14-8">vastaavuudet_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tibble<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tribble</span>(</span>
<span id="cb14-9">  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>ocm,                                        <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>afir,</span>
<span id="cb14-10">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ABC Lataus (FI)"</span>,                           <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ABC"</span>,</span>
<span id="cb14-11">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ionity"</span>,                                    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IONITY"</span>,</span>
<span id="cb14-12">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"K Lataus"</span>,                                  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"K-lataus"</span>,</span>
<span id="cb14-13">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lidl"</span>,                                      <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lidl"</span>,</span>
<span id="cb14-14">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Neste Lataus"</span>,                              <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Neste Markkinointi Oy"</span>,</span>
<span id="cb14-15">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Plugit"</span>,                                    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Plugit Finland oy"</span>,</span>
<span id="cb14-16">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Recharge (Formerly Fortum Charge &amp; Drive)"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Recharge"</span>,</span>
<span id="cb14-17">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tesla (Tesla-only charging)"</span>,               <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tesla"</span>,</span>
<span id="cb14-18">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VIRTA"</span>,                                     <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Liikennevirta"</span>,</span>
<span id="cb14-19">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eparking (Finland)"</span>,                        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eParking"</span></span>
<span id="cb14-20">)</span>
<span id="cb14-21"></span>
<span id="cb14-22"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Merkinnät, jotka eivät ole operaattoreita vaan tietoa aseman</span></span>
<span id="cb14-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># hallinnasta, tai saman toimijan toisia merkintöjä.</span></span>
<span id="cb14-24">ei_operaattoreita <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb14-25">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"(Business Owner at Location)"</span>,</span>
<span id="cb14-26">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"(Private Residence/Individual)"</span>,</span>
<span id="cb14-27">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Charge &amp; Drive (Fortum - NO)"</span>,   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Rechargen entinen nimi</span></span>
<span id="cb14-28">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tesla (including non-tesla)"</span>     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># sama yhtiö, eri latausverkko</span></span>
<span id="cb14-29">)</span>
<span id="cb14-30"></span>
<span id="cb14-31">ocm_op_puhdas <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ocm_operaattorit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>operaattori <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> ei_operaattoreita)</span>
<span id="cb14-32"></span>
<span id="cb14-33"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb14-34">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vastaavuustaulussa tuntematon OCM-nimi"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb14-35">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(vastaavuudet_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ocm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> ocm_operaattorit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>operaattori),</span>
<span id="cb14-36">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vastaavuustaulussa tuntematon AFIR-nimi"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb14-37">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(vastaavuudet_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>afir <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> ops<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_virallinen),</span>
<span id="cb14-38">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vastaavuudet eivät ole yksikäsitteisiä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb14-39">    <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">duplicated</span>(vastaavuudet_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ocm)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;&amp;</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">duplicated</span>(vastaavuudet_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>afir)),</span>
<span id="cb14-40">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Poistettu nimi ei löydy aineistosta"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb14-41">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all</span>(ei_operaattoreita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> ocm_operaattorit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>operaattori)</span>
<span id="cb14-42">)</span>
<span id="cb14-43"></span>
<span id="cb14-44">n1_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(ocm_op_puhdas)</span>
<span id="cb14-45">n2_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(ops)</span>
<span id="cb14-46">m_op  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(vastaavuudet_op)</span>
<span id="cb14-47"></span>
<span id="cb14-48">vain_afir <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">setdiff</span>(ops<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>op_virallinen, vastaavuudet_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>afir)</span>
<span id="cb14-49">vain_ocm  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">setdiff</span>(ocm_op_puhdas<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>operaattori, vastaavuudet_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ocm)</span></code></pre></div></div>
</details>
</div>
<p>Linkitys tehdään käsin eikä sumealla nimivertailulla. Kokeilin ensin automaattista vertailua, ja se löysi kymmenestä vastaavuudesta kolme. Kaksikymmentä toimijaa on niin vähän, että käsityö on sekä tarkempaa että läpinäkyvämpää: taulukosta näkee mitä on tehty ja miksi.</p>
<p>OCM tuntee 16 operaattoria, AFIR 18, ja yhteisiä on 10.</p>
<p><strong>Kiinnostavin havainto on siinä, keitä puuttuu.</strong> AFIR-rekisterissä on 8 operaattoria, joita OCM ei tunne. Joukossa on merkittäviä toimijoita, ei pelkkiä pieniä. Se kertoo, ettei joukkoistettu rekisteri kata edes suuria latausoperaattoreita — mikä on juuri se peittävyyden puute, jota tässä yritetään mitata.</p>
<p>Vastaavasti OCM tuntee 6 operaattoria, joita AFIR ei tunne. Nämä ovat toimijoita, jotka eivät ole täyttäneet lakisääteistä ilmoitusvelvollisuuttaan — tai jotka ovat lopettaneet toimintansa ilman että OCM:n merkintä on poistettu.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb15-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Bayesläinen posteriori hilalla: hypergeometrinen uskottavuus ja</span></span>
<span id="cb15-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Jeffreysin priori. Yksi parametri, joten MCMC:tä ei tarvita.</span></span>
<span id="cb15-3">posteriori_N <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(n1, n2, m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kerroin =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_kerroin =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">200</span>) {</span>
<span id="cb15-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"m ei voi ylittää otoskokoja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> m <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(n1, n2),</span>
<span id="cb15-5">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"m on nolla"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> m <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb15-6">  N_min <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> n1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> n2 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> m</span>
<span id="cb15-7"></span>
<span id="cb15-8">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">repeat</span> {</span>
<span id="cb15-9">    N <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> N_min<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ceiling</span>(N_min <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> kerroin)</span>
<span id="cb15-10">    lp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lchoose</span>(n2, m) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lchoose</span>(N <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> n2, n1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> m) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lchoose</span>(N, n1) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(N)</span>
<span id="cb15-11">    lp[<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.finite</span>(lp)] <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">Inf</span></span>
<span id="cb15-12">    p <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">exp</span>(lp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(lp)); p <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> p <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(p)</span>
<span id="cb15-13">    hanta <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(p[N <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(N) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.99</span>])</span>
<span id="cb15-14">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (hanta <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-6</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">||</span> kerroin <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> max_kerroin) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span></span>
<span id="cb15-15">    kerroin <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> kerroin <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb15-16">  }</span>
<span id="cb15-17"></span>
<span id="cb15-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb15-19">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posteriorin häntä ei mene nollaan – hila on liian lyhyt"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> hanta <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-4</span>,</span>
<span id="cb15-20">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posteriorin huippu on hilan reunassa"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.max</span>(p) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(p) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span></span>
<span id="cb15-21">  )</span>
<span id="cb15-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N =</span> N, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tiheys =</span> p)</span>
<span id="cb15-23">}</span>
<span id="cb15-24"></span>
<span id="cb15-25">post_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posteriori_N</span>(n1_op, n2_op, m_op)</span>
<span id="cb15-26">naytteet_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sample</span>(post_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>N, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">replace =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">prob =</span> post_op<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>tiheys)</span>
<span id="cb15-27"></span>
<span id="cb15-28">op_arvio <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb15-29">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(naytteet_op),</span>
<span id="cb15-30">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">q025 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(naytteet_op, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.025</span>)),</span>
<span id="cb15-31">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">q975 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(naytteet_op, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.975</span>))</span>
<span id="cb15-32">)</span></code></pre></div></div>
</details>
</div>
<p>Operaattoreiden kokonaismäärän arvio on <strong>30</strong> (95 %:n väli 25–44), kun havaittuja on 24.</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb16-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Asemien kokonaismäärä: havaitut asemat + puuttuvien operaattoreiden</span></span>
<span id="cb16-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># asemat. Puuttuville arvotaan koko havaitusta kokojakaumasta.</span></span>
<span id="cb16-3">koot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(op_id) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(n)</span>
<span id="cb16-4"></span>
<span id="cb16-5">havaitut_asemat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(nap)</span>
<span id="cb16-6"></span>
<span id="cb16-7">naytteet_asemat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8000</span>, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(i) {</span>
<span id="cb16-8">  n_op_yht <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sample</span>(naytteet_op, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb16-9">  n_piilossa_op <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(n_op_yht <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> n2_op, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb16-10">  piilossa <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (n_piilossa_op <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb16-11">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sample</span>(koot, n_piilossa_op, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">replace =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb16-12">  havaitut_asemat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> piilossa</span>
<span id="cb16-13">})</span>
<span id="cb16-14"></span>
<span id="cb16-15">asema_arvio <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb16-16">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(naytteet_asemat),</span>
<span id="cb16-17">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">q025 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(naytteet_asemat, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.025</span>)),</span>
<span id="cb16-18">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">q975 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(naytteet_asemat, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.975</span>))</span>
<span id="cb16-19">)</span>
<span id="cb16-20"></span>
<span id="cb16-21"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb16-22">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Arvio on pienempi kuin havaittu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> asema_arvio[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mediaani"</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> havaitut_asemat</span>
<span id="cb16-23">)</span></code></pre></div></div>
</details>
</div>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-01-kolme-lukua_files/figure-html/kuva-posteriori-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Latausasemien kokonaismäärän posteriorijakauma.</figcaption>
</figure>
</div>
</div>
</div>
<p><strong>Miten kuvaa luetaan.</strong> Molemmissa paneeleissa muodon korkein kohta on todennäköisin arvo ja leveys kertoo epävarmuuden. Alla oleva paksu viiva näyttää välin, jolle arvo osuu puolen todennäköisyydellä, ja ohut viiva 95 prosentin välin. Punainen katkoviiva näyttää havaitun määrän.</p>
<p>Ylempi paneeli koskee operaattoreita, alempi asemia. Jälkimmäinen on leveämpi, koska siihen kertyy epävarmuutta kahdesta lähteestä: siitä montako operaattoria puuttuu ja siitä kuinka suuria ne ovat.</p>
<div class="callout callout-style-default callout-warning callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Warning</span>Kolme varausta, jotka pitää sanoa ääneen
</div>
</div>
<div class="callout-body-container callout-body">
<p><strong>Rekisterit eivät ole riippumattomia.</strong> Molemmat saavat tietonsa osittain samoilta operaattoreilta. Positiivinen riippuvuus johtaa populaatiokoon aliarvioon. Kahdesta lähteestä riippuvuutta ei voi testata — siihen tarvittaisiin kolmas todella riippumaton lähde.</p>
<p><strong>Puuttuvat operaattorit eivät ole satunnainen otos havaituista.</strong> Malli arpoo niille asemamäärän havaitusta kokojakaumasta. Todellisuudessa rekisteristä puuttuva toimija on todennäköisemmin pieni kuin suuri, joten arvio on todennäköisesti yläkanttiin.</p>
<p><strong>Otantavirhettä ei ole.</strong> Tässä ei ole otosta perusjoukosta. Epävarmuus syntyy havaitsemisprosessista ja linkityksestä, ei otannasta. Siksi perinteinen merkitsevyystestaus on tässä osin väärä työkalu ja painopiste on jakaumissa.</p>
</div>
</div>
</section>
<section id="herkkyysanalyysi" class="level3">
<h3 class="anchored" data-anchor-id="herkkyysanalyysi">Herkkyysanalyysi</h3>
<p>Riippuvuutta ei voi testata, mutta sen vaikutuksen voi laskea. Riippuvuuden voimakkuutta kuvaava kerroin saa arvon yksi, kun lähteet ovat riippumattomia, ja ykköstä suurempia arvoja, kun molemmissa esiintyminen on yleisempää kuin sattuma antaisi olettaa.</p>
<div class="cell">
<div class="cell-output-display">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/latausverkko-01-kolme-lukua_files/figure-html/herkkyys-1.png" class="img-fluid figure-img" width="1350"></p>
<figcaption>Kuinka paljon arvio muuttuu, jos rekisterit eivät ole riippumattomia.</figcaption>
</figure>
</div>
</div>
</div>
<p>Käyrä on analyysin rehellisin osa. Se sanoo: jos rekisterit ovat riippumattomia, arvio on tämä. Jos ne kopioivat toisiaan, arvio on merkittävästi suurempi. En voi tietää kumpi pitää paikkansa. Voin kertoa, kuinka paljon sillä on väliä.</p>
</section>
</section>
<section id="sarjan-pohja-aineisto" class="level2">
<h2 class="anchored" data-anchor-id="sarjan-pohja-aineisto">Sarjan pohja-aineisto</h2>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb17-1">asemat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb17-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">avain =</span> kanoninen, nimi, op_id, op_nimi, kunta, postinro,</span>
<span id="cb17-3">            lat, lon, aina_auki, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lahde =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AFIR"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb17-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_rows</span>(</span>
<span id="cb17-5">    ocm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">avain =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM|"</span>, ocm_id), nimi,</span>
<span id="cb17-6">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">op_nimi =</span> operaattori, kunta, postinro, lat, lon,</span>
<span id="cb17-7">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lahde =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"OCM"</span>)</span>
<span id="cb17-8">  ) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb17-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">haettu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.Date</span>())</span>
<span id="cb17-10"></span>
<span id="cb17-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Konnektoritaulu viittaa kanonisoituun avaimeen</span></span>
<span id="cb17-12">liitokset <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nap_kon <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb17-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(nap, avain, kanoninen), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"avain"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb17-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">avain =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(kanoninen, avain)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb17-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>kanoninen)</span>
<span id="cb17-16"></span>
<span id="cb17-17"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(</span>
<span id="cb17-18">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Asemataulu tyhjä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(asemat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,</span>
<span id="cb17-19">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Avaimissa duplikaatteja"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">duplicated</span>(asemat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>avain)),</span>
<span id="cb17-20">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Liitokset eivät täsmää asemiin"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span></span>
<span id="cb17-21">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(liitokset<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>avain <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> asemat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>avain) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>,</span>
<span id="cb17-22">  <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tariffisarake puuttuu"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"tariffi"</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(liitokset)</span>
<span id="cb17-23">)</span>
<span id="cb17-24"></span>
<span id="cb17-25">qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(asemat, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"asemat.qs"</span>))</span>
<span id="cb17-26">qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(liitokset, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"liitokset.qs"</span>))</span>
<span id="cb17-27">qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(ops, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"operaattorit.qs"</span>))</span>
<span id="cb17-28">qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N =</span> naytteet_asemat),</span>
<span id="cb17-29">             <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posteriori_asemamaara.qs"</span>))</span></code></pre></div></div>
</details>
</div>
<p>Viimeinen tiedosto erottaa tämän sarjan tavanomaisesta verkostoanalyysistä. Kun myöhemmin lasketaan, mitkä asemat ovat verkon kriittisimpiä, tieto siitä että rekisteri on epätäydellinen ei jää tähän postaukseen vaan kulkee mukana.</p>
</section>
<section id="takaisin-siihen-lukuun" class="level2">
<h2 class="anchored" data-anchor-id="takaisin-siihen-lukuun">Takaisin siihen lukuun</h2>
<p>Uutisessa toistettu latauspisteiden lukumäärä ei ole väärä. Se on epätäydellinen tavalla, joka on mitattavissa mutta jota ei mitata.</p>
<p>Viisi asiaa jää käteen.</p>
<p><strong>Kysymys pitää esittää tarkemmin.</strong> Sijainti, latauslaite ja pistoke ovat eri asioita, ja niiden lukumäärät eroavat kertaluokalla. Tavoite, joka ei kerro tasoa, ei ole tavoite.</p>
<p><strong>Rekisteri on mittalaite, ei todellisuus.</strong> Molemmissa tarkastelluissa rekistereissä on rakenteellisia ongelmia: tunnisteita jotka eivät yksilöi, laitteita jotka on kirjattu kahdesti, kenttä joka väittää olevansa laadunvarmistus mutta on aikaleima.</p>
<p><strong>Havaintoyksikkö ei ole se, miltä näyttää.</strong> Asemat eivät päädy rekisteriin yksi kerrallaan vaan operaattorin ja viime kädessä alustatoimittajan päätöksellä. Menetelmä, joka olettaa muuta, tuottaa liian kapean epävarmuusvälin — eli näyttää varmemmalta kuin on.</p>
<p><strong>Automaattinen ei aina voita käsityötä.</strong> Sumea nimivertailu löysi kymmenestä operaattoriparista kolme. Käsin tehty taulukko löysi kaikki ja on lisäksi tarkistettavissa. Kahdenkymmenen rivin kohdalla automaatio oli väärä työkalu.</p>
<p><strong>Epävarmuus ei ole heikkous.</strong> Jos AFIR-tavoitteiden toteutumista seurataan luvulla, jonka virhemarginaalia ei tunneta, seuranta mittaa rekisteröintikäytäntöjen muutosta yhtä paljon kuin infrastruktuurin rakentumista.</p>
<p>Seuraavassa osassa siirrytään asemien lukumäärästä niiden tehoon. Sielläkin julkisuudessa liikkuu yksi luku — keskimääräinen latausteho — ja sekin osoittautuu jakaumaksi, jolla on useampi huippu kuin yksi.</p>
<hr>
</section>
<section id="mitä-tästä-on-hyötyä-yrityksellesi" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tästä-on-hyötyä-yrityksellesi">Mitä tästä on hyötyä yrityksellesi</h2>
<p>Merkintä-takaisinpyynti kuulostaa ekologiasta lainatulta kuriositeetilta. Se on yksi käyttökelpoisimmista menetelmistä, joita tiedän, ja sitä käytetään liike-elämässä hämmästyttävän vähän. Se vastaa kysymykseen, johon mikään muu menetelmä ei vastaa: <strong>kuinka paljon on sitä, mitä et ole havainnut?</strong></p>
<p><strong>Kuinka monta järjestelmää organisaatiollasi oikeasti on?</strong> DORA ja NIS2 edellyttävät kriittisten toimintojen ja ICT-omaisuuden tunnistamista. Jokainen laitehallintatietokanta, jonka olen nähnyt, on epätäydellinen. Mutta jos on tietokanta ja erikseen verkkoskannauksen tuottama laitelista, päällekkäisyys kertoo kuinka monta järjestelmää puuttuu molemmista. Se luku on johdolle yleensä epämiellyttävä yllätys — ja juuri siksi arvokas ennen kuin valvoja kysyy.</p>
<p><strong>Kuinka paljon petoksia jää havaitsematta?</strong> Jos kaksi toisistaan riippumatonta kontrollia löytävät osittain samoja tapauksia, päällekkäisyydestä voi estimoida havaitsemattomien määrän. Tämä muuttaa raportoinnin luonteen: sen sijaan että kerrottaisiin “löysimme 40 tapausta”, voidaan kertoa “kontrollien peittävyys on noin 60 %, joten tapauksia on todennäköisesti 60–80”. Ensimmäinen luku kertoo kontrollien aktiivisuudesta, jälkimmäinen riskistä.</p>
<p><strong>Tarkista, onko avaimesi avain.</strong> Tämän postauksen työläin osuus ei ollut mallinnus vaan sen huomaaminen, ettei tunniste yksilöi. Sama ongelma on lähes jokaisessa integraatiossa, jossa kaksi järjestelmää yhdistetään kentällä, jonka oletetaan olevan uniikki. Virhe ei näy virheilmoituksena. Se näkyy väärinä lukuina, joita kukaan ei kyseenalaista.</p>
<p><strong>Älä automatisoi sitä, mikä on nopeampi tehdä käsin.</strong> Kahdenkymmenen toimijan linkitys sumealla haulla oli virhealtis ja läpinäkymätön; käsin tehtynä se vei viisi minuuttia ja on tarkistettavissa. Automaatio kannattaa siellä missä volyymi on suuri tai työ toistuu — ei siellä missä se korvaa harkintaa kahdenkymmenen rivin kohdalla.</p>
<p><strong>Ja kysy, mitä kenttä oikeasti mittaa.</strong> Löysin rekisteristä kentän nimeltä “viimeksi varmistettu”, joka ei mittaa varmistusta vaan integraation aktiivisuutta. Vastaavia kenttiä on jokaisessa järjestelmässä: “viimeksi päivitetty”, “aktiivinen”, “vahvistettu”. Nimi kertoo mitä kentän piti mitata, ei sitä mitä se mittaa.</p>
<p>Jos organisaatiossasi on kaksi rekisteriä, joiden pitäisi kuvata samaa asiaa mutta jotka eivät täsmää, siinä on analyysi odottamassa. Teen tätä työtä vuokrattavana Head of Datana ja projektikohtaisesti — hinnasto ja yhteystiedot löytyvät <a href="https://kristianvepsalainen.com">sivustolta</a>.</p>
<hr>
<p><em>Aineistot: Open Charge Map API v3 ja Fintraffic AFIR / Digitraffic, molemmat haettu 2026-09-10. Koodi on kokonaisuudessaan tässä postauksessa. Maailma on jakauma.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>latausverkko</category>
  <category>rekisterit</category>
  <category>datan laatu</category>
  <guid>https://kristianvepsalainen.com/posts/latausverkko-01-kolme-lukua.html</guid>
  <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Mitä lakialoitteille todella tapahtuu?</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa9-aloitteiden-lapimeno.html</link>
  <description><![CDATA[ 





<blockquote class="blockquote">
<p><strong>Sarjan idea.</strong> Tässä osassa tapahtui jotain, mikä on itse sarjan opetus: aioimme rakentaa ennustemallin lakialoitteen läpimenolle, mutta data osoitti, että läpimeno on niin harvinaista, ettei mallia kannata rakentaa. Kun uusi tieto muuttaa kysymyksen, kysymys on vaihdettava — ei väännettävä dataa vastaamaan vanhaan.</p>
</blockquote>
<section id="uutiskoukku-kysymys-joka-piti-vaihtaa" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-kysymys-joka-piti-vaihtaa">Uutiskoukku: kysymys, joka piti vaihtaa</h2>
<p>Alkuperäinen kysymys oli houkutteleva: <em>mikä ennustaa, meneekö lakialoite läpi?</em> Mutta kun katsoimme dataa, läpimenneitä oli häviävän vähän — niin vähän, ettei “ennustaminen” ollut mielekästä. Se ei ollut datan puute vaan <strong>löydös</strong>: valtaosa lakialoitteista ei etene minnekään. Joten oikea kysymys on: <em>mitä niille sitten tapahtuu — ja miksi niitä tehdään?</em></p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(patchwork)</span>
<span id="cb1-2">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-4">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey30"</span>),</span>
<span id="cb1-8">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">legend.position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"top"</span>))</span>
<span id="cb1-9"></span>
<span id="cb1-10">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-11">init        <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_init.qs"</span>))</span>
<span id="cb1-12">tulokset    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aloite_tulokset.qs"</span>))</span>
<span id="cb1-13">mp          <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp.qs"</span>))</span>
<span id="cb1-14">mp_years    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp_years.qs"</span>))</span>
<span id="cb1-15">ryhma_years <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ryhma_years.qs"</span>))</span>
<span id="cb1-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#vaski_raw   &lt;- qs2::qd_read(file.path(DATA, "vaski_raw.qs")) #Tarvitaan vain omalla koneella la_status-tuotantoon.</span></span>
<span id="cb1-17">vaski_docs  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_docs.qs"</span>))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="kolme-kohtaloa-oma-mietintö-maininta-raukeaminen" class="level2">
<h2 class="anchored" data-anchor-id="kolme-kohtaloa-oma-mietintö-maininta-raukeaminen">Kolme kohtaloa: oma mietintö, maininta, raukeaminen</h2>
<p>Lakialoitteella on käytännössä kolme mahdollista jälkeä. Se voi (1) saada <strong>oman valiokuntamietinnön</strong> (harvinaista), (2) tulla <strong>mainituksi</strong> jonkin mietinnön käsittelyssä — tyypillisesti hallituksen esityksen rinnalla — tai (3) <strong>raueta</strong> ilman jälkeä. Rakennamme nämä kolme luokkaa.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">norm_tunnus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_remove_all</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_to_upper</span>(x), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">s"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_remove</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VP$"</span>)</span>
<span id="cb2-2"></span>
<span id="cb2-3">status_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"la_status.qs"</span>)</span>
<span id="cb2-4"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(status_path)) {</span>
<span id="cb2-5">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Poimi kaikki LA-viittaukset valiokuntamietintöjen KOKO tekstistä</span></span>
<span id="cb2-6">  poimi_la <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(xml_str) {</span>
<span id="cb2-7">    txt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tryCatch</span>(xml2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_text</span>(xml2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">read_xml</span>(xml_str)), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">error =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(e) <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>)</span>
<span id="cb2-8">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">norm_tunnus</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_extract_all</span>(txt, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"(?i)LA</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">s?</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">d+/</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">d{4}"</span>)[[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]]))</span>
<span id="cb2-9">  }</span>
<span id="cb2-10">  mietinnot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaski_docs <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(tyyppi, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VM$"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-11">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(vaski_raw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(Id, XmlData), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Id"</span>))</span>
<span id="cb2-12">  mainitut <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mietinnot<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>XmlData <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map</span>(poimi_la) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unlist</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>()</span>
<span id="cb2-13">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">la_norm =</span> mainitut), status_path)</span>
<span id="cb2-14">}</span>
<span id="cb2-15">mainitut <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(status_path)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>la_norm</span>
<span id="cb2-16"></span>
<span id="cb2-17">la <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> init <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(tyyppi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_allek =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_int</span>(allekirjoittajat, length),</span>
<span id="cb2-19">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tunnus_norm =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">norm_tunnus</span>(tunnus)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(tulokset <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(id, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oma_mietinto =</span> eteni), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"id"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oma_mietinto =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.logical</span>(oma_mietinto), <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>),</span>
<span id="cb2-22">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kohtalo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb2-23">           oma_mietinto                    <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sai oman mietinnön"</span>,</span>
<span id="cb2-24">           tunnus_norm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> mainitut       <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mainittu mietinnössä"</span>,</span>
<span id="cb2-25">           <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>                            <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Rauennut / ei käsitelty"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-26">           <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sai oman mietinnön"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mainittu mietinnössä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Rauennut / ei käsitelty"</span>)))</span>
<span id="cb2-27"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA-taulu tyhjä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(la) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb2-28"></span>
<span id="cb2-29">jakauma <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> la <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(kohtalo) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n))</span>
<span id="cb2-30">jakauma</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 3 × 3
  kohtalo                     n  osuus
  &lt;fct&gt;                   &lt;int&gt;  &lt;dbl&gt;
1 Sai oman mietinnön         31 0.0188
2 Mainittu mietinnössä      419 0.254 
3 Rauennut / ei käsitelty  1197 0.727 </code></pre>
</div>
</div>
</section>
<section id="jakauma-ensin-valtaosa-raukeaa" class="level2">
<h2 class="anchored" data-anchor-id="jakauma-ensin-valtaosa-raukeaa">Jakauma ensin: valtaosa raukeaa</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(jakauma, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_rev</span>(kohtalo), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> kohtalo)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_text</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">label =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(osuus, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hjust =</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.6</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">expand =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">expansion</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">18</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)]), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">guide =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"none"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lakialoitteen kolme kohtaloa"</span>,</span>
<span id="cb4-7">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus kaikista lakialoitteista"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa9-aloitteiden-lapimeno_files/figure-html/jakauma-kuva-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Tässä on koko postauksen kärki yhtenä kuvana. Jos joku sanoisi “lakialoitteiden läpimenoprosentti on X”, se olisi pistearvo, joka piilottaa olennaisen: <strong>valtaosa ei etene lainkaan</strong>, ja “läpimeno” omana esityksenä on 1.9% luokkaa. Jakauma kertoo sen, minkä yksi luku kätkisi.</p>
</section>
<section id="kuka-lakialoitteita-tekee" class="level2">
<h2 class="anchored" data-anchor-id="kuka-lakialoitteita-tekee">Kuka lakialoitteita tekee?</h2>
<p>Jos aloitteet eivät juuri etene, miksi niitä tehdään paljon? Katsotaan tekijöitä. Rakennamme aseman (hallitus/oppositio) jättövuoden mukaan.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">hallitus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tribble</span>(</span>
<span id="cb5-2">  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>vuosi, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>hallituspuolueet,</span>
<span id="cb5-3">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2016</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),</span>
<span id="cb5-4">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2017</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sininen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),          <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2018</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sininen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),</span>
<span id="cb5-5">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmisto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb5-6">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2020</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmisto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb5-7">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2021</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmisto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb5-8">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2022</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmisto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb5-9">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kristillisdemokraattinen"</span>),</span>
<span id="cb5-10">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2024</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kristillisdemokraattinen"</span>),</span>
<span id="cb5-11">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2025</span>,<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kristillisdemokraattinen"</span>))</span>
<span id="cb5-12"></span>
<span id="cb5-13">asema_taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ryhma_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(hallitus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuosi"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">on_hallitus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map2_lgl</span>(ryhma, hallituspuolueet,</span>
<span id="cb5-15">    \(r,h) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.null</span>(h)) <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(r, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fixed</span>(h, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ignore_case =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>))))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(on_hallitus)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tekija =</span> henkilo_nro, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vpvuosi =</span> vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">on_hallitus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(on_hallitus) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(tekija, vpvuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">asema =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(on_hallitus, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hallitus"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oppositio"</span>))</span>
<span id="cb5-20"></span>
<span id="cb5-21">la_asema <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> la <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(asema_taulu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"tekija"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vpvuosi"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">drop_na</span>(asema)</span>
<span id="cb5-22"></span>
<span id="cb5-23"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Volyymi ajassa aseman mukaan</span></span>
<span id="cb5-24">vol <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> la_asema <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(vpvuosi, asema)</span>
<span id="cb5-25"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(vol, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vpvuosi, n, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> asema)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_point</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)])) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lakialoitteet ovat pääosin opposition väline"</span>,</span>
<span id="cb5-29">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lakialoitteiden määrä jättäjän aseman mukaan"</span>,</span>
<span id="cb5-30">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lakialoitteita"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa9-aloitteiden-lapimeno_files/figure-html/asema-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="onko-lakialoite-opposition-työkalu-tilastollinen-testi" class="level2">
<h2 class="anchored" data-anchor-id="onko-lakialoite-opposition-työkalu-tilastollinen-testi">Onko lakialoite opposition työkalu? Tilastollinen testi</h2>
<p>Testataan suoraan: tekevätkö oppositioedustajat enemmän lakialoitteita kuin hallitusedustajat? Rakennamme edustajavuositason aineiston (myös nollat mukana) ja vertaamme jakaumia. Lukumäärädata on vino, joten käytämme jakaumavapaata Wilcoxonin testiä ja efektikokona rank-biserialia.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1">la_per_hlo <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> la <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(tekija, vpvuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"n_la"</span>)</span>
<span id="cb6-2">paneeli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro, vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(la<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vpvuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(asema_taulu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"tekija"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuosi"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vpvuosi"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(la_per_hlo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"tekija"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuosi"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vpvuosi"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_la =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(n_la, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>L)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">drop_na</span>(asema)</span>
<span id="cb6-7"></span>
<span id="cb6-8">wt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">wilcox.test</span>(n_la <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> asema, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> paneeli)</span>
<span id="cb6-9">n_opp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oppositio"</span>); n_hal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hallitus"</span>)</span>
<span id="cb6-10">rank_biserial <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(wt<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (n_opp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> n_hal)</span>
<span id="cb6-11">paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(asema) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(n_la), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keskiarvo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(n_la),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_edustajavuosia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_cols</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">signif</span>(wt<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">rank_biserial =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(rank_biserial,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 2 × 6
  asema     mediaani keskiarvo n_edustajavuosia           p rank_biserial
  &lt;chr&gt;        &lt;dbl&gt;     &lt;dbl&gt;            &lt;int&gt;       &lt;dbl&gt;         &lt;dbl&gt;
1 Hallitus         0      0.12              490 0.000000539         0.103
2 Oppositio        0      0.34              697 0.000000539         0.103</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Testin valinta">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Testin valinta
</div>
</div>
<div class="callout-body-container callout-body">
<p>Vertaamme kahta ryhmää vinolla lukumäärämuuttujalla, jossa on paljon nollia, joten keskiarvo­vertailu (t-testi) olisi harhaanjohtava. Wilcoxon vertaa koko jakaumia, ja rank-biserial kertoo eron suuruuden. Nollat (edustajavuodet ilman yhtään aloitetta) ovat mukana — muuten mittaisimme väärää populaatiota.</p>
</div>
</div>
</section>
<section id="keskittymä-harva-tekee-monta" class="level2">
<h2 class="anchored" data-anchor-id="keskittymä-harva-tekee-monta">Keskittymä: harva tekee monta</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1">gini <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x){ x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sort</span>(x); n <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x); <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">return</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)</span>
<span id="cb8-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq_len</span>(n)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>n<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">-1</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>x)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(n<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x)) }</span>
<span id="cb8-3">per_tekija <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> la <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(tekija, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"n_la"</span>)</span>
<span id="cb8-4">lorenz <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> per_tekija <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(n_la) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">o_tekijat =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">row_number</span>()<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">o_aloitteet =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cumsum</span>(n_la)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_la))</span>
<span id="cb8-6"></span>
<span id="cb8-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(lorenz, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(o_tekijat, o_aloitteet)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb8-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_abline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey60"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb8-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_area</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb8-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb8-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb8-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lakialoitteiden teko on keskittynyttä (Gini "</span>,</span>
<span id="cb8-13">                      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gini</span>(per_tekija<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n_la),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">")"</span>),</span>
<span id="cb8-14">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lorenz-käyrä: harva edustaja tekee suuren osan aloitteista"</span>,</span>
<span id="cb8-15">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus tekijöistä"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus lakialoitteista"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa9-aloitteiden-lapimeno_files/figure-html/gini-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-lakialoite-signaalina" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-lakialoite-signaalina">Mitä tämä tarkoittaa — lakialoite signaalina</h2>
<p>Kun yhdistää nämä: valtaosa lakialoitteista raukeaa, ne ovat pääosin opposition tekemiä, ja niiden teko on keskittynyt harvoille. Tästä piirtyy tulkinta, joka on sekä rehellinen että päättäjälle valaiseva: <strong>lakialoite toimii useammin poliittisena signaalina kuin väylänä lainsäädäntöön.</strong> Se on tapa nostaa aihe esiin, osoittaa kanta ja tuottaa julkinen dokumentti — ei realistinen reitti lakiin, koska lainsäädäntö kulkee lähes aina hallituksen esitysten kautta.</p>
<div class="callout callout-style-default callout-important callout-titled" title="Kuvaus, ei arvostelu">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Kuvaus, ei arvostelu
</div>
</div>
<div class="callout-body-container callout-body">
<p>Tämä ei tarkoita, että lakialoitteet olisivat turhia tai tekijänsä epärehellisiä. Signalointi on osa demokraattista prosessia: aihe voi myöhemmin päätyä hallituksen esitykseksi, ja aloite on osa sitä keskustelua. Kuvaamme järjestelmän toimintaa, emme arvota edustajien motiiveja.</p>
</div>
</div>
</section>
<section id="minne-ennustaminen-kuuluu" class="level2">
<h2 class="anchored" data-anchor-id="minne-ennustaminen-kuuluu">Minne ennustaminen kuuluu</h2>
<p>Jos haluaa ennustaa lainsäädännön läpimenoa, oikea kohde ei ole lakialoite vaan <strong>hallituksen esitys (HE)</strong>: ne etenevät, niistä äänestetään, ja niissä on todellista vaihtelua. Se on luonteva seuraava askel — ja siihen liittyy henkilötason äänestysdata, jota käsittelemme myöhemmin.</p>
</section>
<section id="uutiskoukku-takaisin" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-takaisin">Uutiskoukku takaisin</h2>
<p>Kannattaako lakialoitetta tehdä? Jos mittarina on laiksi tuleminen, vastaus on lähes aina ei. Mutta se ei ole koko tarina — aloite on signaali, ja signaloinnilla on oma arvonsa. Tärkeintä on, ettei “läpimenoprosentti” yhtenä lukuna piilota tätä todellisuutta.</p>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Kun oletettu mittari osoittautuu vääräksi, oikean kysymyksen löytäminen on puolet työstä. Rakennan analytiikkaa, joka kertoo mitä data oikeasti tukee — ei mitä haluttaisiin sen sanovan. <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Kiitos lukijalle kommenteista, jotka terävöittivät tätä osaa. Datalähde: Eduskunnan avoin data, VaskiData (CC BY 4.0). Hallituskokoonpanot koodattu käsin.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>jakaumat</category>
  <category>lakialoitteet</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa9-aloitteiden-lapimeno.html</guid>
  <pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Rekisteririskimittari</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/ytj-10-riskimittari.html</link>
  <description><![CDATA[ 





<p>Tämä sarja on kulkenut osa osalta läpi suomalaisen kaupparekisterin: perustiedot, ilmoitusvirran, digitaaliset tilinpäätökset, yritysten elinkaaret, kuolintavat, sääntelyn jäljen, muuttoliikkeen ja yritysjärjestelyt. Nyt on aika kysyä kysymys, joka on ollut koko ajan taustalla:</p>
<p><strong>Voiko pelkästä avoimesta rekisteridatasta rakentaa luottoriskimittarin, joka oikeasti toimii?</strong></p>
<p>Vastaus ei ole mielipide. Se on testattavissa — ja tämä osa on omistettu sille testille. Rakennamme mittarin, ja sitten yritämme kaikin tavoin osoittaa, ettei se toimi. Jos se selviää siitä, se on jotain arvoista.</p>
<p>Tämä on kohta, jossa data science eroaa datan esittelystä. Malli, jota ei ole validoitu tulevaisuudella, on hypoteesi. Malli, joka on, on työkalu.</p>
<section id="mistä-datassa-on-kyse" class="level2">
<h2 class="anchored" data-anchor-id="mistä-datassa-on-kyse">Mistä datassa on kyse?</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineistona PRH:n avoimet rekisteriaineistot (CC BY 4.0), rajattuna osakeyhtiöihin. Malli ennustaa yrityksen <strong>lakkaamista</strong> (END-tyypin rekisterimerkintä) kahden vuoden sisällä havaintohetkestä, käyttäen ainoastaan tietoa, joka oli saatavilla <strong>ennen</strong> havaintohetkeä.</p>
<p>Rehellisyyden vuoksi: lakkaaminen ei ole sama asia kuin luottotappio. Suurin osa lakkaamisista on hallittuja purkautumisia (ks. osa 5). Tämä mittari ennustaa yrityksen katoamista, mikä on luottoriskin <em>osatekijä</em>, ei sen koko kuva.</p>
</div>
</div>
</section>
<section id="asetelma-aitoa-ennustamista-ei-jälkiviisautta" class="level2">
<h2 class="anchored" data-anchor-id="asetelma-aitoa-ennustamista-ei-jälkiviisautta">Asetelma: aitoa ennustamista, ei jälkiviisautta</h2>
<p>Tämä on koko kirjoituksen tärkein kohta, ja se ansaitsee selityksen päättäjälle.</p>
<p>Riskimallin voi saada näyttämään loistavalta huijaamalla itseään. Yleisin tapa on antaa mallin nähdä tapahtumia, jotka ovat <em>osa</em> ennustettavaa asiaa. Lakkaava yritys tuottaa loppuvaiheessa runsaasti rekisterimerkintöjä — selvitystila, selvitysmiehet, purkautuminen. Jos malli saa nähdä ne, se “ennustaa” lakkaamista lakkaamisesta ja näyttää lähes erehtymättömältä. Se on kuin ennustaisi sadetta siitä, että maa on jo märkä.</p>
<p>Vältämme tämän kahdella säännöllä:</p>
<p><strong>Kiinteä havaintohetki.</strong> Kaikki yritykset — sekä myöhemmin lakanneet että selvinneet — arvioidaan samana kalenteripäivänä. Piirteet lasketaan vain sitä edeltävältä ikkunalta.</p>
<p><strong>Ajallinen validointi (out-of-time).</strong> Malli opetetaan aiemmalla havaintohetkellä ja testataan <strong>myöhemmällä</strong>, jota se ei ole koskaan nähnyt. Tämä on ankarampaa kuin satunnainen jako, ja se vastaa sitä, miten mallia oikeasti käytettäisiin: opetat menneellä, ennustat tulevaa.</p>
<p>Opetuskohortissa on 376 053 yritystä (lakkaamisosuus 9.3%) ja testikohortissa 382 874 (3.0%).</p>
</section>
<section id="malli" class="level2">
<h2 class="anchored" data-anchor-id="malli">Malli</h2>
<p><strong>Bayesilainen logistinen regressio.</strong> Valinta on tietoinen: yksinkertaisempi malli on tässä parempi kuin monimutkaisempi. Luottoriskissä mallin on oltava <strong>selitettävissä</strong> — sekä valvojalle että asiakkaalle, jolle päätös perustellaan. Musta laatikko, joka ennustaa marginaalisesti paremmin mutta jota ei voi selittää, on useimmissa käyttötapauksissa arvoton. Bayesilaisuus tuo lisäksi sen, mitä luottoriskissä eniten tarvitaan: <strong>epävarmuuden numeerisena, ei sanallisena.</strong></p>
</section>
<section id="testi-pärjääkö-malli-tulevaisuudessa" class="level2">
<h2 class="anchored" data-anchor-id="testi-pärjääkö-malli-tulevaisuudessa">Testi: pärjääkö malli tulevaisuudessa?</h2>
<p>Nyt malli pannaan töihin datalla, jota se ei ole nähnyt — kahden vuoden päässä opetushetkestä. Käytän kahta mittaria, ja molemmat ovat välttämättömiä.</p>
<p><strong>Erottelukyky (AUC)</strong> kertoo, kuinka hyvin malli asettaa lakkaavat yritykset riskijärjestyksessä selviävien edelle. Arvo 0,5 tarkoittaa kolikonheittoa, 1,0 täydellistä erottelua.</p>
<p><strong>Kalibraatio</strong> kertoo, ovatko todennäköisyydet <em>totta</em>: kun malli sanoo “10 %”, lakkaako todella noin 10 %? Tämä on se, mitä useimmat mallit eivät kerro — ja se on luottopäätöksessä tärkeämpi kuin AUC. Väärin kalibroitu malli antaa oikean järjestyksen mutta väärän hinnan.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-10-riskimittari_files/figure-html/validointi-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="mihin-riskiä-verrataan" class="level2">
<h2 class="anchored" data-anchor-id="mihin-riskiä-verrataan">Mihin riskiä verrataan?</h2>
<p>Yksittäinen riskiluku on merkityksetön ilman vertailukohtaa. “11 %:n lakkaamistodennäköisyys” kuulostaa korkealta tai matalalta riippuen täysin siitä, mikä on keskiverto — ja keskiverto tässä testijoukossa on 3.0%. Malli ei tuota absoluuttista tuomiota vaan <strong>sijoittaa yrityksen suhteessa muihin</strong>: sen tehtävä on levittää yritykset perustason ympärille niin, että riskisimmät erottuvat.</p>
<p>Tästä seuraa vastaus tärkeään kysymykseen: <strong>entä yritykset, joilla ei ole jalanjälkeä</strong> — ne, jotka eivät ole tehneet yhtään rekisterimerkintää havaintoikkunassa? Ne eivät jää mallin ulkopuolelle. Malli antaa niille arvion, joka nojaa pelkkään ikään, toimialaan ja sijaintiin — ja se arvio asettuu lähelle perustasoa. Tämä on oikea käyttäytyminen: kun signaalia ei ole, malli ei keksi riskiä eikä poista sitä, vaan palauttaa “keskiverto, kunnes toisin todistetaan”. Juuri siksi vertailu perustasoon on koko mallin tulkinnan ankkuri — ilman sitä riskiluku on numero ilman mittakaavaa.</p>
<div class="cell">
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Riskiryhmän vertailu koko populaation perustasoon</caption>
<colgroup>
<col style="width: 48%">
<col style="width: 21%">
<col style="width: 30%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Ryhmä</th>
<th style="text-align: left;">Osuus yrityksistä</th>
<th style="text-align: left;">Toteutunut lakkaamisosuus</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Koko testijoukko (perustaso)</td>
<td style="text-align: left;">100 %</td>
<td style="text-align: left;">3.0%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Malli nostaa ≥ 2× perustason yläpuolelle</td>
<td style="text-align: left;">35.1%</td>
<td style="text-align: left;">4.4%</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Taulukko on se, mitä riskipäällikkö kysyy: kun malli nostaa yrityksen selvästi perustason yläpuolelle, toteutuuko riski todella keskimääräistä useammin?</p>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Näin tulosta luetaan rehellisesti
</div>
</div>
<div class="callout-body-container callout-body">
<p>Jos pisteet osuvat katkoviivalle, mallin lupaamat todennäköisyydet pitävät paikkansa: kun se sanoo 10 %, lakkaa noin 10 %. Jos pisteet ovat viivan yläpuolella, malli <strong>aliarvioi</strong> riskiä — vaarallisin virhe luotonannossa.</p>
<p>AUC:n luottamusväli on laskettu bootstrapilla, koska yksittäinen AUC-luku ilman väliä on juuri se pistearvo, jota vastaan tämä koko sarja argumentoi.</p>
</div>
</div>
</section>
<section id="kalibrointikorjaus-todennäköisyydet-suoraksi" class="level2">
<h2 class="anchored" data-anchor-id="kalibrointikorjaus-todennäköisyydet-suoraksi">Kalibrointikorjaus: todennäköisyydet suoraksi</h2>
<p>Kalibraatiokuvaaja paljasti, että malli <strong>yliarvioi</strong> riskiä korkeassa päässä: kun se lupaa 11 %, toteutuu noin 3–4 %. Erottelu on kunnossa (riskisimmät ovat oikeassa järjestyksessä), mutta todennäköisyystasot ovat vinossa. Luotonannossa tämä on ongelma: väärä taso johtaa väärään hinnoitteluun.</p>
<p>Tämä on korjattavissa <strong>jälkikalibroinnilla</strong>. Käytän isotonista regressiota, joka oppii monotonisen kartan mallin raakatodennäköisyydestä toteutuneeseen osuuteen. Ratkaisevaa on, että kartta opitaan <strong>opetusdatasta</strong> — ei testistä. Testiin sovitettu kalibrointi vuotaisi tulevaisuudesta ja rikkoisi koko ajallisen kokeen.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-10-riskimittari_files/figure-html/kalibrointi-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Miksi erottelu ja kalibrointi ovat eri asioita
</div>
</div>
<div class="callout-body-container callout-body">
<p>Korjaus ei muuta yritysten <strong>järjestystä</strong> — AUC pysyy täsmälleen samana, koska isotoninen kartta on monotoninen. Se muuttaa vain <strong>tasoja</strong>: saman järjestyksen saavat todennäköisyydet, jotka pitävät paikkansa. Tämä on olennainen ero. Erottelukyky vastaa kysymykseen “kuka on riskisin?”, kalibrointi kysymykseen “kuinka riskisin?”. Luottopäätös tarvitsee molemmat — järjestyksen seulontaan ja tason hinnoitteluun.</p>
</div>
</div>
</section>
<section id="riskin-jakauma-kenelle-mittari-antaa-hälytyksen" class="level2">
<h2 class="anchored" data-anchor-id="riskin-jakauma-kenelle-mittari-antaa-hälytyksen">Riskin jakauma: kenelle mittari antaa hälytyksen?</h2>
<p>Lopuksi konkreettinen kysymys: miltä riskijakauma näyttää, ja mitä tapahtuu, jos mittaria käyttäisi seulana?</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-10-riskimittari_files/figure-html/seula-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Tämä kuvaaja on se, jonka riskipäällikkö haluaa nähdä. Se ei kysy “mikä on AUC” vaan “jos resurssini riittää tarkastamaan 10 % salkusta, kuinka suuren osan ongelmatapauksista löydän?”</p>
</section>
<section id="miksi-juuri-tämä-yritys-syykoodit" class="level2">
<h2 class="anchored" data-anchor-id="miksi-juuri-tämä-yritys-syykoodit">Miksi juuri tämä yritys? Syykoodit</h2>
<p>Riskiluku yksin ei riitä päätökseen. Luotonantajan on kyettävä perustelemaan sekä valvojalle että asiakkaalle, <strong>miksi</strong> yritys arvioitiin riskialttiiksi — luottolainsäädäntö usein edellyttää tätä (ns. adverse action -perustelut). Musta laatikko, joka antaa luvun mutta ei syytä, ei kelpaa.</p>
<p>Logistinen malli mahdollistaa tämän suoraan. Yrityksen riski log-odds-asteikolla on vakiotermi plus kunkin piirteen kerroin kerrottuna sen arvolla. Kun vähennämme kustakin piirteestä populaation keskiarvon, saamme <strong>syykoodit</strong>: kuinka paljon kukin piirre nostaa tai laskee <em>tämän</em> yrityksen riskiä keskivertoon nähden.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-10-riskimittari_files/figure-html/syykoodit-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Miten syykoodeja luetaan — ja mitä ne eivät ole
</div>
</div>
<div class="callout-body-container callout-body">
<p>Punaiset palkit ovat syitä, jotka nostavat <em>tämän</em> yrityksen riskiä keskivertoon nähden; turkoosit laskevat sitä. Näin päätös voidaan perustella konkreettisesti: “riski on koholla, koska ikkunassa on konkurssimerkintä ja toistuvia hallitusmuutoksia, vaikka toimiala laskeekin riskiä.”</p>
<p>Yksi rehellinen varaus: syykoodit kertovat, mikä <em>mallissa</em> nostaa riskiä, eivät todellista syytä yrityksen tilaan. Ne ovat assosiaatioita, eivät diagnooseja. Mutta juuri läpinäkyvyys — sen näyttäminen, mihin luku perustuu — erottaa käyttökelpoisen riskimallin mustasta laatikosta.</p>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle?</h2>
<p>Sarja päättyy sinne, mistä se alkoi: <strong>avoin data ei ole leikkikalu.</strong> Julkisesta kaupparekisteristä — ilman maksullisia tietolähteitä, ilman sisäistä dataa, ilman asiakastietoja — on rakennettavissa riskimittari, joka on validoitu tulevaisuudella ja jonka epävarmuus on tiedossa.</p>
<p>Kolme asiaa, jotka erottavat käyttökelpoisen mallin näyttävästä:</p>
<p>Malli on testattu <strong>ajallisesti</strong>, ei satunnaisjaolla. Satunnaisjako olisi antanut paremman tuloksen ja ollut merkityksetön.</p>
<p>Malli on <strong>kalibroitu</strong>, ei vain erotteleva. Luottopäätöksessä todennäköisyyden on oltava totta, ei vain järjestyksen.</p>
<p>Malli on <strong>selitettävissä ja suhteutettu</strong>. Jokainen riskiluku tulkitaan populaation perustasoa vasten — 11 % on korkea vain, koska keskiverto on 2,5 % — ja jokainen yksittäinen arvio voidaan purkaa syykoodeiksi, jotka kertovat, mitkä piirteet sen nostivat. Sekä vertailukohta että perustelu ovat useimmissa rahoitusalan käyttötapauksissa ehdoton vaatimus, ei mukava lisä.</p>
<p>Ja lopuksi se, mistä koko sarja on kertonut: jokainen tämän mittarin tuottama luku on jakauma, ei piste. Se on ainoa rehellinen tapa antaa numero, jonka varassa tehdään päätöksiä toisten ihmisten rahasta.</p>
<hr>
<p><em>Tämä päättää YTJ-sarjan ensimmäisen kaaren. Rakennan organisaatioille riskimalleja, jotka on validoitu rehellisesti ja jotka tuntevat oman epävarmuutensa — vuokrattavana Head of Data -osaajana. <a href="https://www.kristianvepsalainen.com">kristianvepsalainen.com</a>.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>luottoriski</category>
  <category>validointi</category>
  <category>YTJ</category>
  <guid>https://kristianvepsalainen.com/posts/ytj-10-riskimittari.html</guid>
  <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Mitä eduskunta tuottaa? Katsaus 340 000 asiakirjaan</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa8-vaski-eda.html</link>
  <description><![CDATA[ 





<blockquote class="blockquote">
<p><strong>Uusi jakso sarjassa.</strong> Osissa 1–7 tutkimme, keitä kansanedustajat ovat ja miten he puhuvat. Nyt käännämme katseen siihen, mitä eduskunta <em>tuottaa</em>: lakialoitteet, kirjalliset kysymykset, valiokuntamietinnöt, hallituksen esitykset. Tämä osa on kartta aineistoon; osat yhdeksästä eteenpäin sukeltavat yksittäisiin ilmiöihin.</p>
</blockquote>
<section id="uutiskoukku-näkymätön-työ" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-näkymätön-työ">Uutiskoukku: näkymätön työ</h2>
<p>Julkinen keskustelu näkee eduskunnasta täysistunnon — puheet ja äänestykset. Mutta suurin osa työstä on asiakirjoja: aloitteita, kysymyksiä, mietintöjä. Tämä aineisto tekee sen työn näkyväksi. Ja kuten aina, se ei ole yksi luku vaan jakauma: kymmeniä asiakirjatyyppejä, hyvin eri määrinä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(patchwork)</span>
<span id="cb1-2">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-4">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey30"</span>),</span>
<span id="cb1-8">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>()))</span>
<span id="cb1-9">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-10">docs <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_docs.qs"</span>))</span>
<span id="cb1-11"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aja ensin R/vaski-data-prep.R"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(docs) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100000</span>)</span></code></pre></div></div>
</details>
</div>
</section>
<section id="mikä-aineisto-tämä-on" class="level2">
<h2 class="anchored" data-anchor-id="mikä-aineisto-tämä-on">Mikä aineisto tämä on</h2>
<p><code>VaskiData</code> on eduskunnan valtiopäiväasiakirjojen kokoelma XML-muodossa, vuodesta 2015. Jokainen rivi on yksi asiakirja, ja <code>Eduskuntatunnus</code> (esim. <code>KK 47/2018 rd</code>) kertoo tyypin ja valtiopäivävuoden. Lisenssi on CC BY 4.0.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb2-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">asiakirjoja =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(docs),</span>
<span id="cb2-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tyyppeja    =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(docs<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>tyyppi),</span>
<span id="cb2-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuodet      =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(docs<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vpvuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm=</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"–"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(docs<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vpvuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm=</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 3
  asiakirjoja tyyppeja vuodet   
        &lt;int&gt;    &lt;int&gt; &lt;chr&gt;    
1      340508      226 1000–2929</code></pre>
</div>
</div>
</section>
<section id="jakauma-ensin-asiakirjatyypit" class="level2">
<h2 class="anchored" data-anchor-id="jakauma-ensin-asiakirjatyypit">Jakauma ensin: asiakirjatyypit</h2>
<p>Tyyppejä on yli 200, mutta muutama hallitsee. Näytetään yleisimmät — huomaa, kuinka vino jakauma on.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">top <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> docs <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(tyyppi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sort =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">slice_head</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>)</span>
<span id="cb4-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(top, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> n, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_reorder</span>(tyyppi, n))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_number</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"20 yleisintä asiakirjatyyppiä"</span>,</span>
<span id="cb4-6">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muutama tyyppi kattaa valtaosan aineistosta"</span>,</span>
<span id="cb4-7">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Asiakirjoja"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa8-vaski-eda_files/figure-html/tyypit-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Selitys asiakirjatyypeille. Suuri osa yleisimmistä tunnuksista liittyy edustajien omaan toimintaan tai on saman asiakirjan ruotsinkielinen versio.</p>
<ul>
<li>Hallitus ja lainsäädäntö: <strong>HE</strong> hallituksen esitys, <strong>EV</strong> eduskunnan vastaus (hallituksen esitykseen).</li>
<li>Edustajien aloitteet: <strong>LA</strong> lakialoite, <strong>TPA</strong> toimenpidealoite, <strong>TAA</strong> talousarvioaloite.</li>
<li>Kysymykset: <strong>KK</strong> kirjallinen kysymys, <strong>KKV</strong> vastaus kirjalliseen kysymykseen, <strong>SKT</strong> suullisen kyselytunnin kysymys.</li>
<li>EU-asiat: <strong>U</strong> valtioneuvoston kirjelmä EU:ssa valmisteltavasta asiasta, <strong>E</strong> valtioneuvoston selvitys EU-asiasta, <strong>EUN</strong> valtioneuvoston selvitys EU:n neuvoston tai Eurooppa-neuvoston kokouksesta.</li>
<li>Pöytäkirjat: <strong>PTK</strong> täysistunnon pöytäkirja.</li>
<li>Ruotsinkieliset vastineet: <strong>RP = HE</strong> (regeringens proposition), <strong>RSv = EV</strong> (riksdagens svar), <strong>SS = KK</strong> (skriftligt spörsmål), <strong>SSS = KKV</strong>, <strong>BM = TAA</strong> (budgetmotion), <strong>PR = PTK</strong> (plenarprotokoll), <strong>MFT = SKT</strong>.</li>
<li>Tekninen tunniste: <strong>EDK</strong> on eduskunnan asiakirjatunnus (esim. EDK-2024-AK-…), jonka alle yksittäiset asiakirjat ja liitteet tallennetaan — ei siis oma asiakirjatyyppi, mikä selittää sen suuren määrän.</li>
</ul>
</section>
<section id="neljä-ryhmää-mistä-eduskunnan-työ-koostuu" class="level2">
<h2 class="anchored" data-anchor-id="neljä-ryhmää-mistä-eduskunnan-työ-koostuu">Neljä ryhmää — mistä eduskunnan työ koostuu</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># EDK on tekninen yleistunniste (EDK-YYYY-AK-…), ei asiakirjatyyppi -&gt; pois grouped-tarkastelusta</span></span>
<span id="cb5-2">docs_luok <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> docs <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(tyyppi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"EDK"</span>)</span>
<span id="cb5-3"></span>
<span id="cb5-4">luokittele <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(t) dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb5-5">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Edustajien aloitteet (ml. ruotsi: LM=lakialoite, AM=toimenpidealoite, BM=talousarvioaloite)</span></span>
<span id="cb5-6">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TPA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TAA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LM"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"AM"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"BM"</span>)             <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Edustajien aloitteet"</span>,</span>
<span id="cb5-7">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kysymykset ja vastaukset (ml. ruotsi: SS=KK, SSS=KKV, MFT=SKT)</span></span>
<span id="cb5-8">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"KK"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"KKV"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SKT"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SS"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"SSS"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"MFT"</span>)           <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kysymykset"</span>,</span>
<span id="cb5-9">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Hallituksen esitykset ja selonteot (RP = HE ruotsiksi)</span></span>
<span id="cb5-10">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"HE"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RP"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VNS"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VNT"</span>)                       <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hallituksen esitykset ja selonteot"</span>,</span>
<span id="cb5-11">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Eduskunnan vastaukset ja kirjelmät (RSv = EV ruotsiksi)</span></span>
<span id="cb5-12">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"EV"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RSv"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"EK"</span>)                             <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eduskunnan vastaukset"</span>,</span>
<span id="cb5-13">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># EU- ja ulkoasiat</span></span>
<span id="cb5-14">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"U"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"E"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"EUN"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"UTP"</span>)                         <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"EU- ja ulkoasiat"</span>,</span>
<span id="cb5-15">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Valiokuntatyö päätteestä: suomi …VM/…VL/…VP/…VE, ruotsi …UB/…UU/…UD</span></span>
<span id="cb5-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(t, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"V[MLPE]$"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(t, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"U[BUD]$"</span>)  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Valiokuntatyö"</span>,</span>
<span id="cb5-17">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Täysistunnot (PR = PTK ruotsiksi)</span></span>
<span id="cb5-18">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PTK"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PR"</span>)                                  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Istunnot"</span>,</span>
<span id="cb5-19">  t <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"K"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"B"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VNS"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VNT"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kertomukset ja selonteot"</span>,</span>
<span id="cb5-20">  <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muut"</span>)</span>
<span id="cb5-21"></span>
<span id="cb5-22">ryhmat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> docs_luok <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ryhma =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">luokittele</span>(tyyppi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-23">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(ryhma) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n))</span>
<span id="cb5-24"></span>
<span id="cb5-25"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(ryhmat, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_reorder</span>(ryhma, osuus))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_text</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">label =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(osuus, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hjust =</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">3.5</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">expand =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">expansion</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eduskunnan asiakirjatuotanto neljässä ryhmässä"</span>,</span>
<span id="cb5-30">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa8-vaski-eda_files/figure-html/ryhmat-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="asiakirjavirta-ajassa" class="level2">
<h2 class="anchored" data-anchor-id="asiakirjavirta-ajassa">Asiakirjavirta ajassa</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1">vuosittain <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> docs <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(vpvuosi), vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, vpvuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2026</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ryhma =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">luokittele</span>(tyyppi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(vpvuosi, ryhma)</span>
<span id="cb6-4"></span>
<span id="cb6-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Laajennettu paletti ryhmäkuvaajille (8 luokkaa). Perustuu pal-väreihin + 4 lisäsävyä.</span></span>
<span id="cb6-6">ryhma_varit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#8d6e9c"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e9c46a"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#6d6875"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#000"</span>)</span>
<span id="cb6-7"></span>
<span id="cb6-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(vuosittain, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vpvuosi, n, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> ryhma)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_point</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> ryhma_varit) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_number</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">big.mark =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Asiakirjatuotanto vuosittain ryhmittäin"</span>,</span>
<span id="cb6-13">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vaalikausien vaihtuminen ja kriisivuodet näkyvät"</span>,</span>
<span id="cb6-14">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Asiakirjoja"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa8-vaski-eda_files/figure-html/ajassa-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Piikit ja notkot eivät ole satunnaisia: vaalivuodet katkaisevat valtiopäivät, ja poikkeusolot (kuten COVID-vuodet) näkyvät sekä hallituksen esitysten että kysymysten määrissä. Näihin muutoskohtiin palaamme osassa, joka käsittelee lainsäädännön rytmiä.</p>
</section>
<section id="mitä-tästä-aineistosta-saa-irti-sarjan-tiekartta" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tästä-aineistosta-saa-irti-sarjan-tiekartta">Mitä tästä aineistosta saa irti — sarjan tiekartta</h2>
<p>Tämä aineisto kantaa viisi seuraavaa osaa:</p>
<ul>
<li><strong>Osa 9:</strong> Aloitteiden läpimeno — mikä ennustaa, meneekö lakialoite läpi?</li>
<li><strong>Osa 10:</strong> Lainsäädännön aihevirta — mistä eduskunnassa tehdään aloitteita, ja miten se muuttuu (rakenteisilla aihetunnisteilla, ei tekstimallinnuksella).</li>
<li><strong>Osa 11:</strong> Yhteistyöverkostot — ketkä allekirjoittavat toistensa aloitteita?</li>
<li><strong>Osa 12:</strong> Valiokuntien käsittelyajat — kuka on nopea, kuka ruuhkautuu?</li>
<li><strong>Osa 13:</strong> Kirjalliset kysymykset — kuka kysyy, ja keneltä?</li>
</ul>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Julkinen data ei ole valmis analyysi.</strong> 340 000 XML-asiakirjaa on raaka-aine; arvo syntyy siitä, että ne suodatetaan, jäsennetään ja yhdistetään oikein.</li>
<li><strong>Rakenne on jakauma.</strong> Muutama tyyppi hallitsee, satoja on marginaalissa — keskiarvo “asiakirjaa vuodessa” ei kertoisi mitään olennaista.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Suuren, jäsentymättömän datavarannon kääntäminen päätöksiä tukevaksi analytiikaksi on ydinosaamistani. <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data, VaskiData (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>jakaumat</category>
  <category>EDA</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa8-vaski-eda.html</guid>
  <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Reaaliaikainen talousmittari, joka on ollut koko ajan olemassa</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/ytj-09-nowcasting.html</link>
  <description><![CDATA[ 





<p>Virallinen tilasto on aina myöhässä. Yritystilastot julkaistaan viiveellä, tilinpäätökset vielä pidemmällä, ja siihen mennessä kun luku on käytettävissä, päätös on jo tehty. Tämä on tuttu ongelma jokaiselle, joka yrittää ymmärtää taloutta reaaliajassa: mittari kertoo, missä olimme, ei missä olemme.</p>
<p>Samaan aikaan kaupparekisteriin virtaa joka arkipäivä tuhansia ilmoituksia. Yrityksiä perustetaan, hallituksia vaihdetaan, konkursseja aloitetaan, sulautumissuunnitelmia jätetään. Tämä virta on julkista, päivittyy jatkuvasti — ja se on käytännössä käyttämätön talousindikaattorina.</p>
<p>Tässä osassa rakennetaan siitä sellainen. Kysymys on kaksiosainen: <strong>onko rekisterivirrassa rakennetta, jota voi mallintaa</strong> — ja <strong>voiko sitä ennustaa riittävän hyvin, jotta siitä olisi hyötyä?</strong></p>
<p>Ennustaminen on tässä koko pointti. Kuvaajan piirtäminen menneestä on helppoa; osaamisen mitta on se, mitä uskaltaa sanoa tulevasta ja kuinka rehellisesti kertoo epävarmuutensa.</p>
<section id="mistä-datassa-on-kyse" class="level2">
<h2 class="anchored" data-anchor-id="mistä-datassa-on-kyse">Mistä datassa on kyse?</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineistona PRH:n rekisteröidyt ilmoitukset (7.11.2014 alkaen; CC BY 4.0). Tarkastelen kolmea virtaa: <strong>PERUS</strong> (yrityksen perustaminen), <strong>KONALK</strong> (konkurssin alkaminen) ja <strong>HAL</strong> (hallituksen muutos). Rajaan tarkastelun kokonaisiin kuukausiin, koska viimeisin kuukausi on aina vajaa — ja vajaan kuukauden ottaminen mukaan tuottaisi näennäisen romahduksen, joka on puhdas artefakti. Tämä on tavallisin virhe rekisteridatan aikasarjoissa.</p>
</div>
</div>
</section>
<section id="kolme-virtaa-kolme-tarinaa" class="level2">
<h2 class="anchored" data-anchor-id="kolme-virtaa-kolme-tarinaa">Kolme virtaa, kolme tarinaa</h2>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-09-nowcasting_files/figure-html/virrat-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Silmämääräisesti näkyy kaksi rakennetta: <strong>kausivaihtelu</strong> (kuukaudet eivät ole samanlaisia — heinäkuu ja joulukuu poikkeavat) ja <strong>trendi</strong>. Ennen ennustamista on syytä testata, ovatko nämä todellisia vai kuviteltuja.</p>
</section>
<section id="onko-kausivaihtelu-todellista" class="level2">
<h2 class="anchored" data-anchor-id="onko-kausivaihtelu-todellista">Onko kausivaihtelu todellista?</h2>
<p>Testaan, jakautuvatko perustamiset tasaisesti kuukausille. Nollahypoteesi on tasajakauma; testinä khiin neliö. Koska aineisto on suuri, p-arvo olisi pieni lähes väistämättä — siksi raportoin myös <strong>efektikoon</strong> (Cramérin V), joka kertoo poikkeaman voimakkuuden.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-09-nowcasting_files/figure-html/kausi-testi-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Kausivaihtelu on todellista ja voimakasta. Se tarkoittaa, että kuukausiluvun vertaaminen edelliseen kuukauteen — kuten uutisissa usein tehdään — on harhaanjohtavaa. Vertailukohta on <strong>saman kuukauden</strong> aiempi taso, tai malli, joka ottaa kausivaihtelun huomioon.</p>
</section>
<section id="ennustemalli" class="level2">
<h2 class="anchored" data-anchor-id="ennustemalli">Ennustemalli</h2>
<p>Rakennan <strong>bayesilaisen negatiivisen binomijakauman regression</strong> perustamisten kuukausivirralle. Menetelmävalinnat perusteluineen:</p>
<p><strong>Laskurimuuttuja, ei jatkuva.</strong> Ilmoitusten määrä on kokonaisluku, joten normaalijakauma olisi väärä. Negatiivinen binomi valitaan Poissonin sijaan, koska data on <strong>ylihajaantunutta</strong> (hajonta on suurempi kuin Poisson sallisi) — Poisson tuottaisi liian kapeat, valheellisen varmat ennustevälit.</p>
<p><strong>Kausivaihtelu mukaan kuukausitekijänä</strong>, koska juuri todistimme sen olevan todellinen.</p>
<p><strong>Trendi lineaarisena aikamuuttujana</strong>, joka sallii tason muutoksen.</p>
<p><strong>Bayesilaisuus</strong>, koska ennuste ilman epävarmuusväliä on arvaus, joka teeskentelee tietoa.</p>
<section id="kokeen-tulos-osuiko-malli" class="level3">
<h3 class="anchored" data-anchor-id="kokeen-tulos-osuiko-malli">Kokeen tulos: osuiko malli?</h3>
<p>Tämä on rehellisyyden hetki. Malli ei ole nähnyt viimeisen 12 kuukauden dataa. Piirretään sen ennuste ja <strong>verrataan siihen, mitä todella tapahtui.</strong></p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-09-nowcasting_files/figure-html/ennuste-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Miksi tämä kuvaaja on tärkeämpi kuin mikään kertoimien taulukko
</div>
</div>
<div class="callout-body-container callout-body">
<p>Ennustemallin ainoa rehellinen mitta on se, miten se pärjää datalla, jota se ei ole nähnyt. Tässä malli opetettiin vanhemmalla datalla ja pantiin ennustamaan vuosi eteenpäin sokkona. Punaiset pisteet ovat totuus.</p>
<p>Yhtä tärkeää kuin osuvuus on <strong>kalibraatio</strong>: osuiko oikea osuus toteumista väleihin? Jos 95 %:n väli sisältäisi vain puolet toteumista, malli olisi liian itsevarma — ja liian itsevarma malli on vaarallisempi kuin epätarkka, koska se saa päättäjän luottamaan väärään lukuun.</p>
</div>
</div>
</section>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle?</h2>
<p>Kaupparekisterin ilmoitusvirta on <strong>reaaliaikainen, ilmainen ja ennustettava</strong> talousindikaattori, joka päivittyy joka arkipäivä — kuukausia ennen kuin vastaava virallinen tilasto ilmestyy. Se ei korvaa virallista tilastoa, mutta se kertoo suunnan aikaisemmin.</p>
<p>Kolme käytännön huomiota. <strong>Vertaa aina samaan kuukauteen</strong>, älä edelliseen — kausivaihtelu on niin voimakas, että kuukausimuutos on lähes merkityksetön luku. <strong>Älä käytä vajaata kuukautta</strong>; se näyttää aina romahdukselta. Ja <strong>vaadi ennusteelta epävarmuusväli</strong>: ennuste ilman väliä ei ole ennuste vaan mielipide.</p>
<p>Tämä on avoimen datan lupaus konkreettisimmillaan. Indikaattori on ollut koko ajan olemassa. Se piti vain rakentaa.</p>
<hr>
<p><em>Tämä analyysi on osa avoimen datan sarjaani. Rakennan organisaatioille reaaliaikaisia, epävarmuutensa tuntevia mittareita julkisesta ja omasta datasta — vuokrattavana Head of Data -osaajana. <a href="https://www.kristianvepsalainen.com">kristianvepsalainen.com</a>.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>ennustaminen</category>
  <category>suhdanne</category>
  <category>YTJ</category>
  <guid>https://kristianvepsalainen.com/posts/ytj-09-nowcasting.html</guid>
  <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Kannattaako kansanedustajan puhua?</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa7-kannattaako-puhua.html</link>
  <description><![CDATA[ 





<section id="uutiskoukku-näkyvyys-vai-työ" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-näkyvyys-vai-työ">Uutiskoukku: näkyvyys vai työ?</h2>
<p>Kansanedustaja, joka haluaa jatkokauden, voi käyttää aikansa kahdella tavalla: näkyä salissa tai tehdä työtä kulisseissa. Kumpi kannattaa? Kysymys on houkutteleva — ja juuri siksi vaarallinen. Rakennamme mallin, joka vastaa siihen mihin data pystyy, ja sanomme suoraan, mihin se ei pysty.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(brms)</span>
<span id="cb1-2">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-4">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>()))</span>
<span id="cb1-8">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-9">paneeli  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paneeli.qs"</span>))</span>
<span id="cb1-10">mp_years <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp_years.qs"</span>))</span>
<span id="cb1-11">mp       <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp.qs"</span>))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="vastemuuttuja-jatkoiko-edustaja-seuraavalla-kaudella" class="level2">
<h2 class="anchored" data-anchor-id="vastemuuttuja-jatkoiko-edustaja-seuraavalla-kaudella">Vastemuuttuja: jatkoiko edustaja seuraavalla kaudella?</h2>
<p>Vaalivuodet ovat 2015, 2019 ja 2023. Kullekin kaudelle katsomme, ketkä istuivat kauden aikana ja ketkä jatkoivat seuraavalla.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">kaudet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kausi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seuraava =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span>))</span>
<span id="cb2-2"></span>
<span id="cb2-3">rakenna <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(alku, seur) {</span>
<span id="cb2-4">  istui <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> alku, vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> seur) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro)</span>
<span id="cb2-5">  jatkoi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> seur, vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> seur <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-6">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatkoi =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>L)</span>
<span id="cb2-7">  akt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> alku, vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> seur) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-8">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-9">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puheita =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-10">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puheita_per_vuosi =</span> puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmax</span>(vuosia, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb2-11">  istui <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(akt, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-12">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(jatkoi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-13">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatkoi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(jatkoi, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>L), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kausi =</span> alku)</span>
<span id="cb2-14">}</span>
<span id="cb2-15">d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map2_dfr</span>(kaudet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kausi, kaudet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>seuraava, rakenna) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, sukupuoli, synt_vuosi, ministeri, toimielin_lkm),</span>
<span id="cb2-17">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> kausi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> synt_vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">drop_na</span>(puheita_per_vuosi, sukupuoli, ika)</span>
<span id="cb2-20"></span>
<span id="cb2-21"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vastemuuttuja vakio"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>jatkoi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb2-22">d <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(kausi, jatkoi)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 4 × 3
  kausi jatkoi     n
  &lt;dbl&gt;  &lt;int&gt; &lt;int&gt;
1  2015      0    76
2  2015      1   212
3  2019      0    89
4  2019      1   205</code></pre>
</div>
</div>
</section>
<section id="ennen-mallia-miksi-tämä-ei-ole-syy-seuraussuhde" class="level2">
<h2 class="anchored" data-anchor-id="ennen-mallia-miksi-tämä-ei-ole-syy-seuraussuhde">ENNEN MALLIA: miksi tämä ei ole syy-seuraussuhde</h2>
<div class="callout callout-style-default callout-important callout-titled" title="Endogeenisuus — luettava ennen tulosta">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Endogeenisuus — luettava ennen tulosta
</div>
</div>
<div class="callout-body-container callout-body">
<p>Houkutus on tulkita tulos ohjeeksi: “puhu enemmän, niin sinut valitaan uudelleen.” Se olisi virhe, ja tässä on kolme syytä:</p>
<ol type="1">
<li><strong>Käänteinen kausaliteetti.</strong> Vaaleissa heikoilla olevat edustajat voivat puhua <em>enemmän</em> juuri saadakseen näkyvyyttä. Silloin puhe ei aiheuta valintaa vaan vaaliuhka aiheuttaa puhetta.</li>
<li><strong>Sekoittava kolmas tekijä.</strong> Ministerit, ryhmäjohtajat ja valiokuntien puheenjohtajat sekä puhuvat paljon <strong>että</strong> tulevat valituiksi useammin. Asema ajaa molempia. Kontrolloimme tätä, mutta emme voi kontrolloida kaikkea.</li>
<li><strong>Valikoituminen.</strong> Osa jättäytyy vapaaehtoisesti pois. He eivät “hävinneet” — he eivät osallistuneet. Datassa he näyttävät samalta.</li>
</ol>
<p>Tämä malli on siis <strong>ennustava, ei kausaalinen</strong>. Se kertoo, ketkä jatkoivat, ei sitä, mitä yksittäisen edustajan kannattaisi tehdä. Kerron tämän etukäteen enkä alaviitteessä, koska juuri tässä useimmat analyysit menevät pieleen.</p>
</div>
</div>
</section>
<section id="ennustemalli" class="level2">
<h2 class="anchored" data-anchor-id="ennustemalli">Ennustemalli</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">fit_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"osa7_uudelleenvalinta.qs"</span>)</span>
<span id="cb4-2">d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> d <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puhe_log =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log1p</span>(puheita_per_vuosi),</span>
<span id="cb4-3">                 <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">toimielin =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(toimielin_lkm, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>))</span>
<span id="cb4-4"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(fit_path)) {</span>
<span id="cb4-5">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brm</span>(jatkoi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> puhe_log <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> ika <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> sukupuoli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> ministeri <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> toimielin <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> kausi),</span>
<span id="cb4-6">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">family =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bernoulli</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d,</span>
<span id="cb4-7">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">chains =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">iter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cores =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">refresh =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb4-8">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(m, fit_path)</span>
<span id="cb4-9">}</span>
<span id="cb4-10">m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(fit_path)</span>
<span id="cb4-11"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summary</span>(m)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code> Family: bernoulli 
  Links: mu = logit 
Formula: jatkoi ~ puhe_log + ika + sukupuoli + ministeri + toimielin + (1 | kausi) 
   Data: d (Number of observations: 582) 
  Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 4000

Multilevel Hyperparameters:
~kausi (Number of levels: 2) 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept)     1.45      1.13     0.18     4.64 1.01      268       82

Regression Coefficients:
                Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept          -2.60      1.70    -6.34     0.59 1.01      349       69
puhe_log            1.79      0.16     1.49     2.12 1.01      945     2192
ika                -0.06      0.01    -0.08    -0.03 1.00     2289     2226
sukupuoliNainen    -0.33      0.29    -0.91     0.24 1.00     2604     2220
ministeri           0.07      0.99    -2.09     1.83 1.01      570      292
toimielin           0.08      0.03     0.03     0.13 1.01     2049     1884

Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Ennustettu jatkamistodennäköisyys puheaktiivisuuden mukaan (muut keskiarvossa)</span></span>
<span id="cb6-2">nd <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb6-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puheita_per_vuosi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>puheita_per_vuosi, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">95</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">length.out =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puhe_log =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log1p</span>(puheita_per_vuosi),</span>
<span id="cb6-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ika), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mies"</span>,</span>
<span id="cb6-6">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ministeri =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">toimielin =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>toimielin))</span>
<span id="cb6-7">pe <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> nd, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)</span>
<span id="cb6-8">pred <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nd <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keski =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colMeans</span>(pe),</span>
<span id="cb6-9">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pe, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">025</span>),</span>
<span id="cb6-10">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pe, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">975</span>))</span>
<span id="cb6-11"></span>
<span id="cb6-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(pred, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(puheita_per_vuosi, keski)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_ribbon</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymin =</span> lo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymax =</span> hi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">limits =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheaktiivisuus ja uudelleenvalinta — yhteys, ei syy"</span>,</span>
<span id="cb6-17">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ennustettu todennäköisyys jatkaa, 95 % uskottavuusvälein"</span>,</span>
<span id="cb6-18">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja vuodessa"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"P(jatkoi seuraavalla kaudella)"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa7-kannattaako-puhua_files/figure-html/efekti-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Suora todennäköisyysväittämä kertoimesta</span></span>
<span id="cb7-2">post <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_draws_df</span>(m)</span>
<span id="cb7-3">p_pos <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(post<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>b_puhe_log <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb7-4">glue<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">glue</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"P(puheaktiivisuuden kerroin &gt; 0) = {percent(p_pos, .1)}"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>P(puheaktiivisuuden kerroin &gt; 0) = 100.0%</code></pre>
</div>
</div>
</section>
<section id="counterfactual-entä-jos-hiljainen-olisi-puhunut" class="level2">
<h2 class="anchored" data-anchor-id="counterfactual-entä-jos-hiljainen-olisi-puhunut">Counterfactual: entä jos hiljainen olisi puhunut?</h2>
<p>Bayeslainen malli sallii suoran vertailun kahden skenaarion välillä <strong>saman edustajaprofiilin sisällä</strong>. Tämä on ennuste, ei lupaus — se kertoo, mitä <em>mallin mukaan</em> olisi odotettavissa, jos vain puheaktiivisuus poikkeaisi.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1">profiili <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ika), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mies"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ministeri =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,</span>
<span id="cb9-2">                   <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">toimielin =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>toimielin))</span>
<span id="cb9-3">skenaariot <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bind_rows</span>(</span>
<span id="cb9-4">  profiili <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">skenaario =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hiljainen (10. persentiili)"</span>,</span>
<span id="cb9-5">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puhe_log =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log1p</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>puheita_per_vuosi, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))),</span>
<span id="cb9-6">  profiili <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">skenaario =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puhelias (90. persentiili)"</span>,</span>
<span id="cb9-7">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puhe_log =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log1p</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>puheita_per_vuosi, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">90</span>))))</span>
<span id="cb9-8">pe2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> skenaariot, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)</span>
<span id="cb9-9">cf <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Hiljainen</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> pe2[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Puhelias</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> pe2[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ero =</span> Puhelias <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> Hiljainen)</span>
<span id="cb9-11"></span>
<span id="cb9-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(cf, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> ero)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_halfeye</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"oranssi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.width =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">66</span>,.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">95</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"punainen"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Counterfactual: puheliaan ja hiljaisen ero"</span>,</span>
<span id="cb9-17">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ero jatkamistodennäköisyydessä, muut tekijät vakioituna"</span>,</span>
<span id="cb9-18">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ero todennäköisyydessä (prosenttiyksikköä)"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa7-kannattaako-puhua_files/figure-html/counterfactual-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1">glue<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">glue</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"P(puhelias jatkaa todennäköisemmin) = {percent(mean(cf$ero &gt; 0), .1)}"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>P(puhelias jatkaa todennäköisemmin) = 100.0%</code></pre>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Ennuste ja syy ovat eri asioita.</strong> Malli tunnistaa, ketkä jatkoivat. Se ei kerro, mitä yksilön pitäisi tehdä. Ero on tärkein asia, jonka päättäjän tulee ymmärtää data-analyysistä.</li>
<li><strong>Counterfactual on työkalu, ei kristallipallo.</strong> Se näyttää, mitä <em>mallin sisällä</em> tapahtuisi eri oletuksella — ja sen arvo riippuu siitä, kuinka rehellisesti mallin rajat on kerrottu.</li>
<li><strong>Epävarmuus on tulos.</strong> Jos väli leikkaa nollan, se on vastaus — ei epäonnistuminen.</li>
</ul>
</section>
<section id="uutiskoukku-takaisin" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-takaisin">Uutiskoukku takaisin</h2>
<p>Kannattaako puhua? Data kertoo, että puheliaat ja jatkaneet ovat päällekkäisiä joukkoja. Mutta se, kumpi aiheuttaa kumman, ei ratkea tällä aineistolla — ja analyytikon tärkein taito on sanoa se ääneen.</p>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Ennustemallit, counterfactual-skenaariot ja rehellinen raja sen välillä, mitä data voi ja ei voi kertoa — <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>ennustemalli</category>
  <category>survival</category>
  <category>kausaalisuus</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa7-kannattaako-puhua.html</guid>
  <pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Kuinka kauan yrityskauppa kestää?</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/ytj-08-sulautumiset.html</link>
  <description><![CDATA[ 





<p>Yrityskauppa on prosessi, ei tapahtuma. Sulautumisessa se alkaa siitä, että yhtiöt allekirjoittavat sulautumissuunnitelman ja ilmoittavat sen kaupparekisteriin. Sitten alkaa odotus: velkojille annetaan kuulutus, määräajat kuluvat, rekisteriviranomainen käsittelee — ja lopulta sulautuminen pannaan täytäntöön. Tai ei panna: osa suunnitelmista raukeaa.</p>
<p>Kysymys, johon jokainen järjestelyä suunnitteleva yritys, sen neuvonantaja ja rahoittaja haluaisi vastauksen, on yksinkertainen: <strong>kuinka kauan tämä kestää?</strong></p>
<p>Tavanomainen vastaus on pisteluku — “noin puoli vuotta”. Se on hyödytön. Jos suunnittelet rahoitusta, integraatiota tai henkilöstöviestintää, sinun on tiedettävä koko jakauma: kuinka nopeasti nopeimmat menevät läpi, kuinka pitkä häntä on, ja mikä on todennäköisyys, ettei järjestely mene läpi ollenkaan.</p>
<p>Kaupparekisteri sisältää tämän tiedon. Se on julkista, ja kukaan ei näytä sitä katsovan.</p>
<section id="mistä-datassa-on-kyse" class="level2">
<h2 class="anchored" data-anchor-id="mistä-datassa-on-kyse">Mistä datassa on kyse?</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineistona PRH:n rekisteröidyt ilmoitukset (7.11.2014 alkaen; CC BY 4.0). Sulautumisprosessi seurataan merkintälajeista: <strong>SULSUU</strong> (sulautumissuunnitelma) aloittaa prosessin, <strong>SULLOP</strong> (sulautumisen täytäntöönpano) päättää sen onnistuneesti. Yritykset, joilla on SULSUU mutta ei SULLOP:ia, ovat joko yhä kesken (sensuroituja) tai rauenneet — ja juuri tämä tekee analyysistä eloonjäämisanalyysin eikä pelkkää keskiarvon laskentaa.</p>
</div>
</div>
</section>
<section id="prosessin-rakentaminen-alku-loppu-ja-sensurointi" class="level2">
<h2 class="anchored" data-anchor-id="prosessin-rakentaminen-alku-loppu-ja-sensurointi">Prosessin rakentaminen: alku, loppu ja sensurointi</h2>
<p>Jokaiselle yritykselle, joka on jättänyt sulautumissuunnitelman, etsitään ensimmäinen SULSUU ja sen jälkeinen ensimmäinen SULLOP. Jos SULLOP:ia ei ole, havainto on <strong>sensuroitu</strong>: prosessi on joko kesken tai rauennut, emmekä ole nähneet sen loppua. Sensuroidun havainnon poistaminen olisi klassinen virhe — se lyhentäisi arvioita systemaattisesti, koska nopeat tapaukset ehtivät valmistua ja hitaat eivät.</p>
<p>Aineistossa on 22 523 sulautumissuunnitelmaa, joista 20 531 (91.2%) on edennyt rekisteröityyn täytäntöönpanoon. Loput ovat kesken tai rauenneet.</p>
</section>
<section id="läpimenoaika-jakaumana" class="level2">
<h2 class="anchored" data-anchor-id="läpimenoaika-jakaumana">Läpimenoaika jakaumana</h2>
<p>Kaplan–Meier-estimaattori kertoo, kuinka suuri osuus sulautumisista on <strong>yhä kesken</strong> kunkin kuukauden kohdalla. Käyrä laskee sitä mukaa kuin järjestelyt menevät läpi. Se käsittelee sensuroinnin oikein: keskeneräiset havainnot pysyvät mukana siihen asti kun ne on havaittu, eivätkä vääristä arviota.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-08-sulautumiset_files/figure-html/km-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Tässä kuvaajassa on koko pointti. Mediaani on 4.4 kuukautta — mutta neljännes järjestelyistä on valmis jo 3.8 kuukaudessa, ja neljännes vasta 5.4 kuukauden jälkeen. <strong>Jos suunnittelet rahoituksesi mediaanin varaan, olet väärässä puolessa tapauksista.</strong> Piste ei riitä; tarvitset jakauman.</p>
</section>
<section id="onko-läpimeno-nopeutunut-vai-hidastunut" class="level2">
<h2 class="anchored" data-anchor-id="onko-läpimeno-nopeutunut-vai-hidastunut">Onko läpimeno nopeutunut vai hidastunut?</h2>
<p>Prosessin kesto voi muuttua ajassa: lainsäädäntö, rekisteriviranomaisen resurssit ja yritysten valmistautuminen vaikuttavat. Verrataan alkuvuoden mukaan kolmea kohorttia ja testataan ero <strong>log-rank-testillä</strong>, joka on oikea väline sensuroidulle aika-tapahtuma-datalle (t-testi tai keskiarvovertailu olisi tässä virhe).</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-08-sulautumiset_files/figure-html/kohortit-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="cell">
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Coxin malli: yli 1 = järjestelyt menevät läpi nopeammin kuin vertailukaudella</caption>
<thead>
<tr class="header">
<th style="text-align: left;">Kausi (vrt. 2015–2017)</th>
<th style="text-align: right;">Nopeussuhde</th>
<th style="text-align: left;">95 % väli</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">2018–2020</td>
<td style="text-align: right;">1.07</td>
<td style="text-align: left;">1.03 – 1.11</td>
</tr>
<tr class="even">
<td style="text-align: left;">2021–2023</td>
<td style="text-align: right;">0.92</td>
<td style="text-align: left;">0.89 – 0.96</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section id="ennustemalli-milloin-tämä-sulautuminen-valmistuu" class="level2">
<h2 class="anchored" data-anchor-id="ennustemalli-milloin-tämä-sulautuminen-valmistuu">Ennustemalli: milloin <em>tämä</em> sulautuminen valmistuu?</h2>
<p>Kaplan–Meier kuvaa mennyttä. Päättäjä tarvitsee ennusteen: <em>jos suunnitelma jätetään nyt, milloin se on todennäköisesti läpi?</em></p>
<p>Rakennan <strong>bayesilaisen parametrisen eloonjäämismallin</strong> (Weibull), joka tuottaa täyden ennustejakauman. Valitsen bayesilaisen lähestymistavan, koska se antaa ennusteelle epävarmuusvälin — eikä yhtä lukua, joka teeskentelisi varmuutta. Weibull-jakauma sopii läpimenoaikoihin, joissa “vaara” valmistua kasvaa ajan myötä määräaikojen umpeutuessa.</p>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Miksi Weibull eikä pelkkä keskiarvo?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Läpimenoaika ei ole normaalijakautunut: se on vino, alhaalta rajattu (ei voi olla negatiivinen) ja sisältää keskeneräisiä tapauksia. Keskiarvo ja keskihajonta antaisivat luvun, joka on väärä kaikilla kolmella tavalla. Weibull-malli kunnioittaa datan luonnetta — ja bayesilaisena se kertoo, kuinka varmasti.</p>
</div>
</div>
<section id="ennuste-milloin-nyt-jätetty-suunnitelma-valmistuu" class="level3">
<h3 class="anchored" data-anchor-id="ennuste-milloin-nyt-jätetty-suunnitelma-valmistuu">Ennuste: milloin nyt jätetty suunnitelma valmistuu?</h3>
<p>Malli tuottaa täyden ennustejakauman läpimenoajalle. Tämä on se, mitä neuvonantaja tarvitsee: ei “noin puoli vuotta”, vaan koko jakauma, jonka varaan voi suunnitella rahoituksen ja aikataulun.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-08-sulautumiset_files/figure-html/ennuste-jakauma-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Kuvaajan leveys on koko viesti: yksi luku ei riitä. Nopeimmat menevät läpi muutamassa kuukaudessa, hitaimmat venyvät reilusti yli vuoden — ja malli antaa jokaiselle todennäköisyytensä.</p>
</section>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle?</h2>
<p>Kolme käytännön johtopäätöstä.</p>
<p><strong>Läpimenoaika on jakauma, ja sen hajonta on suuri.</strong> Mediaani ei riitä suunnitteluun. Jos rahoitusjärjestely tai integraatiosuunnitelma nojaa “tyypilliseen” kestoon, se on rakennettu keskiluvulle, joka kuvaa harvaa yksittäistapausta.</p>
<p><strong>Osa suunnitelmista ei koskaan toteudu.</strong> Se on riski, joka on kvantifioitavissa — ja jonka huomiotta jättäminen on tavanomaista.</p>
<p><strong>Kaikki tämä on julkista dataa.</strong> Yksikään neuvonantaja ei tarvitse sisäpiiritietoa kertoakseen asiakkaalleen, mikä on realistinen aikataulujakauma. Riittää, että katsoo rekisteriä oikein — ja käsittelee sensuroinnin oikein, mikä on juuri se kohta, jossa naiivi analyysi menee pieleen.</p>
<hr>
<p><em>Tämä analyysi on osa avoimen datan sarjaani. Autan asianajotoimistoja, rahoittajia ja yritysjärjestelyjen tekijöitä muuttamaan julkisen datan päätöskelpoisiksi ennusteiksi. <a href="https://www.kristianvepsalainen.com">kristianvepsalainen.com</a>.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>eloonjääminen</category>
  <category>yritysjärjestelyt</category>
  <category>YTJ</category>
  <guid>https://kristianvepsalainen.com/posts/ytj-08-sulautumiset.html</guid>
  <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Selittääkö aihe puheen? Aihekoostumus puhemäärän takana</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa6b-aihekoostumus.html</link>
  <description><![CDATA[ 





<blockquote class="blockquote">
<p><strong>Tämä on osan 6 lisäosa.</strong> Sain blogin kommenteissa erinomaisen ehdotuksen: sen sijaan että katsoisimme vain puheenvuorojen <strong>kokonaismäärän</strong> muutosta, kannattaa tutkia, muuttuuko myös <strong>aiheiden koostumus</strong> — ja selittävätkö koostumuksen muutokset havaittuja kehityssuuntia. Kiitos ehdotuksesta; tässä vastaus.</p>
<p><strong>Samalla vastaan yhteen jatkokysymykseen puheaktiivisuudesta:</strong> selittääkö sitä edustajan kokemus (ensimmäistä kauttaan istuva “keltanokka” vs.&nbsp;useamman kauden “konkari”)</p>
</blockquote>
<section id="kysymys-määrä-vai-koostumus" class="level2">
<h2 class="anchored" data-anchor-id="kysymys-määrä-vai-koostumus">Kysymys: määrä vai koostumus?</h2>
<p>Osassa 6 näimme, että eduskunnan puheenvuorojen määrä vaihtelee ja siinä on murroskohtia. Mutta kokonaismäärä on <strong>yksi luku</strong> — ja tämän sarjan koko idea on, ettei yksi luku riitä. Kahden vuoden identtinen puhemäärä voi kätkeä täysin erilaisen aihejakauman. Kysymys kuuluu siis: kun puheen määrä muuttuu, muuttuuko myös <strong>mistä</strong> puhutaan — ja kuinka paljon muutoksesta on tason, kuinka paljon koostumuksen liikettä?</p>
</section>
<section id="menetelmä-rakenteiset-aihetunnisteet-ei-nlp" class="level2">
<h2 class="anchored" data-anchor-id="menetelmä-rakenteiset-aihetunnisteet-ei-nlp">Menetelmä: rakenteiset aihetunnisteet, ei NLP</h2>
<p>Emme luokittele puheita tekstimallilla. Sen sijaan hyödynnämme aineiston <strong>omia aihetunnisteita</strong> ja tiivistämme ne muutamaan politiikkakategoriaan läpinäkyvällä sääntökartalla. Tämä on toistettavaa ja rehellistä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-2">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-4">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">violetti=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#8d6e9c"</span>)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>(),</span>
<span id="cb1-8">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">legend.position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"top"</span>))</span>
<span id="cb1-9">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-10">init <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_init.qs"</span>))</span>
<span id="cb1-11"></span>
<span id="cb1-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Läpinäkyvä politiikkakategoria-kartta (kommentissa ehdotetut luokat + ympäristö)</span></span>
<span id="cb1-13">luokittele_aihe <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(a) {</span>
<span id="cb1-14">  a <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_to_lower</span>(a)</span>
<span id="cb1-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb1-16">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(a, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maahanmuu|turvapaik|pakolais|kotoutu|ulkomaalais"</span>)       <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maahanmuutto"</span>,</span>
<span id="cb1-17">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(a, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"talous|vero|budjet|työllisy|elinkeino|yritys|rahoitus"</span>)  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Talous"</span>,</span>
<span id="cb1-18">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(a, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"tervey|sairaan|sote|hoiva|lääke|potilas|sosiaali"</span>)       <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Terveys ja sosiaali"</span>,</span>
<span id="cb1-19">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(a, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"koulut|opetus|opiskel|varhaiskasv|yliopisto|oppilai"</span>)    <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koulutus"</span>,</span>
<span id="cb1-20">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(a, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ulkopolit|puolust|turvalli|nato|ukrain|rajaturv"</span>)        <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ulko- ja turvallisuus"</span>,</span>
<span id="cb1-21">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(a, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ilmasto|ympärist|energia|luonto|päästö"</span>)                 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ympäristö ja energia"</span>,</span>
<span id="cb1-22">    <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muu"</span>)</span>
<span id="cb1-23">}</span></code></pre></div></div>
</details>
</div>
</section>
<section id="aihekoostumus-vaalikausittain" class="level2">
<h2 class="anchored" data-anchor-id="aihekoostumus-vaalikausittain">Aihekoostumus vaalikausittain</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">kaudet_raja <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(v) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(v <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2018</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2015–2018"</span>,</span>
<span id="cb2-2">                                     v <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2022</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2019–2022"</span>,</span>
<span id="cb2-3">                                     v <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2025</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2023–2025"</span>, <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span>)</span>
<span id="cb2-4"></span>
<span id="cb2-5">aiheet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> init <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(vpvuosi, aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(aiheet), aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kategoria =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">luokittele_aihe</span>(aiheet), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kausi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kaudet_raja</span>(vpvuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(kausi), kategoria <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muu"</span>)</span>
<span id="cb2-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aihetunnisteita ei löytynyt"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(aiheet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>)</span>
<span id="cb2-10"></span>
<span id="cb2-11">osuudet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> aiheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(kausi, kategoria) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(kausi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> N,</span>
<span id="cb2-13">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qbeta</span>(.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">025</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>n, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>N<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>n), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qbeta</span>(.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">975</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>n, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span>N<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>n)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb2-14"></span>
<span id="cb2-15"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(osuudet, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_reorder</span>(kategoria, osuus), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> kausi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_pointinterval</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xmin =</span> lo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xmax =</span> hi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">position =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">position_dodge</span>(.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)])) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aihekoostumus vaalikausittain — jakaumana, ei pisteenä"</span>,</span>
<span id="cb2-20">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus aihemaininnoista, 95 % uskottavuusväli (Dirichlet-Beta)"</span>,</span>
<span id="cb2-21">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6b-aihekoostumus_files/figure-html/koostumus-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Uskottavuusvälit ovat olennaiset: pieni osuuden ero kausien välillä ei ole muutos, jos välit menevät päällekkäin. Jakauma kertoo senkin, mitä pistearvo ei.</p>
</section>
<section id="onko-koostumus-muuttunut-tilastollinen-merkitsevyys" class="level2">
<h2 class="anchored" data-anchor-id="onko-koostumus-muuttunut-tilastollinen-merkitsevyys">Onko koostumus muuttunut? Tilastollinen merkitsevyys</h2>
<p>Kommentissa kysyttiin nimenomaan, ovatko erot <strong>tilastollisesti merkitseviä</strong>. Testaamme aihekategorian ja vaalikauden riippuvuutta khii-neliöllä ja efektikokona Cramérin V:llä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">table</span>(aiheet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kategoria, aiheet<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>kausi)</span>
<span id="cb3-2">khi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">chisq.test</span>(taulu)</span>
<span id="cb3-3">cramers_v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sqrt</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(taulu) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dim</span>(taulu)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span>
<span id="cb3-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">khi2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">df =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>parameter),</span>
<span id="cb3-5">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">signif</span>(khi<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cramers_V =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(cramers_v, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
   khi2    df        p cramers_V
  &lt;dbl&gt; &lt;int&gt;    &lt;dbl&gt;     &lt;dbl&gt;
1  116.    10 3.52e-20     0.078</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-important callout-titled" title="Merkitsevä ≠ merkittävä — iso otos">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Merkitsevä ≠ merkittävä — iso otos
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineisto on suuri, joten lähes mikä tahansa ero tulee “tilastollisesti merkitseväksi” (pieni p). Siksi katse on <strong>efektikoossa</strong>: Cramérin V kertoo, kuinka suuri riippuvuus todella on. Pieni V tarkoittaa, että vaikka koostumus muuttui “merkitsevästi”, muutos on käytännössä vaatimaton. Tämä erottelu on juuri se, mitä päättäjän on ymmärrettävä tilastollisesta merkitsevyydestä.</p>
</div>
</div>
</section>
<section id="selittääkö-koostumus-vai-taso-shift-share-hajotelma" class="level2">
<h2 class="anchored" data-anchor-id="selittääkö-koostumus-vai-taso-shift-share-hajotelma">Selittääkö koostumus vai taso? Shift-share-hajotelma</h2>
<p>Tässä täsmällinen vastaus kysymykseen. Kokonaismuutos aihemainintojen määrässä ensimmäisen ja viimeisen kauden välillä voidaan <strong>hajottaa</strong> kahteen osaan:</p>
<ul>
<li><strong>Tasokomponentti:</strong> paljonko määrä olisi muuttunut, jos koostumus olisi pysynyt ennallaan (vain kokonaisvolyymi kasvoi/laski).</li>
<li><strong>Koostumuskomponentti:</strong> paljonko muutoksesta johtuu siitä, että aiheiden <strong>osuudet</strong> siirtyivät.</li>
</ul>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">a <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> osuudet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(kausi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2015–2018"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(kategoria, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">s_a =</span> osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N_a =</span> N)</span>
<span id="cb5-2">b <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> osuudet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(kausi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2023–2025"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(kategoria, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">s_b =</span> osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N_b =</span> N)</span>
<span id="cb5-3">ss <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">full_join</span>(a, b, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kategoria"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(s_a, s_b), \(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(x, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)),</span>
<span id="cb5-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N_a =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(N_a, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">N_b =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(N_b, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">na.rm =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>),</span>
<span id="cb5-6">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">taso        =</span> s_a <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (N_b <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> N_a),          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># koostumus kiinni A:ssa</span></span>
<span id="cb5-7">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">koostumus   =</span> (s_b <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> s_a) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> N_b)          <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># osuuden siirtymä</span></span>
<span id="cb5-8"></span>
<span id="cb5-9">yhteenveto <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ss <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(</span>
<span id="cb5-10">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">taso_komponentti =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(taso), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">koostumus_komponentti =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(koostumus),</span>
<span id="cb5-11">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kokonaismuutos =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(taso) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(koostumus))</span>
<span id="cb5-12">yhteenveto <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">koostumuksen_osuus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(</span>
<span id="cb5-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(koostumus_komponentti) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(taso_komponentti) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">abs</span>(koostumus_komponentti)), .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
  taso_komponentti koostumus_komponentti kokonaismuutos koostumuksen_osuus
             &lt;dbl&gt;                 &lt;dbl&gt;          &lt;dbl&gt; &lt;chr&gt;             
1            -1189             -2.13e-14          -1189 0.0%              </code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1">ss <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(kategoria, taso, koostumus) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>kategoria, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"komponentti"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"muutos"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> muutos, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_reorder</span>(kategoria, muutos), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> komponentti)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dodge"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey50"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)]),</span>
<span id="cb7-7">                    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Koostumus (osuuden siirtymä)"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Taso (kokonaisvolyymi)"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mistä muutos syntyy: taso vai koostumus?"</span>,</span>
<span id="cb7-9">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokonaismuutoksen hajotelma kategorioittain, 2015–2018 → 2023–2025"</span>,</span>
<span id="cb7-10">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vaikutus aihemainintojen määrään"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6b-aihekoostumus_files/figure-html/shift-share-kuva-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Jos koostumuskomponentti on suuri suhteessa tasoon, ehdottajan hypoteesi saa tukea: muutos ei ole vain “enemmän kaikkea”, vaan painopisteen siirtymä. Jos taso hallitsee, kyse on ennen kaikkea kokonaisvolyymista. Hajotelma antaa vastauksen numerona, ei mielikuvana.</p>
</section>
<section id="kuka-puhuu-enemmän-konkari-vai-keltanokka" class="level2">
<h2 class="anchored" data-anchor-id="kuka-puhuu-enemmän-konkari-vai-keltanokka">Kuka puhuu enemmän — konkari vai keltanokka?</h2>
<p>Siirrytään koostumuksesta <strong>aktiivisuuteen</strong>. Lisään kaksi selittävää tekijää: edustajan <strong>kokemus</strong> (keltanokka vs.&nbsp;konkari) ja se, onko hän <strong>jatkamassa seuraavalle vaalikaudelle</strong>. Molemmat mallinnetaan bayeslaisella negatiivisella binomimallilla, joka sopii vinolle lukumäärädatalle (kuten osassa 4).</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(brms)</span>
<span id="cb8-2">paneeli  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paneeli.qs"</span>))</span>
<span id="cb8-3">mp_years <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp_years.qs"</span>))</span>
<span id="cb8-4"></span>
<span id="cb8-5">vaalit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2027</span>)</span>
<span id="cb8-6">kausi_alku <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(v) {</span>
<span id="cb8-7">  i <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">findInterval</span>(v, vaalit)           <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 0, jos v &lt; 2015</span></span>
<span id="cb8-8">  out <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rep</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_integer_</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(v))     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># sama pituus kuin v</span></span>
<span id="cb8-9">  out[i <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaalit[i[i <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]]         <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># täytä vain kelvolliset</span></span>
<span id="cb8-10">  out</span>
<span id="cb8-11">}</span>
<span id="cb8-12"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kokemus: palvelusvuodet ENNEN kutakin vuotta (0 = ensimmäinen vuosi)</span></span>
<span id="cb8-13">kokemus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro, vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(henkilo_nro, vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kokemus_vuosia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">row_number</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb8-16"></span>
<span id="cb8-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Jatkoiko seuraavalle vaalikaudelle (uudelleenehdokkuuden korvike), kausitasolla</span></span>
<span id="cb8-18">kaudet_palveltu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kausi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kausi_alku</span>(vuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(kausi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro, kausi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(henkilo_nro, kausi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-23">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatkoi_seur =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lead</span>(kausi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> kausi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>()</span>
<span id="cb8-24"></span>
<span id="cb8-25">d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kausi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kausi_alku</span>(vuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(kokemus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuosi"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(kaudet_palveltu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, kausi, jatkoi_seur),</span>
<span id="cb8-28">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kausi"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seniori =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(kokemus_vuosia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Konkari"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keltanokka"</span>),</span>
<span id="cb8-30">                          <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keltanokka"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Konkari"</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-31">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(ika), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(sukupuoli))</span>
<span id="cb8-32"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Seniori-luokittelu epäonnistui"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>seniori) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span></code></pre></div></div>
</details>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Kaksi määrittelyvalintaa auki">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Kaksi määrittelyvalintaa auki
</div>
</div>
<div class="callout-body-container callout-body">
<p><strong>Konkari</strong> = vähintään neljä palvelusvuotta takana (yksi täysi vaalikausi), <strong>keltanokka</strong> = ensimmäistä kauttaan. <strong>Uudelleenehdokkuus</strong> on tässä korvattu tiedolla “jatkoiko edustaja seuraavalle kaudelle” — se on tiedossa vain päättyneille kausille (2015, 2019), koska nykyisen kauden jatko ratkeaa vasta 2027 vaaleissa. Korvikkeen rajat käsitellään alempana rehellisesti.</p>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1">d_mall <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> d <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(kausi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(jatkoi_seur)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb9-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatko =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">if_else</span>(jatkoi_seur <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jatkoi"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ei jatkanut"</span>),</span>
<span id="cb9-3">                        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jatkoi"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ei jatkanut"</span>)))</span>
<span id="cb9-4"></span>
<span id="cb9-5">fit_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"osa6b_aktiivisuus.qs"</span>)</span>
<span id="cb9-6"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(fit_path)) {</span>
<span id="cb9-7">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brm</span>(n_puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> seniori <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> jatko <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> ika <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> sukupuoli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> vuosi),</span>
<span id="cb9-8">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">family =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">negbinomial</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d_mall,</span>
<span id="cb9-9">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">chains =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">iter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cores =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">refresh =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb9-10">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(m, fit_path)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># brms-malli -&gt; qs_save (ei qd)</span></span>
<span id="cb9-11">}</span>
<span id="cb9-12">m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(fit_path)</span>
<span id="cb9-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summary</span>(m)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code> Family: negbinomial 
  Links: mu = log 
Formula: n_puheita ~ seniori + jatko + ika + sukupuoli + (1 | henkilo_nro) + (1 | vuosi) 
   Data: d_mall (Number of observations: 1643) 
  Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 4000

Multilevel Hyperparameters:
~henkilo_nro (Number of levels: 297) 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept)     0.68      0.03     0.61     0.74 1.01      802     1490

~vuosi (Number of levels: 8) 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept)     0.31      0.12     0.17     0.62 1.00      732      874

Regression Coefficients:
                Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept           3.94      0.23     3.51     4.40 1.01      555     1012
senioriKonkari      0.09      0.06    -0.02     0.21 1.00     1132     1885
jatkoEijatkanut    -1.52      0.54    -2.58    -0.45 1.00     1505     2401
ika                -0.00      0.00    -0.01     0.00 1.01      509      877
sukupuoliNainen    -0.02      0.09    -0.18     0.16 1.02      427     1004

Further Distributional Parameters:
      Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
shape     3.34      0.15     3.05     3.63 1.00     3442     2477

Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Odotettu puheenvuorojen määrä ryhmittäin, 95 % uskottavuusvälein</span></span>
<span id="cb11-2">nd <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">expand_grid</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seniori =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>seniori), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatko =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>jatko),</span>
<span id="cb11-3">                  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ika), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mies"</span>)</span>
<span id="cb11-4">pe <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> nd, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)</span>
<span id="cb11-5">pred <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nd <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keski =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colMeans</span>(pe),</span>
<span id="cb11-6">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pe, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">025</span>),</span>
<span id="cb11-7">                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pe, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">975</span>))</span>
<span id="cb11-8"></span>
<span id="cb11-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(pred, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> keski, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">interaction</span>(seniori, jatko, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sep =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" · "</span>))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb11-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_pointinterval</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xmin =</span> lo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xmax =</span> hi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb11-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Odotettu puheenvuorojen määrä — kokemus ja uudelleenehdokkuus"</span>,</span>
<span id="cb11-12">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Negatiivinen binomimalli, 95 % uskottavuusväli"</span>,</span>
<span id="cb11-13">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja vuodessa"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6b-aihekoostumus_files/figure-html/efektit2-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Suorat todennäköisyysväittämät kontrastina (ei kertoimien nimistä)</span></span>
<span id="cb12-2">sen <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>,</span>
<span id="cb12-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatko =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jatkoi"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ika), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mies"</span>,</span>
<span id="cb12-4">                   <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seniori =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>seniori)))</span>
<span id="cb12-5">ld <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>,</span>
<span id="cb12-6">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seniori =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Konkari"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ika), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mies"</span>,</span>
<span id="cb12-7">                   <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">jatko =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d_mall<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>jatko)))</span>
<span id="cb12-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb12-9">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vaite =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Konkari puhuu enemmän kuin keltanokka"</span>,</span>
<span id="cb12-10">            <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Seuraavalle kaudelle jatkamaton puhuu vähemmän (lame duck)"</span>),</span>
<span id="cb12-11">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">todennakoisyys =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(scales<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(sen[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> sen[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]), .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb12-12">                     scales<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(ld[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> ld[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]), .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 2 × 2
  vaite                                                      todennakoisyys
  &lt;chr&gt;                                                      &lt;chr&gt;         
1 Konkari puhuu enemmän kuin keltanokka                      94.2%         
2 Seuraavalle kaudelle jatkamaton puhuu vähemmän (lame duck) 99.6%         </code></pre>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Kokonaismäärä kätkee koostumuksen.</strong> Sama puhe- tai aloitemäärä voi tarkoittaa eri agendaa; vasta koostumus paljastaa painopisteen.</li>
<li><strong>Shift-share erottaa tason koostumuksesta</strong> — se vastaa täsmällisesti, onko kyse “enemmän kaikkea” vai painopisteen siirtymästä.</li>
<li><strong>Iso otos: katso efektikokoa.</strong> Merkitsevyys on lähes taattu; suuruus ei ole.</li>
<li><strong>Kokemus ja aktiivisuus kulkevat yhdessä</strong>, mutta suunnan ja suuruuden kertoo malli uskottavuusvälein — ei ennakkokäsitys konkareista tai keltanokista.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Määrän ja koostumuksen erottaminen — myynnissä, riskeissä tai palautevirroissa — shift-share-hajotelmalla ja efektikoolla. <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Kiitos lukijalle ehdotuksesta. Datalähde: Eduskunnan avoin data (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>jakaumat</category>
  <category>aihekoostumus</category>
  <category>shift-share</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa6b-aihekoostumus.html</guid>
  <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Muuttuuko eduskunnan puhe ajassa?</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa6-puhe-ajassa.html</link>
  <description><![CDATA[ 





<section id="uutiskoukku-puhutaanko-nyt-enemmän-kuin-ennen" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-puhutaanko-nyt-enemmän-kuin-ennen">Uutiskoukku: puhutaanko nyt enemmän kuin ennen?</h2>
<p>“Politiikka on muuttunut puheliaammaksi” on tavallinen väite. Sen voi tarkistaa. Emme kuitenkaan etsi muutosta silmämääräisesti — <strong>annamme datan kertoa, missä murroskohdat ovat</strong>.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(bcp); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(brms)</span>
<span id="cb1-3">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-5">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-6">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>()))</span>
<span id="cb1-9">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-10">puheet  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"puheet.qs"</span>))</span>
<span id="cb1-11">paneeli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paneeli.qs"</span>))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="aikasarja-puheenvuorot-kuukausittain" class="level2">
<h2 class="anchored" data-anchor-id="aikasarja-puheenvuorot-kuukausittain">Aikasarja: puheenvuorot kuukausittain</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">kk <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> puheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kk =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">floor_date</span>(pvm, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"month"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(kk, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"puheita"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(kk) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb2-3"></span>
<span id="cb2-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(kk, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(kk, puheita)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sininen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_smooth</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">method =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"loess"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">se =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"punainen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Täysistuntopuheenvuorot kuukausittain"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6-puhe-ajassa_files/figure-html/aikasarja-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Istuntokausien rytmi (kesätauko) näkyy heti — se on <strong>rakennetta, ei signaalia</strong>, ja siksi analysoimme jatkossa istuntovuositasolla.</p>
</section>
<section id="missä-muutoskohdat-ovat-bayeslainen-changepoint" class="level2">
<h2 class="anchored" data-anchor-id="missä-muutoskohdat-ovat-bayeslainen-changepoint">Missä muutoskohdat ovat? Bayeslainen changepoint</h2>
<p><code>bcp</code> etsii kohdat, joissa aikasarjan taso muuttuu, ja antaa jokaiselle ajankohdalle <strong>todennäköisyyden</strong> olla murroskohta — ei yhtä “oikeaa” vastausta.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">vuosi_sarja <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> puheet <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(vuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"puheita"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(vuosi))   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># keskeneräinen vuosi pois</span></span>
<span id="cb3-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Liian lyhyt sarja changepointiin"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(vuosi_sarja) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>)</span>
<span id="cb3-4"></span>
<span id="cb3-5">bcp_fit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bcp</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.numeric</span>(vuosi_sarja<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>puheita))</span>
<span id="cb3-6">cp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vuosi_sarja <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p_muutos =</span> bcp_fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>posterior.prob,</span>
<span id="cb3-7">                            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arvio =</span> bcp_fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>posterior.mean)</span>
<span id="cb3-8"></span>
<span id="cb3-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(cp, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> p_muutos <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(puheita)), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"oranssi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sininen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> arvio), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"punainen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja"</span>,</span>
<span id="cb3-14">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sec.axis =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sec_axis</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> . <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(cp<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"P(murroskohta)"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>())) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb3-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Missä puheen määrä muuttui? Murroskohtien todennäköisyys"</span>,</span>
<span id="cb3-16">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oranssi: todennäköisyys murroskohdalle · punainen: mallin tasoarvio"</span>,</span>
<span id="cb3-17">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6-puhe-ajassa_files/figure-html/changepoint-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-important callout-titled" title="Tulkinta vaatii kontekstin">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Tulkinta vaatii kontekstin
</div>
</div>
<div class="callout-body-container callout-body">
<p>Murroskohta ei selitä itseään. Havaitut muutokset kannattaa tulkita tunnettuja tapahtumia vasten: <strong>työjärjestyksen muutokset</strong>, <strong>COVID-19:n etäistunnot ja rajoitetut puhujalistat</strong> sekä <strong>vaalikausien vaihtuminen</strong>. Malli kertoo <em>missä</em> muutos on, ei <em>miksi</em> — syyn nimeäminen on tulkintaa, ja se on sanottava ääneen.</p>
</div>
</div>
</section>
<section id="kauden-sisäinen-rytmi-puhutaanko-ennen-vaaleja-enemmän" class="level2">
<h2 class="anchored" data-anchor-id="kauden-sisäinen-rytmi-puhutaanko-ennen-vaaleja-enemmän">Kauden sisäinen rytmi: puhutaanko ennen vaaleja enemmän?</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Vuosien etäisyys seuraaviin vaaleihin (2015, 2019, 2023, 2027)</span></span>
<span id="cb4-2">vaalit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2027</span>)</span>
<span id="cb4-3">rytmi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">puheita =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">seur_vaalit =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(vuosi, \(v) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(vaalit[vaalit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> v])),</span>
<span id="cb4-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuotta_vaaleihin =</span> seur_vaalit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb4-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuotta_vaaleihin <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb4-7"></span>
<span id="cb4-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(rytmi, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(vuotta_vaaleihin), puheita)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_boxplot</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_jitter</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">width =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_discrete</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">limits =</span> rev) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kiihtyykö puhe vaalien lähestyessä?"</span>,</span>
<span id="cb4-13">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vuotta seuraaviin vaaleihin"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja yhteensä"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6-puhe-ajassa_files/figure-html/kausirytmi-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Testi: eroaako vaalivuotta edeltävä vuosi muista? Jakaumavapaa, pieni n.</span></span>
<span id="cb5-2">kw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kruskal.test</span>(puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(vuotta_vaaleihin), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> rytmi)</span>
<span id="cb5-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">khi2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic),<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">df =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>parameter),</span>
<span id="cb5-4">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">signif</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>),</span>
<span id="cb5-5">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">huom =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Pieni n — tulkitse varovasti, väli on leveä"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
   khi2    df      p huom                                       
  &lt;dbl&gt; &lt;int&gt;  &lt;dbl&gt; &lt;chr&gt;                                      
1  7.87     3 0.0487 Pieni n — tulkitse varovasti, väli on leveä</code></pre>
</div>
</div>
</section>
<section id="ennuste-mitä-tapahtuu-20262027" class="level2">
<h2 class="anchored" data-anchor-id="ennuste-mitä-tapahtuu-20262027">Ennuste: mitä tapahtuu 2026–2027?</h2>
<p>Ennustaminen on kykyjen paras testi. Mallinnamme vuosittaisen puheenvuorojen määrän <strong>bayeslaisella negatiivisella binomimallilla</strong> ja ennustamme seuraavat vuodet — uskottavuusvälein, jotka ovat tarkoituksella leveät, koska havaintoja on vähän.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1">fit_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"osa6_trendi.qs"</span>)</span>
<span id="cb7-2">d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vuosi_sarja <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">t =</span> vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(vuosi))</span>
<span id="cb7-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(fit_path)) {</span>
<span id="cb7-4">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brm</span>(puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> t, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">family =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">negbinomial</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d,</span>
<span id="cb7-5">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">chains =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">iter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cores =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">refresh =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb7-6">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(m, fit_path)</span>
<span id="cb7-7">}</span>
<span id="cb7-8">m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(fit_path)</span>
<span id="cb7-9"></span>
<span id="cb7-10">tuleva <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosi =</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vuosi)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2027</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">t =</span> vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vuosi))</span>
<span id="cb7-11">pp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_predict</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> tuleva)</span>
<span id="cb7-12">ennuste <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> tuleva <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb7-13">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keski =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colMeans</span>(pp),</span>
<span id="cb7-14">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pp, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">025</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pp, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">975</span>))</span>
<span id="cb7-15"></span>
<span id="cb7-16"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vuosi, puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sininen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_point</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vuosi, puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_ribbon</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> ennuste, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vuosi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymin =</span> lo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymax =</span> hi),</span>
<span id="cb7-20">              <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">25</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> ennuste, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vuosi, keski), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]],</span>
<span id="cb7-22">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-23">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ennuste: puheenvuorot vaalikauden loppuun"</span>,</span>
<span id="cb7-24">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Turkoosi: 95 % ennusteväli — leveä, koska havaintoja on vähän"</span>,</span>
<span id="cb7-25">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa6-puhe-ajassa_files/figure-html/ennuste-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Rehellinen varaus">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Rehellinen varaus
</div>
</div>
<div class="callout-body-container callout-body">
<p>Ennusteväli on leveä. Se <strong>ei</strong> ole mallin heikkous vaan sen rehellisyys: kymmenen vuosihavainnon perusteella ei voi luvata kapeaa väliä. Kapea väli tässä olisi lupaus, jota data ei kata.</p>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Murroskohdat löytyvät datasta</strong>, mutta niiden <em>syy</em> on tulkintaa — nämä on pidettävä erillään.</li>
<li><strong>Ennuste ilman epävarmuutta on markkinointia.</strong> Leveä väli kertoo totuuden aineiston rajoista.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Murroskohtien tunnistus ja ennusteet, joiden epävarmuus on näkyvissä — <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>aikasarja</category>
  <category>changepoint</category>
  <category>ennuste</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa6-puhe-ajassa.html</guid>
  <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Yritysten muuttoliike</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/ytj-07-kotipaikat.html</link>
  <description><![CDATA[ 





<p>Kunnat kilpailevat yrityksistä. Elinkeinostrategioita kirjoitetaan, tontteja kaavoitetaan ja yrityspalveluita rakennetaan sillä oletuksella, että yrityksiä voi houkutella — ja että niitä voi menettää. Mutta kuinka paljon yrityksiä todella liikkuu kuntien välillä, ja mihin suuntaan?</p>
<p>Kysymykseen on olemassa julkinen vastaus, jota harva katsoo. Kun yritys vaihtaa kotipaikkaansa, se tekee siitä ilmoituksen kaupparekisteriin. Merkintälaji on KOTI, ja niitä on aineistossa yli 250 000. Jokainen niistä on yksi yritys, joka on siirtynyt kunnasta toiseen.</p>
<p>Tässä osassa rakennetaan yritysten muuttoliikkeen kartta — ja tehdään se tavalla, joka on rehellinen sen suhteen, mitä emme tiedä. Sillä juuri aluekehityksessä pienten kuntien luvut ovat niitä, joista tehdään suurimmat johtopäätökset ja joissa epävarmuus on suurin.</p>
<section id="mistä-datassa-on-kyse" class="level2">
<h2 class="anchored" data-anchor-id="mistä-datassa-on-kyse">Mistä datassa on kyse?</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineistona PRH:n rekisteröidyt ilmoitukset (7.11.2014 alkaen) ja perustiedot (CC BY 4.0). Kotipaikan vaihto tunnistetaan KOTI-merkinnästä. <strong>Tärkeä rajoite:</strong> rekisteri kertoo yrityksen nykyisen kotipaikan, ei sen koko historiaa. Voimme siis nähdä, kuinka moni yritys on <em>vaihtanut</em> kotipaikkaa ja missä ne ovat <em>nyt</em>, mutta emme rekonstruoida täydellistä muuttopolkua. Tämä rajoite sanotaan ääneen, koska se määrittää, mihin kysymyksiin data voi vastata — ja mihin ei.</p>
<p>Lisäksi: kotipaikan vaihto on juridinen tapahtuma, ei välttämättä fyysinen muutto. Yritys voi siirtää kotipaikkansa ilman että yksikään työpaikka liikkuu.</p>
</div>
</div>
</section>
<section id="kuinka-moni-yritys-ylipäätään-muuttaa" class="level2">
<h2 class="anchored" data-anchor-id="kuinka-moni-yritys-ylipäätään-muuttaa">Kuinka moni yritys ylipäätään muuttaa?</h2>
<p>Ensimmäinen kysymys on mittakaava. Muuttaminen voi tuntua yleiseltä, koska yksittäiset siirrot ylittävät uutiskynnyksen — mutta onko se sitä?</p>
<p>Osakeyhtiöistä <strong>59.5%</strong> on vaihtanut kotipaikkaansa vähintään kerran, ja 1.8% vähintään kahdesti. Muuttaminen ei siis ole marginaalinen ilmiö, mutta se ei myöskään koske enemmistöä. Se on vähemmistön käyttäytymistä — ja juuri siksi kiinnostavaa: kuka muuttaa?</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-07-kotipaikat_files/figure-html/muuttojakauma-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="voittajat-ja-häviäjät-ja-miksi-nettoluku-pettää" class="level2">
<h2 class="anchored" data-anchor-id="voittajat-ja-häviäjät-ja-miksi-nettoluku-pettää">Voittajat ja häviäjät — ja miksi nettoluku pettää</h2>
<p>Nyt olennaiseen. Lasketaan kullekin kunnalle, kuinka moni sinne <em>päätynyt</em> yritys on muuttanut (eli tullut jostain muualta) suhteessa kunnan yrityskantaan. Koska rekisteri kertoo nykyisen kotipaikan, tämä kuvaa <strong>muuttaneiden yritysten keskittymistä</strong>: mitkä kunnat ovat vetovoimaisia niiden yritysten silmissä, jotka ylipäätään liikkuvat.</p>
<p>Tässä on ansa, johon aluekehityskeskustelu tyypillisesti astuu. Pienessä kunnassa muutama muuttanut yritys tuottaa dramaattisen prosenttiluvun, joka on puhdasta kohinaa. Siksi laskemme kullekin kunnalle <strong>Beta-Binomi-posteriorin</strong>: piste on paras arvaus, jana on se, mitä emme tiedä.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-07-kotipaikat_files/figure-html/kunnat-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="callout callout-style-default callout-important callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Miksi tässä ei ole kuntien “top 10 -listaa” ilman epävarmuutta
</div>
</div>
<div class="callout-body-container callout-body">
<p>Jos olisin piirtänyt pelkät pisteet, saisit siistin listan voittajista ja häviäjistä — ja se olisi harhaanjohtava. Katso janoja: pienemmillä kunnilla ne ovat leveitä, ja monen kunnan välit menevät päällekkäin. Se tarkoittaa, että niiden <strong>järjestys ei ole luotettava</strong>. Kunta, joka näyttää kymmenenneltä, voi todellisuudessa olla kolmas tai kahdeskymmenes.</p>
<p>Tämä on koko sloganini ydin: maailma on jakauma. Kuntalistat, jotka esittävät pistelukuja järjestyksessä, myyvät varmuutta, jota datassa ei ole.</p>
</div>
</div>
</section>
<section id="ennustaako-muuttaminen-jotain-bayesilainen-malli" class="level2">
<h2 class="anchored" data-anchor-id="ennustaako-muuttaminen-jotain-bayesilainen-malli">Ennustaako muuttaminen jotain? Bayesilainen malli</h2>
<p>Onko muuttaminen sattumaa vai ennustettavissa? Rakennan <strong>bayesilaisen logistisen regression</strong>, joka ennustaa muuttamisen todennäköisyyden yrityksen iän ja kotikunnan koon perusteella. Malli valittiin, koska se antaa vaikutuksille koko jakauman — päättäjä näkee, kuinka varmoja voimme olla — eikä pistelukua.</p>
<section id="counterfactual-neljä-yritystä-neljä-todennäköisyyttä" class="level3">
<h3 class="anchored" data-anchor-id="counterfactual-neljä-yritystä-neljä-todennäköisyyttä">Counterfactual: neljä yritystä, neljä todennäköisyyttä</h3>
<p>Konkretisoin mallin vertaamalla neljää rakennettua yritystä. Kysymys on counterfactual: <em>jos yritys olisi tämän ikäinen ja tämän kokoisessa kunnassa, kuinka todennäköisesti se olisi vaihtanut kotipaikkaa?</em></p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-07-kotipaikat_files/figure-html/counterfactual-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle?</h2>
<p>Yritysten muuttoliike on todellinen mutta vähemmistön ilmiö, ja se kasautuu: sama yritys muuttaa usein uudestaan. Kunnan elinkeinopolitiikan kannalta tämä tarkoittaa, että houkuteltava joukko on pienempi kuin yleensä oletetaan — mutta se joukko on tunnistettavissa.</p>
<p>Tärkein viesti on kuitenkin menetelmällinen. Aluekehityksessä tehdään jatkuvasti päätöksiä pienten kuntien pienistä luvuista, ja ne luvut esitetään lähes aina pistearvoina järjestyslistoilla. Tämän analyysin epävarmuusvälit näyttävät, että suuri osa noista järjestyksistä on kohinaa. Kunta ei ole “Suomen 7. paras” — se on kunta, jonka todellinen sijoitus on jossain hyvin leveällä välillä.</p>
<p>Kun päätöksiä tehdään miljoonilla, kannattaa tietää kumpaa katsoo: pistettä vai jakaumaa.</p>
<hr>
<p><em>Tämä analyysi on osa avoimen datan sarjaani. Autan kuntia, hyvinvointialueita ja julkishallintoa tekemään avoimesta datasta päätöksiä, jotka kestävät epävarmuuden. <a href="https://www.kristianvepsalainen.com">kristianvepsalainen.com</a>.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>aluekehitys</category>
  <category>julkishallinto</category>
  <category>YTJ</category>
  <guid>https://kristianvepsalainen.com/posts/ytj-07-kotipaikat.html</guid>
  <pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Eduskunnan hiljaiset</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa5-hiljaiset.html</link>
  <description><![CDATA[ 





<section id="uutiskoukku-hiljainen-kansanedustaja" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-hiljainen-kansanedustaja">Uutiskoukku: hiljainen kansanedustaja</h2>
<p>Osassa 3 näimme, että puheaika keskittyy voimakkaasti. Toinen puoli samasta jakaumasta on kiinnostavampi: <strong>hiljainen häntä</strong>. Ketkä vaikenevat — ja tarkoittaako vaikeneminen passiivisuutta?</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(brms)</span>
<span id="cb1-2">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-4">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-5">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>()))</span>
<span id="cb1-8">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-9">paneeli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paneeli.qs"</span>))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="kuka-on-hiljainen" class="level2">
<h2 class="anchored" data-anchor-id="kuka-on-hiljainen">Kuka on “hiljainen”?</h2>
<p>Määrittely on tehtävä ennen analyysiä, ei sen jälkeen. Käytämme suhteellista rajaa: hiljaisia ovat ne edustajavuodet, jotka jäävät <strong>alimpaan neljännekseen</strong> kyseisenä vuonna. Näin määritelmä ei riipu siitä, oliko istuntovuosi vilkas vai hiljainen.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kvartiili =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ntile</span>(n_puheita, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hiljainen =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(kvartiili <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ungroup</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(ika), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(sukupuoli))</span>
<span id="cb2-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hiljaisia ei löydy"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>hiljainen) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>)</span>
<span id="cb2-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>hiljainen)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>[1] 0.25119</code></pre>
</div>
</div>
</section>
<section id="ennustemalli-mikä-ennustaa-vaikenemista" class="level2">
<h2 class="anchored" data-anchor-id="ennustemalli-mikä-ennustaa-vaikenemista">Ennustemalli: mikä ennustaa vaikenemista?</h2>
<p>Käytämme <strong>bayeslaista logistista regressiota</strong>. Se antaa kunkin taustatekijän vaikutuksen todennäköisyytenä, uskottavuusvälein — ei pelkkänä tähtimerkkinä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">fit_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"osa5_logit.qs"</span>)</span>
<span id="cb4-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(fit_path)) {</span>
<span id="cb4-3">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brm</span>(hiljainen <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> sukupuoli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> ika <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> vuosi),</span>
<span id="cb4-4">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">family =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">bernoulli</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d,</span>
<span id="cb4-5">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">chains =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">iter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cores =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">refresh =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb4-6">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(m, fit_path)</span>
<span id="cb4-7">}</span>
<span id="cb4-8">m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(fit_path)</span>
<span id="cb4-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summary</span>(m)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code> Family: bernoulli 
  Links: mu = logit 
Formula: hiljainen ~ sukupuoli + ika + (1 | vuosi) 
   Data: d (Number of observations: 2731) 
  Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 4000

Multilevel Hyperparameters:
~vuosi (Number of levels: 12) 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept)     0.04      0.03     0.00     0.13 1.00     2619     1980

Regression Coefficients:
                Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept          -2.23      0.22    -2.67    -1.81 1.00     5666     3257
sukupuoliNainen     0.06      0.09    -0.12     0.24 1.00     5396     2902
ika                 0.02      0.00     0.01     0.03 1.00     5997     3238

Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Ennustettu vaikenemisen todennäköisyys iän ja sukupuolen mukaan</span></span>
<span id="cb6-2">nd <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">expand_grid</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unique</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>sukupuoli), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ika =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">75</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>))</span>
<span id="cb6-3">pe <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> nd, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)</span>
<span id="cb6-4">pred <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> nd <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb6-5">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keski =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colMeans</span>(pe),</span>
<span id="cb6-6">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">lo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pe, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">025</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(pe, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, quantile, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">975</span>))</span>
<span id="cb6-7"></span>
<span id="cb6-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(pred, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(ika, keski, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> sukupuoli, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> sukupuoli)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_ribbon</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymin =</span> lo, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ymax =</span> hi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_color_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)])) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)])) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kuka vaikenee? Ennustettu todennäköisyys uskottavuusvälein"</span>,</span>
<span id="cb6-15">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ikä"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"P(kuuluu hiljaisimpaan neljännekseen)"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa5-hiljaiset_files/figure-html/efektit-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="tärkein-käänne-hiljaisuus-passiivisuus" class="level2">
<h2 class="anchored" data-anchor-id="tärkein-käänne-hiljaisuus-passiivisuus">Tärkein käänne: hiljaisuus ≠ passiivisuus</h2>
<p>Täysistuntopuhe on vain yksi vaikuttamisen kanava. Kansanedustaja voi tehdä <strong>kirjallisia kysymyksiä</strong> ja <strong>aloitteita</strong> puhumatta salissa sanaakaan. Ennen kuin kutsumme ketään passiiviseksi, katsotaan koko aktiivisuusprofiili.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># !! LAAJENNUS: VaskiData sisältää kirjalliset kysymykset ja aloitteet.</span></span>
<span id="cb7-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Lisää data-prepiin haku ja liitä tähän henkilo_nro:lla.</span></span>
<span id="cb7-3"></span>
<span id="cb7-4">filepath <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aktiivisuus.qs"</span>)</span>
<span id="cb7-5"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(filepath)){</span>
<span id="cb7-6">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># ---------- Kirjalliset kysymykset &amp; aloitteet (VaskiData) ----------</span></span>
<span id="cb7-7">vaski_raw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cache</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vaski_raw"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hae_taulu</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"VaskiData"</span>))</span>
<span id="cb7-8"></span>
<span id="cb7-9">relevantit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> vaski_raw <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tyyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_extract</span>(Eduskuntatunnus, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"^[A-Za-zÄÖ]+"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(tyyppi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"KK"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TPA"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TAA"</span>))</span>
<span id="cb7-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Relevantteja asiakirjoja ei löytynyt"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(relevantit) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>)</span>
<span id="cb7-13"></span>
<span id="cb7-14">poimi_tekija <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(xml_str) {</span>
<span id="cb7-15">  doc <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tryCatch</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">read_xml</span>(xml_str), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">error =</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(e) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">return</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>))</span>
<span id="cb7-16">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.null</span>(doc)) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">return</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tekija =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vpvuosi =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_integer_</span>))</span>
<span id="cb7-17">  ln <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//*[local-name()='"</span>, x, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"']"</span>)</span>
<span id="cb7-18">  ident <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_first</span>(doc, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ln</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RakenneAsiakirja"</span>))</span>
<span id="cb7-19">  h <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_first</span>(ident, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ln</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IdentifiointiOsa"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"//*[local-name()='Henkilo']"</span>))</span>
<span id="cb7-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb7-21">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tekija  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_attr</span>(h, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"muuTunnus"</span>),</span>
<span id="cb7-22">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vpvuosi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">suppressWarnings</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_text</span>(</span>
<span id="cb7-23">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_first</span>(doc, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ln</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"RakenneAsiakirja"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"//*[local-name()='ValtiopaivavuosiTeksti']"</span>)))))</span>
<span id="cb7-24">  )</span>
<span id="cb7-25">}</span>
<span id="cb7-26"></span>
<span id="cb7-27">aktiivisuus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> relevantit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">tiedot =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map</span>(XmlData, poimi_tekija)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-29">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(tiedot) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-30">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(tekija)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-31">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">transmute</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">henkilo_nro =</span> tekija,</span>
<span id="cb7-32">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(vpvuosi, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_extract</span>(Eduskuntatunnus, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">d{4}"</span>))),</span>
<span id="cb7-33">            tyyppi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-34">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(vuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-35">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(henkilo_nro, vuosi, tyyppi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-36">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_wider</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_from =</span> tyyppi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_from =</span> n, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_fill =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-37">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rename</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_kysymykset =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any_of</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"KK"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-38">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_aloitteet =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rowSums</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any_of</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TPA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"LA"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"TAA"</span>)))))</span>
<span id="cb7-39"></span>
<span id="cb7-40"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Linkitystarkistus: osuuko tekijätunnus MP-dataan?</span></span>
<span id="cb7-41">osuvuus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(aktiivisuus<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>henkilo_nro <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> mp<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>henkilo_nro)</span>
<span id="cb7-42"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tekijätunnus ei linkity MP-dataan — muuTunnus ei olekaan henkilo_nro"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> osuvuus <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>)</span>
<span id="cb7-43"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">message</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aktiivisuus linkittyy MP-dataan: "</span>, scales<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(osuvuus))</span>
<span id="cb7-44"></span>
<span id="cb7-45">qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(aktiivisuus, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aktiivisuus.qs"</span>))</span>
<span id="cb7-46">}</span>
<span id="cb7-47"></span>
<span id="cb7-48">akt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(filepath)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># henkilo_nro, vuosi, n_kysymykset, n_aloitteet</span></span>
<span id="cb7-49"></span>
<span id="cb7-50">prof <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> d <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(akt, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuosi"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-51">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(n_kysymykset, n_aloitteet), \(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(x, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)))</span>
<span id="cb7-52"></span>
<span id="cb7-53"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Testataan: ovatko salissa hiljaiset myös kirjallisesti hiljaisia?</span></span>
<span id="cb7-54">wt <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">wilcox.test</span>(n_kysymykset <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> hiljainen, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> prof)</span>
<span id="cb7-55">r_rb <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(wt<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span></span>
<span id="cb7-56">  (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(prof<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>hiljainen<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(prof<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>hiljainen<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb7-57"></span>
<span id="cb7-58"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(prof, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> n_kysymykset, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(hiljainen, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puhuu"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hiljainen"</span>)))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-59">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_halfeye</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"oranssi"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-60">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vaikenevatko hiljaiset myös kirjallisesti?"</span>,</span>
<span id="cb7-61">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jos jakaumat menevät päällekkäin, hiljaisuus ei ole passiivisuutta"</span>,</span>
<span id="cb7-62">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kirjallisia kysymyksiä vuodessa"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Testin valinta">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Testin valinta
</div>
</div>
<div class="callout-body-container callout-body">
<p>Vertaamme kahta ryhmää vinolla lukumäärämuuttujalla, joten käytämme jakaumavapaata Wilcoxonin rank-sum -testiä ja raportoimme efektikoon (rank-biserial), emme pelkkää p-arvoa. Efektikoko kertoo, onko ero <em>merkittävä</em>, ei vain <em>merkitsevä</em>.</p>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Vaikeneminen on ennustettavissa</strong> taustatekijöistä — mutta vaikutukset kannattaa lukea uskottavuusvälein, ei tähtinä.</li>
<li><strong>Yksi mittari ei riitä.</strong> Jos arvioisimme edustajia pelkällä puheenvuorolaskurilla, tekisimme juuri sen virheen, jota vastaan tämä sarja varoittaa: yksi pistearvo yhdestä kanavasta.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Monilähteinen aktiivisuusprofiili yksittäisen KPI:n sijaan — <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>ennustemalli</category>
  <category>logistinen regressio</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa5-hiljaiset.html</guid>
  <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Sääntelyn sormenjälki</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/ytj-06-edunsaajat.html</link>
  <description><![CDATA[ 





<p>Kun laki muuttuu, se jättää jäljen dataan. Harvoin jälki on niin selvä kuin kaupparekisterissä: EU:n rahanpesudirektiivin myötä suomalaisten yhtiöiden tuli ilmoittaa <strong>tosiasialliset edunsaajansa</strong> — ne luonnolliset henkilöt, jotka viime kädessä omistavat tai käyttävät määräysvaltaa. Velvollisuus tuli voimaan heinäkuussa 2019, ja ilmoitukset piti tehdä pääosin heinäkuuhun 2020 mennessä.</p>
<p>Rekisterissä tämä näkyy merkintälajina ESR. Se on aineiston neljänneksi yleisin koodi — lähes 430 000 merkintää. Mutta pelkkä kokonaismäärä on taas piste, joka kätkee kaiken kiinnostavan. Olennaista on <strong>milloin</strong> ilmoitukset tehtiin, <strong>kuka</strong> teki ne ajoissa, ja ennen kaikkea: <strong>kuka ei tehnyt niitä lainkaan.</strong></p>
<p>Viimeinen kysymys on se, joka kiinnostaa compliance-toimintoa ja rahanpesuvalvontaa. Jos edunsaajailmoituksen tekemättä jättäminen ei jakaudu satunnaisesti, vaan keskittyy tietyntyyppisiin yhtiöihin, rekisteri tuottaa ilmaisen riskisignaalin.</p>
<section id="mistä-datassa-on-kyse" class="level2">
<h2 class="anchored" data-anchor-id="mistä-datassa-on-kyse">Mistä datassa on kyse?</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineistona PRH:n rekisteröidyt ilmoitukset (7.11.2014 alkaen) ja perustiedot (CC BY 4.0), rajattuna <strong>eläviin osakeyhtiöihin</strong>. Edunsaajailmoitus tunnistetaan ESR-merkinnästä. Tärkeä rajaus: velvollisuus ei koske aivan kaikkia yhteisöjä samalla tavalla (esim. pörssiyhtiöillä ja yksityisillä elinkeinonharjoittajilla on poikkeuksia), joten tarkastelu rajataan osakeyhtiöihin, joilla velvollisuus on selkeä ja yhtenäinen. Ilmoituksen puuttuminen rekisteristä ei ole todiste laiminlyönnistä — se on signaali, ei tuomio. Tämä ero on syytä pitää mielessä koko kirjoituksen ajan.</p>
</div>
</div>
</section>
<section id="sääntely-näkyy-datassa" class="level2">
<h2 class="anchored" data-anchor-id="sääntely-näkyy-datassa">Sääntely näkyy datassa</h2>
<p>Piirretään ESR-merkintöjen kuukausivirta. Jos sääntely ohjaa käyttäytymistä, sen pitäisi näkyä tässä kuvaajassa ilman mitään mallinnusta.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-06-edunsaajat_files/figure-html/aikasarja-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Kuvaaja on harvinaisen puhdas esimerkki siitä, miten sääntely muuttaa käyttäytymistä: ennen 2019 koodia ei käytännössä käytetä, sitten tulee piikki, ja sen jälkeen jää tasaisempi pohjavirta uusista yhtiöistä. Tämä on <strong>keskeytetty aikasarja</strong> (interrupted time series) puhtaimmillaan.</p>
</section>
<section id="kuka-jätti-ilmoittamatta" class="level2">
<h2 class="anchored" data-anchor-id="kuka-jätti-ilmoittamatta">Kuka jätti ilmoittamatta?</h2>
<p>Nyt varsinaiseen kysymykseen. Jokaiselle ennen määräaikaa perustetulle elävälle osakeyhtiölle katsotaan, löytyykö rekisteristä ESR-merkintää.</p>
<p>Ennen määräaikaa perustetuista elävistä osakeyhtiöistä <strong>9.7% ei ole ESR-merkintää rekisterissä.</strong> Luku on suuri, ja se on ensimmäinen yllätys: velvollisuus on lakisääteinen, mutta noudattaminen ei ole läheskään täydellistä.</p>
<p>Ennen kuin tästä vedetään johtopäätöksiä, on syytä olla rehellinen: osalla puuttuminen selittyy poikkeuksilla ja aineiston rajoilla, ei laiminlyönnillä. Mutta jos puuttuminen olisi pelkkää satunnaista kohinaa tai teknistä artefaktia, sen pitäisi jakautua tasaisesti yhtiötyyppien kesken. Testataan, jakautuuko se.</p>
</section>
<section id="eroavatko-ryhmät-tilastollisesti" class="level2">
<h2 class="anchored" data-anchor-id="eroavatko-ryhmät-tilastollisesti">Eroavatko ryhmät tilastollisesti?</h2>
<p>Toimialan ja ilmoittamattomuuden yhteyttä testaa khiin neliö; koska aineisto on suuri, p-arvo olisi väistämättä pieni, joten raportoin <strong>efektikoon</strong> (Cramérin V), joka kertoo eron voimakkuuden. Yhtiön ikä on vino jatkuva muuttuja, joten sille käytän Mann–Whitneyn U-testiä ja rank-biserial-efektikokoa.</p>
<div class="cell">
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Ryhmäerot efektikokoineen</caption>
<colgroup>
<col style="width: 56%">
<col style="width: 15%">
<col style="width: 3%">
<col style="width: 24%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left;">Vertailu</th>
<th style="text-align: left;">Testi</th>
<th style="text-align: right;">p</th>
<th style="text-align: left;">Efektikoko</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Toimiala × ilmoituksen puuttuminen</td>
<td style="text-align: left;">Khiin neliö</td>
<td style="text-align: right;">0</td>
<td style="text-align: left;">Cramérin V = 0.242</td>
</tr>
<tr class="even">
<td style="text-align: left;">Yhtiön ikä: ilmoittamatta jättäneet vs.&nbsp;ilmoittaneet</td>
<td style="text-align: left;">Mann–Whitney U</td>
<td style="text-align: right;">0</td>
<td style="text-align: left;">rank-biserial = -0.072</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section id="ilmoittamattomuus-toimialoittain-jakaumana" class="level2">
<h2 class="anchored" data-anchor-id="ilmoittamattomuus-toimialoittain-jakaumana">Ilmoittamattomuus toimialoittain — jakaumana</h2>
<p>Toimialoittainen osuus on tarkka isoilla aloilla ja epävarma pienillä. Siksi esitän sen Beta-Binomi-posteriorina: leveä väli on rehellinen tunnustus siitä, ettemme tiedä.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-06-edunsaajat_files/figure-html/toimialat-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="ennustemalli-ja-counterfactual" class="level2">
<h2 class="anchored" data-anchor-id="ennustemalli-ja-counterfactual">Ennustemalli ja counterfactual</h2>
<p>Yksittäiset vertailut eivät kerro, mikä tekijä on <em>itsenäisesti</em> tärkeä: nuoret yhtiöt voivat olla myös tietyillä toimialoilla ja tietyissä kaupungeissa. Erottelu vaatii mallin, joka pitää muut tekijät vakioina.</p>
<p>Käytän <strong>bayesilaista logistista regressiota</strong>, koska se antaa jokaiselle vaikutukselle koko todennäköisyysjakauman — päättäjä näkee suoraan, kuinka varmasti tekijä ennustaa ilmoittamattomuutta — eikä pelkkää pistearvoa.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-06-edunsaajat_files/figure-html/malli-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle?</h2>
<p>Kolme johtopäätöstä, jotka ovat suoraan käyttökelpoisia.</p>
<p>Ensinnäkin <strong>sääntelyn vaikutus on mitattavissa avoimesta datasta</strong>. Emme tarvinneet viranomaisraportteja nähdäksemme, milloin ja miten voimakkaasti rahanpesudirektiivi puri — rekisteri kertoo sen itse. Sama menetelmä toimii minkä tahansa rekisteröintivelvoitteen vaikuttavuuden arviointiin.</p>
<p>Toiseksi <strong>noudattaminen ei ole täydellistä eikä satunnaista</strong>. Ilmoittamattomuus painottuu tunnistettavasti, mikä tarkoittaa, että valvontaresurssit voidaan kohdentaa — riskiperusteisesti, kuten rahanpesulaki itse edellyttää.</p>
<p>Kolmanneksi, ja tärkeimpänä: tämä on <strong>signaali, ei tuomio</strong>. Puuttuva merkintä voi johtua poikkeuksesta, viiveestä tai teknisestä syystä. Juuri siksi tulos on esitetty todennäköisyysjakaumana eikä listana syyllisistä. Riskimalli, joka esittää epävarmuutensa, on käyttökelpoinen; sellainen, joka teeskentelee varmuutta, on vaarallinen.</p>
<hr>
<p><em>Tämä analyysi on osa avoimen datan sarjaani. Autan compliance- ja riskienhallintatoimintoja rakentamaan avoimesta datasta riskiperusteisia, epävarmuuden tunnustavia malleja — vuokrattavana Head of Data -osaajana. <a href="https://www.kristianvepsalainen.com">kristianvepsalainen.com</a>.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>compliance</category>
  <category>rahanpesu</category>
  <category>YTJ</category>
  <guid>https://kristianvepsalainen.com/posts/ytj-06-edunsaajat.html</guid>
  <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Puhuuko oppositio enemmän?</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa4-hallitus-vs-oppositio.html</link>
  <description><![CDATA[ 





<section id="uutiskoukku-oppositio-huutaa-hallitus-vaikenee" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-oppositio-huutaa-hallitus-vaikenee">Uutiskoukku: “oppositio huutaa, hallitus vaikenee”</h2>
<p>Poliittinen kansanviisaus sanoo, että oppositio puhuu ja hallitus hallitsee. Onko näin? Kysymys on helppo esittää mutta yllättävän helppo <em>testata väärin</em>.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(brms)</span>
<span id="cb1-3">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-5">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-6">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>(),</span>
<span id="cb1-9">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">legend.position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"top"</span>))</span>
<span id="cb1-10"></span>
<span id="cb1-11">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-12">paneeli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paneeli.qs"</span>))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="kaksi-ansaa-jotka-pilaisivat-vertailun" class="level2">
<h2 class="anchored" data-anchor-id="kaksi-ansaa-jotka-pilaisivat-vertailun">Kaksi ansaa, jotka pilaisivat vertailun</h2>
<div class="callout callout-style-default callout-important callout-titled" title="Miksi naiivi vertailu epäonnistuu">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Important</span>Miksi naiivi vertailu epäonnistuu
</div>
</div>
<div class="callout-body-container callout-body">
<p><strong>1. Ministerit.</strong> Hallituspuolueissa istuvat ministerit puhuvat salissa paljon — he vastaavat kyselytunneilla. Jos heidät niputetaan hallituspuolueiden riviedustajiin, “hallitus” muuttuu kaksihuippuiseksi jakaumaksi, ja keskiarvovertailu vertaa omenoita kahteen eri appelsiiniin. <strong>Erotamme ministerit omaksi ryhmäkseen.</strong></p>
<p><strong>2. Lukumäärädata.</strong> Puheenvuorojen määrä on vino, ylihajaantunut ja nollapainotteinen. t-testi olettaa normaalijakauman — se antaisi luottamusvälit, joihin ei voi luottaa. Käytämme <strong>negatiivista binomimallia</strong>, joka on suunniteltu juuri tällaiselle datalle.</p>
</div>
</div>
</section>
<section id="hallitusoppositio-luokittelu" class="level2">
<h2 class="anchored" data-anchor-id="hallitusoppositio-luokittelu">Hallitus/oppositio-luokittelu</h2>
<p>Eduskunnan rajapinta kertoo eduskuntaryhmän, mutta ei sitä, oliko ryhmä kyseisenä vuonna hallituksessa. Tämä tieto on julkinen mutta täytyy koodata itse.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># !! VARMISTA/TÄYDENNÄ: hallituspuolueet vuosittain (julkinen tieto).</span></span>
<span id="cb2-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Esimerkkirakenne; täydennä kattamaan puhedatan vuodet.</span></span>
<span id="cb2-3">hallitus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tribble</span>(</span>
<span id="cb2-4">  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>vuosi, <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>hallituspuolueet,</span>
<span id="cb2-5">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2015</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),</span>
<span id="cb2-6">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2016</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),</span>
<span id="cb2-7">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2017</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sininen tulevaisuus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),</span>
<span id="cb2-8">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2018</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sininen tulevaisuus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>),</span>
<span id="cb2-9">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2019</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmistoliitto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb2-10">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2020</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmistoliitto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb2-11">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2021</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmistoliitto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb2-12">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2022</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sosialidemokraattinen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keskusta"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vihreä"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vasemmistoliitto"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>),</span>
<span id="cb2-13">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2023</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kristillisdemokraattinen"</span>),</span>
<span id="cb2-14">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2024</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kristillisdemokraattinen"</span>),</span>
<span id="cb2-15">  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2025</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kokoomus"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Perussuomalaiset"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ruotsalainen"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kristillisdemokraattinen"</span>))</span>
<span id="cb2-16"></span>
<span id="cb2-17">mp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp.qs"</span>))</span>
<span id="cb2-18">ministerit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(ministeri <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pull</span>(henkilo_nro)</span>
<span id="cb2-19"></span>
<span id="cb2-20">d <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(ryhma)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(hallitus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuosi"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-22">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb2-23">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">on_hallitus =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map2_lgl</span>(ryhma, hallituspuolueet,</span>
<span id="cb2-24">      \(r, h) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.null</span>(h)) <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">any</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(r, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fixed</span>(h, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ignore_case =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)))),</span>
<span id="cb2-25">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">asema =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb2-26">      henkilo_nro <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> ministerit <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&amp;</span> on_hallitus <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ministeri"</span>,</span>
<span id="cb2-27">      on_hallitus  <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hallitus (rivi)"</span>,</span>
<span id="cb2-28">      <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>on_hallitus <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oppositio"</span>,</span>
<span id="cb2-29">      <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-30">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(asema)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">asema =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(asema,</span>
<span id="cb2-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oppositio"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hallitus (rivi)"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ministeri"</span>)))</span>
<span id="cb2-32"></span>
<span id="cb2-33"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Asemaluokittelu epäonnistui"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb2-34">d <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(asema)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 3 × 2
  asema               n
  &lt;fct&gt;           &lt;int&gt;
1 Oppositio         821
2 Hallitus (rivi)     1
3 Ministeri         402</code></pre>
</div>
</div>
</section>
<section id="jakauma-ensin-ja-katso-ministereitä" class="level2">
<h2 class="anchored" data-anchor-id="jakauma-ensin-ja-katso-ministereitä">Jakauma ensin — ja katso ministereitä</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(d, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> n_puheita, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> asema, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> asema)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_slab</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">normalize =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"groups"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">85</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)])) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb4-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuorojen jakauma aseman mukaan"</span>,</span>
<span id="cb4-5">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ministerit erotettuna — muuten 'hallitus' olisi kaksihuippuinen"</span>,</span>
<span id="cb4-6">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja vuodessa"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">guides</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"none"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa4-hallitus-vs-oppositio_files/figure-html/jakaumat-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="bayeslainen-negatiivinen-binomimalli" class="level2">
<h2 class="anchored" data-anchor-id="bayeslainen-negatiivinen-binomimalli">Bayeslainen negatiivinen binomimalli</h2>
<p>Mallinnamme puheenvuorojen määrän aseman funktiona. Satunnaisvaikutus edustajalle huomioi sen, että sama henkilö esiintyy useana vuonna.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">fit_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"osa4_negbin.qs"</span>)</span>
<span id="cb5-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(fit_path)) {</span>
<span id="cb5-3">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brm</span>(n_puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> asema <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span> vuosi),</span>
<span id="cb5-4">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">family =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">negbinomial</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d,</span>
<span id="cb5-5">           <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">chains =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">iter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">cores =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">refresh =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb5-6">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(m, fit_path)</span>
<span id="cb5-7">}</span>
<span id="cb5-8">m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(fit_path)</span>
<span id="cb5-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summary</span>(m)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code> Family: negbinomial 
  Links: mu = log 
Formula: n_puheita ~ asema + (1 | henkilo_nro) + (1 | vuosi) 
   Data: d (Number of observations: 1224) 
  Draws: 4 chains, each with iter = 2000; warmup = 1000; thin = 1;
         total post-warmup draws = 4000

Multilevel Hyperparameters:
~henkilo_nro (Number of levels: 262) 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept)     0.96      0.06     0.84     1.08 1.01      788     1190

~vuosi (Number of levels: 11) 
              Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
sd(Intercept)     0.48      0.13     0.30     0.79 1.00     1363     2347

Regression Coefficients:
                  Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept             3.04      0.17     2.70     3.37 1.00      952     1190
asemaHallitusrivi    -0.68      0.85    -2.18     1.16 1.00     4800     3039
asemaMinisteri        0.14      0.09    -0.03     0.31 1.00     1971     2256

Further Distributional Parameters:
      Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
shape     2.22      0.12     2.01     2.45 1.00     2278     2840

Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).</code></pre>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Odotettu puheenvuorojen määrä asemittain, 95 % uskottavuusvälein</span></span>
<span id="cb7-2">nd <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">asema =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema)))</span>
<span id="cb7-3">pred <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> nd, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set_names</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-5">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">everything</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"asema"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"odotettu"</span>)</span>
<span id="cb7-6"></span>
<span id="cb7-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(pred, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> odotettu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_rev</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(asema, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">levels</span>(d<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>asema))))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stat_halfeye</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.width =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">66</span>, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">95</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb7-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Odotettu puheenvuorojen määrä — jakaumana, ei pisteenä"</span>,</span>
<span id="cb7-10">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posteriorijakaumat 66 % ja 95 % uskottavuusvälein"</span>,</span>
<span id="cb7-11">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja vuodessa"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa4-hallitus-vs-oppositio_files/figure-html/vertailu-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Suora todennäköisyysväittämä: puhuuko oppositio enemmän kuin hallituksen rivi?</span></span>
<span id="cb8-2">post <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">posterior_epred</span>(m, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">newdata =</span> nd, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">re_formula =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>)</span>
<span id="cb8-3">p_opp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(post[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> post[,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>])</span>
<span id="cb8-4">glue<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">glue</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"P(oppositio puhuu enemmän kuin hallituksen riviedustaja) = {percent(p_opp, .1)}"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code>P(oppositio puhuu enemmän kuin hallituksen riviedustaja) = 80.2%</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Miksi tämä on parempi kuin p-arvo">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Miksi tämä on parempi kuin p-arvo
</div>
</div>
<div class="callout-body-container callout-body">
<p>Bayeslainen malli antaa suoraan sen, mitä päättäjä haluaa tietää: <strong>todennäköisyyden, että väite pitää paikkansa</strong>. P-arvo vastaa käänteiseen kysymykseen (“kuinka epätodennäköistä tämä data olisi, jos eroa ei olisi”) — se on hyödyllinen mutta vaikeampi tulkita oikein.</p>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Ryhmävertailu vaatii oikean mallin.</strong> Vino lukumäärädata ja piiloutuva alaryhmä (ministerit) kääntäisivät naiivin keskiarvovertailun harhaan.</li>
<li><strong>Vastaus tulee todennäköisyytenä</strong>, ei binäärisenä “merkitsevä/ei-merkitsevä”.</li>
</ul>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Ryhmävertailut oikealla jakaumaoletuksella ja piiloutuvat alaryhmät esiin — <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data (CC BY 4.0). Hallituskokoonpanot koodattu käsin.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>bayes</category>
  <category>negatiivinen binomi</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa4-hallitus-vs-oppositio.html</guid>
  <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Kaksi tapaa kuolla</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/ytj-05-kaksi-tapaa-kuolla.html</link>
  <description><![CDATA[ 





<p>Kun yritys katoaa Suomen kaupparekisteristä, julkisessa keskustelussa puhutaan yleensä konkursseista. Se on harhaanjohtavaa: valtaosa yrityskuolemista ei ole konkursseja. Yritys voi purkautua hallitusti, sulautua toiseen, tulla poistetuksi toimimattomana — tai ajautua konkurssiin. Nämä ovat velkojan, työntekijän ja sopimuskumppanin näkökulmasta täysin eri tapahtumia: hiljaisessa lakkaamisessa velat on tyypillisesti hoidettu, konkurssissa joku jää ilman saataviaan.</p>
<p>Yksi kuolleisuusluku on siis piste, joka kätkee jakauman. Tässä osassa jaamme yrityskuolemat kahteen polkuun ja kysymme: kuinka yleinen konkurssipolku on, missä se painottuu, ja näkyykö polkujen ero yrityksen käytöksessä jo ennen loppua?</p>
<section id="mistä-datassa-on-kyse" class="level2">
<h2 class="anchored" data-anchor-id="mistä-datassa-on-kyse">Mistä datassa on kyse?</h2>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Note
</div>
</div>
<div class="callout-body-container callout-body">
<p>Aineistona ovat PRH:n avoimen datan rekisteröidyt ilmoitukset (7.11.2014 alkaen) ja yritysten perustiedot (CC BY 4.0), rajattuna osakeyhtiöihin. <strong>Konkurssipolku</strong> tunnistetaan KONALK-merkinnästä (konkurssin alkaminen); <strong>lakkaaminen</strong> END-tyypin ilmoituksesta. Koska ilmoitusdata alkaa marraskuusta 2014, tarkastelu kattaa vain sen jälkeen näkyvät tapahtumat — tämä rajaus sanotaan ääneen, koska populaation määrittely muokkaa jokaista lukua.</p>
</div>
</div>
</section>
<section id="kuolintavan-tunnistaminen" class="level2">
<h2 class="anchored" data-anchor-id="kuolintavan-tunnistaminen">Kuolintavan tunnistaminen</h2>
<p>Jokaiselle lakanneelle osakeyhtiölle määritetään polku: <strong>konkurssipolku</strong>, jos yrityksellä on KONALK-merkintä, muuten <strong>hiljainen lakkaaminen</strong>. Huomaa, että konkurssin alkaminen ei aina johda lakkaamiseen (esim. konkurssin raukeaminen varojen puutteeseen johtaa yleensä poistoon, mutta sovinto on mahdollinen) — siksi ehtona on molempien täyttyminen.</p>
<p>Lakanneita osakeyhtiöitä on aineistossa 128 578. Niistä konkurssipolun kulki 13.8% — eli valtaosa yrityskuolemista on hiljaisia. Jos luottotappioriskiä arvioidaan pelkällä kuolleisuudella, riski yliarvioidaan moninkertaisesti: vain konkurssipolku jättää tyypillisesti saatavia maksamatta.</p>
</section>
<section id="kaksi-kuolemaa-ajassa" class="level2">
<h2 class="anchored" data-anchor-id="kaksi-kuolemaa-ajassa">Kaksi kuolemaa ajassa</h2>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-05-kaksi-tapaa-kuolla_files/figure-html/aikasarja-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Käyrien muodot kertovat kahdesta eri ilmiöstä: hiljaiset lakkaamiset seuraavat hallinnollisia aaltoja (mm. rekisterin siivoukset), konkurssit suhdannetta. Kahden käyrän summana “yrityskuolleisuus” olisi sekasignaali, jonka tulkinta menisi väistämättä väärin.</p>
</section>
<section id="missä-konkurssipolku-painottuu" class="level2">
<h2 class="anchored" data-anchor-id="missä-konkurssipolku-painottuu">Missä konkurssipolku painottuu?</h2>
<p>Konkurssiosuus vaihtelee toimialoittain, mutta osa toimialoista on pieniä — juuri siellä pistearvo pettää. Siksi jokaiselle toimialalle lasketaan konkurssiosuuden <strong>Beta-Binomi-posteriori</strong>: isoilla toimialoilla väli on kapea, pienillä rehellisen leveä. Ryhmien eron kokonaisuutena testaa khiin neliö, ja efektikoko (Cramérin V) kertoo eron voimakkuuden — suurella aineistolla pelkkä p-arvo olisi tyhjä signaali.</p>
<div class="cell">
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/ytj-05-kaksi-tapaa-kuolla_files/figure-html/toimialat-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Kuvaajan opetus on kaksitasoinen. Ensinnäkin toimialojen välillä on todellisia eroja: työvoima- ja pääomavaltaisilla aloilla velkarahoitteinen loppu on yleisempi. Toiseksi — ja tämä on sloganini ydin — pienten toimialojen leveät välit näyttävät, missä emme oikeasti tiedä. Pistearvo väittäisi sielläkin tarkkaa lukua.</p>
</section>
<section id="näkyykö-polku-käytöksessä-ennen-loppua" class="level2">
<h2 class="anchored" data-anchor-id="näkyykö-polku-käytöksessä-ennen-loppua">Näkyykö polku käytöksessä ennen loppua?</h2>
<p>Lopuksi verrataan kahden kuolintavan <strong>jalanjälkeä ennen loppua</strong>: laskemme hallitusmuutokset (HAL) kolmelta vuodelta ennen kunkin yrityksen omaa lakkaamispäivää. Molemmat ryhmät ankkuroidaan omaan kuolinhetkeensä, joten vertailu on reilu — kumpikaan ei “näe” toista pidemmälle.</p>
<p>Ilmoitusmäärä on vino jakauma, joten oikea testi on Mann–Whitneyn U, ja raportoin efektikokona rank-biserial-korrelaation.</p>
<div class="cell">
<div class="cell-output-display">
<table class="caption-top table table-sm table-striped small">
<caption>Hallitusmuutokset 3 v ennen loppua. Mann–Whitney p = &lt;2e-16, rank-biserial = -0.254</caption>
<thead>
<tr class="header">
<th style="text-align: left;">polku</th>
<th style="text-align: right;">Mediaani</th>
<th style="text-align: left;">Osuus, jolla ≥ 1 muutos</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;">Hiljainen lakkaaminen</td>
<td style="text-align: right;">0</td>
<td style="text-align: left;">20%</td>
</tr>
<tr class="even">
<td style="text-align: left;">Konkurssipolku</td>
<td style="text-align: right;">0</td>
<td style="text-align: left;">44%</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle?</h2>
<p>Yrityskuolleisuus ei ole yksi luku vaan kaksi eri jakaumaa, joilla on eri syyt, eri ajoitus ja eri seuraukset velkojalle. Luottoriskin näkökulmasta olennainen ei ole “lakkaako yritys” vaan “lakkaako se velkojaa vahingoittavalla tavalla” — ja se osuus on murto-osa kokonaiskuolleisuudesta, vaihtelee toimialoittain ja näkyy käytöksessä jo ennen loppua.</p>
<p>Sama data, joka tuottaa uutisotsikon “konkurssit kasvussa”, tuottaa oikein jaoteltuna riskimittarin, jonka varaan voi rakentaa päätöksiä. Ero ei ole datassa vaan sen käsittelyssä.</p>
<hr>
<p><em>Tämä analyysi on osa avoimen datan sarjaani, jossa käsittelen suomalaista yritys- ja yhteisötietoa jakaumina, en pistelukuina. Vuokrattava Head of Data -palveluni ja yhteydenotto: <a href="https://www.kristianvepsalainen.com">kristianvepsalainen.com</a>.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>avoin data</category>
  <category>bayes</category>
  <category>konkurssi</category>
  <category>luottoriski</category>
  <category>YTJ</category>
  <guid>https://kristianvepsalainen.com/posts/ytj-05-kaksi-tapaa-kuolla.html</guid>
  <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Kuka eduskunnassa oikeasti puhuu?</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa3-kuka-puhuu.html</link>
  <description><![CDATA[ 





<blockquote class="blockquote">
<p><strong>Sarjan idea.</strong> Osissa 1–2 katsoimme, <em>keitä</em> kansanedustajat ovat. Nyt siirrymme siihen, mitä he <em>tekevät</em>. Aloitamme yksinkertaisimmasta havaittavasta teosta: puheenvuorosta täysistunnossa.</p>
</blockquote>
<section id="uutiskoukku-200-edustajaa-yksi-mikrofoni" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-200-edustajaa-yksi-mikrofoni">Uutiskoukku: 200 edustajaa, yksi mikrofoni</h2>
<p>Kansanedustajat valitaan tasavertaisiksi lainsäätäjiksi. Jokaisella on sama oikeus käyttää puheenvuoro. Mutta <em>oikeus</em> puhua ja <em>puheen määrä</em> ovat kaksi eri asiaa.</p>
<p>Jos lukisimme uutisesta, että “kansanedustaja pitää keskimäärin N puheenvuoroa vuodessa”, muodostaisimme mielikuvan tasaisesta salista. Tämä kirjoitus näyttää, miksi se mielikuva on väärä — ja mittaa, kuinka väärä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(ggdist); <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(patchwork)</span>
<span id="cb1-3">select <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>select; filter <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>filter</span>
<span id="cb1-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-5">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-6">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-7">theme_kv <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>() <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey30"</span>),</span>
<span id="cb1-9">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">legend.position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"top"</span>)</span>
<span id="cb1-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kv</span>())</span>
<span id="cb1-11"></span>
<span id="cb1-12">DATA <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span>)</span>
<span id="cb1-13">paneeli <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(DATA, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"paneeli.qs"</span>))</span>
<span id="cb1-14"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Aja ensin R/eduskunta-data-prep.R"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(paneeli) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span></code></pre></div></div>
</details>
</div>
</section>
<section id="jakauma-ensin" class="level2">
<h2 class="anchored" data-anchor-id="jakauma-ensin">Jakauma ensin</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Edustajakohtainen puheenvuorojen määrä per vuosi (nollat mukana!)</span></span>
<span id="cb2-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(paneeli, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> n_puheita)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_histogram</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">bins =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sininen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuorot: harva puhuu paljon, moni vähän"</span>,</span>
<span id="cb2-5">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Yksi havainto = yksi edustaja yhtenä vuonna"</span>,</span>
<span id="cb2-6">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Puheenvuoroja vuodessa"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Edustajavuosia"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa3-kuka-puhuu_files/figure-html/jakauma-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb3-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">keskiarvo =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n_puheita),</span>
<span id="cb3-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">mediaani  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">median</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n_puheita),</span>
<span id="cb3-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p90       =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quantile</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n_puheita, .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9</span>),</span>
<span id="cb3-5">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">maksimi   =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>n_puheita)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">everything</span>(), \(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(x, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
  keskiarvo mediaani   p90 maksimi
      &lt;dbl&gt;    &lt;dbl&gt; &lt;dbl&gt;   &lt;dbl&gt;
1      51.4       38   112     763</code></pre>
</div>
</div>
<p>Huomaa keskiarvon ja mediaanin ero. Kun ne eroavat näin paljon, keskiarvo ei kuvaa ketään todellista edustajaa — se on vino jakauma, jossa muutama huippupuhuja vetää keskiarvon ylös. Tämä on koko sloganini ydin yhdessä taulukossa.</p>
</section>
<section id="kuinka-epätasaista-lorenz-ja-gini" class="level2">
<h2 class="anchored" data-anchor-id="kuinka-epätasaista-lorenz-ja-gini">Kuinka epätasaista? Lorenz ja Gini</h2>
<p>Puheen keskittymistä voi mitata samalla työkalulla kuin tulonjakoa: <strong>Lorenz-käyrällä</strong> ja <strong>Gini-kertoimella</strong>. Gini 0 = kaikki puhuvat yhtä paljon, Gini 1 = yksi puhuu kaiken.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1">gini <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) {</span>
<span id="cb5-2">  x <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sort</span>(x[<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(x)]); n <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(x)</span>
<span id="cb5-3">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">return</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_real_</span>)</span>
<span id="cb5-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq_len</span>(n) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> x) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(x))</span>
<span id="cb5-5">}</span>
<span id="cb5-6"></span>
<span id="cb5-7">vuosittain <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">gini =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gini</span>(n_puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">n_edustajia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(n_edustajia <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>)</span>
<span id="cb5-10"></span>
<span id="cb5-11">lorenz <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(vuosi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(n_puheita) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb5-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus_edustajista =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">row_number</span>()<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>(),</span>
<span id="cb5-13">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus_puheista =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cumsum</span>(n_puheita)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita))</span>
<span id="cb5-14"></span>
<span id="cb5-15">p1 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(lorenz, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(osuus_edustajista, osuus_puheista)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_abline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey60"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_area</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_y_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lorenz-käyrä: puheajan keskittyminen"</span>,</span>
<span id="cb5-21">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Vuosi "</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">max</span>(paneeli<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>vuosi), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" · katkoviiva = täysin tasainen jako"</span>),</span>
<span id="cb5-22">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus edustajista (vähiten puhuvista alkaen)"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Osuus puheenvuoroista"</span>)</span>
<span id="cb5-23"></span>
<span id="cb5-24">p2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(vuosittain, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(vuosi, gini)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-25">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_line</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"punainen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linewidth =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_point</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ylim</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb5-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gini-kerroin vuosittain"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0 = tasainen, 1 = yksi puhuu kaiken"</span>,</span>
<span id="cb5-28">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Gini"</span>)</span>
<span id="cb5-29"></span>
<span id="cb5-30">p1 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> p2</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa3-kuka-puhuu_files/figure-html/gini-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kuinka suuren osan puheista pitää puheliain 10 % / 20 %?</span></span>
<span id="cb6-2">kesk <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paneeli <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(vuosi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(n_puheita), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.by_group =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-4">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">top10 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq_len</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ceiling</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>()<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita),</span>
<span id="cb6-5">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">top20 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">seq_len</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ceiling</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n</span>()<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>.<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>))]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n_puheita),</span>
<span id="cb6-6">            <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">hiljaiset =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(n_puheita <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span>
<span id="cb6-7">kesk <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>vuosi, \(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(x, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 12 × 4
   vuosi top10  top20  hiljaiset
   &lt;int&gt; &lt;chr&gt;  &lt;chr&gt;  &lt;chr&gt;    
 1  2014 100.0% 100.0% 96.1%    
 2  2015 34.5%  53.8%  1.4%     
 3  2016 29.6%  47.7%  1.0%     
 4  2017 28.8%  46.3%  3.9%     
 5  2018 30.0%  47.8%  3.3%     
 6  2019 35.3%  53.2%  5.2%     
 7  2020 29.8%  45.9%  2.9%     
 8  2021 27.1%  44.0%  2.0%     
 9  2022 28.5%  45.3%  3.9%     
10  2023 29.1%  46.9%  5.3%     
11  2024 28.9%  45.1%  1.4%     
12  2025 37.3%  52.8%  6.5%     </code></pre>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Puheaika on jakauma, ei tasajako.</strong> Gini-kerroin kertoo, kuinka paljon salin ääni keskittyy — ja luku on korkeampi kuin useimmat arvaavat.</li>
<li><strong>Keskiarvo johtaa harhaan.</strong> Kun mediaani ja keskiarvo eroavat näin paljon, “keskimääräinen edustaja” on tilastollinen haamu.</li>
<li><strong>Nollat ovat tietoa.</strong> Merkittävä osa edustajavuosista sisältää hyvin vähän tai ei lainkaan täysistuntopuheita. Palaamme näihin hiljaisiin osassa 5.</li>
</ul>
</section>
<section id="uutiskoukku-takaisin" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-takaisin">Uutiskoukku takaisin</h2>
<p>Sali näyttää tasavertaiselta: 200 edustajaa, sama oikeus puhua. Data kertoo toista. Ääni jakautuu kuin varallisuus — ja sitä kannattaa mitata samoilla työkaluilla.</p>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Keskittymisen mittaaminen — kuka tuottaa, kuka kuluttaa, kuka on hiljaa — on sama menetelmä riippumatta siitä, ovatko yksiköt puheenvuoroja, asiakkaita vai riskejä. <strong>kristianvepsalainen.com</strong></p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data (CC BY 4.0).</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>jakaumat</category>
  <category>eriarvoisuus</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa3-kuka-puhuu.html</guid>
  <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Kansanedustajan arkkityypit — ja miksi kukaan ei ole puhdas tyyppi</title>
  <dc:creator>Kristian Vepsäläinen</dc:creator>
  <link>https://kristianvepsalainen.com/posts/eduskunta-osa2-arkkityypit.html</link>
  <description><![CDATA[ 





<blockquote class="blockquote">
<p><strong>Sarjan idea.</strong> Osassa 1 katsoimme, keitä kansanedustajat ovat — ikä, sukupuoli, ammatti — kukin yhtenä jakaumana. Nyt yhdistämme piirteet ja kysymme: onko olemassa muutama toistuva <em>arkkityyppi</em>? Vastaus on kyllä — mutta tärkein tulos on, ettei kukaan ole puhdas tyyppi. Jokainen edustaja on jakauma arkkityyppien yli, ei laatikko. Se on “maailma on jakauma” tehtynä per ihminen.</p>
</blockquote>
<section id="uutiskoukku-tyypillinen-poliitikko" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-tyypillinen-poliitikko">Uutiskoukku: “tyypillinen poliitikko”</h2>
<p>“Tyypillinen poliitikko” on yleinen retorinen hahmo. Mutta onko sellaista? Sen sijaan että arvaisimme, annamme datan etsiä toistuvat hahmot itse — ja katsomme, kuinka moni edustaja oikeasti istuu siististi yhdessä hahmossa.</p>
</section>
<section id="menetelmä-lyhyesti-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="menetelmä-lyhyesti-päättäjälle">Menetelmä lyhyesti, päättäjälle</h2>
<p>Käytämme <strong>latenttia luokka-analyysiä</strong> (LCA): se on tilastollinen malli, joka olettaa, että havaittujen piirteiden (ammatti, ura, aikakausi jne.) takana on muutama piilossa oleva ryhmä — arkkityyppi — ja päättelee sekä arkkityypit että sen, <strong>kuinka todennäköisesti</strong> kukin edustaja kuuluu kuhunkin. Olennaista on tuo todennäköisyys: malli ei pakota ketään yhteen laatikkoon, vaan antaa jäsenyyden jakaumana. Arkkityyppien lukumäärän valitsemme <strong>BIC-kriteerillä</strong> (mallinvalinnan vakiomittari), emme silmämääräisesti.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(tidyverse)</span>
<span id="cb1-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(here)</span>
<span id="cb1-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(httr2)</span>
<span id="cb1-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(xml2)</span>
<span id="cb1-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(qs2)</span>
<span id="cb1-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(poLCA)     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># latentti luokka-analyysi (asenna: install.packages("poLCA"))</span></span>
<span id="cb1-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(patchwork)</span>
<span id="cb1-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(scales)</span>
<span id="cb1-9"></span>
<span id="cb1-10"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">set.seed</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20270418</span>)</span>
<span id="cb1-11"></span>
<span id="cb1-12">pal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">punainen =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#e63946"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">turkoosi =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2a9d8f"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">oranssi =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#f4a261"</span>,</span>
<span id="cb1-13">         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">laivasto =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#1d3557"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sininen =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#457b9d"</span>)</span>
<span id="cb1-14">theme_kv <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>() {</span>
<span id="cb1-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_minimal</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">base_size =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">13</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb1-16">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">face =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bold"</span>),</span>
<span id="cb1-17">          <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">plot.subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey30"</span>),</span>
<span id="cb1-18">          <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid.minor =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>(), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">legend.position =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"top"</span>)</span>
<span id="cb1-19">}</span>
<span id="cb1-20"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_set</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme_kv</span>())</span>
<span id="cb1-21"></span>
<span id="cb1-22">data_dir <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">here</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eduskunta"</span> )</span>
<span id="cb1-23"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dir.create</span>(data_dir, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">recursive =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">showWarnings =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb1-24">mp_raw_path    <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp_raw.qs"</span>)</span>
<span id="cb1-25">mp_parsed_path <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mp_parsed.qs"</span>)</span>
<span id="cb1-26">fits_path      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(data_dir, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lca_fits.qs"</span>)</span>
<span id="cb1-27"></span>
<span id="cb1-28">REF_VUOSI <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2025</span>L</span></code></pre></div></div>
</details>
</div>
</section>
<section id="data-kansanedustajat-kuten-osassa-1-lisäpiirtein" class="level2">
<h2 class="anchored" data-anchor-id="data-kansanedustajat-kuten-osassa-1-lisäpiirtein">Data: kansanedustajat (kuten osassa 1, lisäpiirtein)</h2>
<p>Haemme saman <code>MemberOfParliament</code>-aineiston, mutta jäsennämme nyt myös <strong>ministerikokemuksen</strong> ja <strong>toimielinjäsenyyksien määrän</strong> (jälkimmäistä emme käytä mallissa, vaan säästämme sen mallin ulkopuoliseen validointiin).</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1">hae_eduskunta_taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(taulu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">per_page =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_sivut =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">500</span>) {</span>
<span id="cb2-2">  base <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://avoindata.eduskunta.fi/api/v1/tables"</span></span>
<span id="cb2-3">  rivit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(); sarakkeet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>; sivu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb2-4">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">repeat</span> {</span>
<span id="cb2-5">    js <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">request</span>(base) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_url_path_append</span>(taulu, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rows"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-6">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_url_query</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">page =</span> sivu, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">perPage =</span> per_page) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-7">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_user_agent</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kristianvepsalainen.com"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_retry</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">max_tries =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-8">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">req_perform</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">resp_body_json</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">simplifyVector =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb2-9">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.null</span>(sarakkeet)) sarakkeet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unlist</span>(js<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>columnNames)</span>
<span id="cb2-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(js<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>rowData) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span></span>
<span id="cb2-11">    rivit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(rivit, js<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>rowData)</span>
<span id="cb2-12">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">isFALSE</span>(js<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>hasMore)) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span></span>
<span id="cb2-13">    sivu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> sivu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>; <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (sivu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> max_sivut) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">break</span></span>
<span id="cb2-14">  }</span>
<span id="cb2-15">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">do.call</span>(rbind, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lapply</span>(rivit, \(r) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unlist</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lapply</span>(r, \(x) x <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%||%</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA</span>))))</span>
<span id="cb2-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colnames</span>(m) <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> sarakkeet; <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>(m)</span>
<span id="cb2-17">}</span>
<span id="cb2-18"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(mp_raw_path)) qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_save</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">hae_eduskunta_taulu</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"MemberOfParliament"</span>), mp_raw_path)</span>
<span id="cb2-19">mp_raw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qs_read</span>(mp_raw_path)</span>
<span id="cb2-20">xml_col <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"XmlDataFi"</span>; <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(xml_col <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%in%</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">names</span>(mp_raw))</span>
<span id="cb2-21"></span>
<span id="cb2-22">vuosi <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">suppressWarnings</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_extract</span>(x, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">d{4}"</span>)))</span>
<span id="cb2-23">jasenna_henkilo <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(xml_str) {</span>
<span id="cb2-24">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(xml_str) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">||</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nzchar</span>(xml_str)) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">return</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span>
<span id="cb2-25">  doc <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">read_xml</span>(xml_str)</span>
<span id="cb2-26">  g <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(xp) { v <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_text</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_first</span>(doc, xp)); <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(v)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> v }</span>
<span id="cb2-27">  toimet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_all</span>(doc, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//Edustajatoimet/Edustajatoimi"</span>)</span>
<span id="cb2-28">  kaudet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(toimet)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alku=</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_integer_</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">loppu=</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_integer_</span>)</span>
<span id="cb2-29">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(toimet, \(t) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alku=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">vuosi</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_text</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_first</span>(t,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"./AlkuPvm"</span>))),</span>
<span id="cb2-30">                                     <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">loppu=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">vuosi</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_text</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_first</span>(t,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"./LoppuPvm"</span>)))))</span>
<span id="cb2-31">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb2-32">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">henkilo_nro =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">g</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//HenkiloNro"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">etunimi=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">g</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//EtunimetNimi"</span>),         <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukunimi=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">g</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//SukuNimi"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">synt_pvm=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">g</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//SyntymaPvm"</span>),</span>
<span id="cb2-33">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sp_koodi=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">g</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//SukuPuoliKoodi"</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ammatti=</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">g</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//Ammatti"</span>),</span>
<span id="cb2-34">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ministeri =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_all</span>(doc, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//ValtioneuvostonJasenyydet/Jasenyys"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>),</span>
<span id="cb2-35">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">toimielin_lkm =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_all</span>(doc, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//AiemmatToimielinjasenyydet/Toimielin"</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb2-36">                    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">xml_find_all</span>(doc, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".//NykyisetToimielinjasenyydet/Toimielin"</span>)),</span>
<span id="cb2-37">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kaudet =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(kaudet))</span>
<span id="cb2-38">}</span>
<span id="cb2-39"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(mp_parsed_path)) qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(mp_raw[[xml_col]], jasenna_henkilo), mp_parsed_path)</span>
<span id="cb2-40">mp_long <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(mp_parsed_path)</span>
<span id="cb2-41"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Liian vähän jäsennettyjä"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(mp_long) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2000</span>)</span>
<span id="cb2-42"></span>
<span id="cb2-43">mp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_long <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb2-44">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_squish</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(etunimi, sukunimi)),</span>
<span id="cb2-45">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sp_l =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_to_lower</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">replace_na</span>(sp_koodi, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>)),</span>
<span id="cb2-46">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_starts</span>(sp_l,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mie"</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span>sp_l<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1"</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Mies"</span>,</span>
<span id="cb2-47">                        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_starts</span>(sp_l,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"nai"</span>)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|</span>sp_l<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"2"</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nainen"</span>, <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NA_character_</span>))</span>
<span id="cb2-48"></span>
<span id="cb2-49"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Edustajavuodet uran pituutta ja aikakautta varten</span></span>
<span id="cb2-50">mp_years <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, kaudet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(kaudet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-51">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(alku)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">loppu =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">coalesce</span>(loppu, REF_VUOSI)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-52">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(loppu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> alku, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">between</span>(alku, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1907</span>, REF_VUOSI)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-53">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">v =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map2</span>(alku, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pmin</span>(loppu, REF_VUOSI), seq)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unnest</span>(v) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-54">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rename</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosi =</span> v) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro, vuosi)</span>
<span id="cb2-55">ura <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">group_by</span>(henkilo_nro) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb2-56">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">summarise</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">vuosia =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">n_distinct</span>(vuosi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alku =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">min</span>(vuosi), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.groups =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"drop"</span>)</span></code></pre></div></div>
</details>
</div>
</section>
<section id="piirteet-viisi-tulkittavaa-indikaattoria" class="level2">
<h2 class="anchored" data-anchor-id="piirteet-viisi-tulkittavaa-indikaattoria">Piirteet: viisi tulkittavaa indikaattoria</h2>
<p>Mallin indikaattorit ovat: <strong>sukupuoli</strong>, <strong>ammattiluokka</strong>, <strong>uran pituus</strong>, <strong>ministerikokemus</strong> ja <strong>aikakausi</strong>. Ammatti vaatii luokittelun harvoihin luokkiin — Osassa 1 kieltäydyin tekemästä tätä hiljaa, joten teen sen tässä <strong>avoimesti</strong> sääntöpohjaisella kartalla. Kullekin edustajalle otetaan <strong>ensimmäisenä mainittu</strong> ammatti (matrikkelin pääammatti).</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1">normalisoi_ammatti <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(x) x <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_to_lower</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-2">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_replace_all</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"[.,;:()]"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_replace_all</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">bevp</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_replace_all</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">bev</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">s*p</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">b"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_squish</span>()</span>
<span id="cb3-4"></span>
<span id="cb3-5">luokita_ammatti <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(n) dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">case_when</span>(</span>
<span id="cb3-6">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"pappi|kirkkoherra|rovasti|piispa|teolog|kappalainen|pastori"</span>)                 <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Papisto"</span>,</span>
<span id="cb3-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"everstil|eversti|majuri|kapteeni|kenraali|luutnantti|upseeri|komisario|poliisi|nimismies|sotilas"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sotilas/turvallisuus"</span>,</span>
<span id="cb3-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lakimies|varatuomari|oikeustiet|asianajaj|tuomari|notaari|oikeusneuvos|hovioikeus|kihlakunnantuomari"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Oikeus"</span>,</span>
<span id="cb3-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"lääkär|sairaanhoitaj|terveydenhoitaj|hoitaj|farmaseutti|psykolog|hammaslääk|kätilö|sosionomi"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Terveys/hoiva/sosiaaliala"</span>,</span>
<span id="cb3-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"opettaj|lehtori|rehtori|professori|dosentti|tutkij|kasvatus|kouluneuvos"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Opetus/tutkimus"</span>,</span>
<span id="cb3-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"toimittaj|päätoimittaj|tiedottaj|viestin|kirjailij|kustantaj|taiteilij"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Media/kulttuuri"</span>,</span>
<span id="cb3-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"insinöör|diplomi-ins|arkkitehti|teknikko|rakennusmestari"</span>)            <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Tekniikka"</span>,</span>
<span id="cb3-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maanvilj|agronomi|maatal|maamies|talollinen|torppari|agrolog|emänt|karjatal|metsänhoitaj|metsätal|viljelij"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Maatalous"</span>,</span>
<span id="cb3-14">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"kunnanjohtaj|kaupunginjohtaj|maaherra|hallitusneuvos|kansliapääl|osastopääl|virkamies|ylitarkastaj"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Hallinto/virkamies"</span>,</span>
<span id="cb3-15">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"toimitsija|järjestö|ammattiyhdisty|puoluesihteeri|pääsihteeri|pääluottamusmies|toiminnanjohtaj|kansanedustaj|poliitikko|ministeri|piirisihteeri"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Järjestö/politiikka"</span>,</span>
<span id="cb3-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"toimitusjohtaj|johtaj|yrittäj|kauppias|ekonomi|liikemies|konsultti|liikkeenharjoittaja|kauppaneuvos|pankinjohtaj|kauppatiet"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Liike-elämä"</span>,</span>
<span id="cb3-17">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vuorineuvos|kauppaneuvos|kaupunkineuvos|kunnallisneuvos|sosiaalineuvos|tilanomistaja|tilallinen|vapaaherra"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Arvonimi/tilanomistaja"</span>,</span>
<span id="cb3-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vahtimestari|kirjaltaja|kirjansitoja|suutari|viilaaja|mylläri|seppä|vaatturi|rakennusmies|kirvesmies"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Työntekijä"</span>,</span>
<span id="cb3-19">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"konttoristi|kirjanpitäjä|merkonomi|toimistosihteeri|asioitsija|asiamies|konttoripääl"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Toimisto/kaupan ala"</span>,</span>
<span id="cb3-20">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"työmies|työntekij|asentaj|kirvesmies|muurari|sorvaaj|autoilij|kuljettaj|räätäli|ompelij|puuseppä|maalari|levyseppä|maalarimestari"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Työntekijä"</span>,</span>
<span id="cb3-21">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">str_detect</span>(n,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"maisteri|tohtori|lisensiaatti|kandidaatti|ylioppilas"</span>)                <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Akateeminen (tutkinto)"</span>,</span>
<span id="cb3-22">  <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muu"</span>)</span>
<span id="cb3-23"></span>
<span id="cb3-24">feat <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(ammatti), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(sukupuoli)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-25">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ammattiluokka =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">luokita_ammatti</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">normalisoi_ammatti</span>(ammatti)))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">left_join</span>(ura, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-27">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(vuosia), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is.na</span>(alku)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-28">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(</span>
<span id="cb3-29">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">ura_luokka =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cut</span>(vuosia, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>,<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">Inf</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Lyhyt &lt;4v"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Keski 4–12v"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Pitkä &gt;12v"</span>)),</span>
<span id="cb3-30">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">aikakausi  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">cut</span>(alku, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">Inf</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1945</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1990</span>,<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">Inf</span>), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"–1944"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1945–1990"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1991–"</span>)),</span>
<span id="cb3-31">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">sukupuoli  =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(sukupuoli)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-32">  dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(henkilo_nro, nimi, toimielin_lkm,ammatti,</span>
<span id="cb3-33">                sukupuoli, ammattiluokka, ura_luokka, aikakausi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb3-34">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">drop_na</span>(sukupuoli, ammattiluokka, ura_luokka, aikakausi)</span>
<span id="cb3-35"></span>
<span id="cb3-36">muu_osuus <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(feat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>ammattiluokka <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muu"</span>)</span>
<span id="cb3-37"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Liikaa 'Muu' — laajenna luokitusta"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> muu_osuus <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>)</span>
<span id="cb3-38"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">message</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Muu-osuus: "</span>, scales<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(muu_osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>))</span>
<span id="cb3-39"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stopifnot</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Piirretaulu liian pieni"</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">=</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(feat) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1500</span>)</span>
<span id="cb3-40"></span>
<span id="cb3-41">ind  <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sukupuoli"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ammattiluokka"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ura_luokka"</span>,<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aikakausi"</span>)</span>
<span id="cb3-42">levs <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map</span>(feat[ind], levels)</span>
<span id="cb3-43">d_int <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> feat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> dplyr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">select</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">all_of</span>(ind)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">across</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">everything</span>(), <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(.)))</span></code></pre></div></div>
</details>
</div>
</section>
<section id="montako-arkkityyppiä-bic-ratkaisee" class="level2">
<h2 class="anchored" data-anchor-id="montako-arkkityyppiä-bic-ratkaisee">Montako arkkityyppiä? BIC ratkaisee</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1">f <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.formula</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"cbind("</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(ind, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">collapse =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">","</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">") ~ 1"</span>))</span>
<span id="cb4-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.exists</span>(fits_path)) {</span>
<span id="cb4-3">  fits <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, \(k) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">poLCA</span>(f, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> d_int, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nclass =</span> k, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nrep =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>,</span>
<span id="cb4-4">                              <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">maxiter =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3000</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">verbose =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>))</span>
<span id="cb4-5">  qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_save</span>(fits, fits_path)</span>
<span id="cb4-6">}</span>
<span id="cb4-7">fits <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> qs2<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qd_read</span>(fits_path)</span>
<span id="cb4-8"></span>
<span id="cb4-9">bic_taulu <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arkkityyppeja =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,</span>
<span id="cb4-10">                    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">BIC =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(fits, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bic"</span>),</span>
<span id="cb4-11">                    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">AIC =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dbl</span>(fits, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aic"</span>))</span>
<span id="cb4-12">paras_k <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> bic_taulu<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>arkkityyppeja[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.min</span>(bic_taulu<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>BIC)]</span>
<span id="cb4-13">fit <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> fits[[paras_k <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]]</span>
<span id="cb4-14">K <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> paras_k</span>
<span id="cb4-15">bic_taulu <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">valittu =</span> arkkityyppeja <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> paras_k)</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 5 × 4
  arkkityyppeja    BIC    AIC valittu
          &lt;int&gt;  &lt;dbl&gt;  &lt;dbl&gt; &lt;lgl&gt;  
1             2 27042. 26801. FALSE  
2             3 26966. 26600. TRUE   
3             4 26980. 26490. FALSE  
4             5 27058. 26445. FALSE  
5             6 27175. 26439. FALSE  </code></pre>
</div>
</div>
<p>BIC valitsee mallin, joka sopii dataan ilman ylisovittamista. Valittu arkkityyppien määrä on <strong>3</strong>. Katsotaan, miltä arkkityypit näyttävät.</p>
</section>
<section id="arkkityyppien-profiilit" class="level2">
<h2 class="anchored" data-anchor-id="arkkityyppien-profiilit">Arkkityyppien profiilit</h2>
<p>Kukin arkkityyppi määrittyy sillä, <strong>millä todennäköisyydellä</strong> siihen kuuluvalla edustajalla on kukin piirre. Lämpökartta näyttää nämä todennäköisyydet.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1">prof <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(ind, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(v) {</span>
<span id="cb6-2">  m <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>probs[[v]]; <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colnames</span>(m) <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> levs[[v]]</span>
<span id="cb6-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as_tibble</span>(m) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arkkityyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"A"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">row_number</span>())) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-4">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pivot_longer</span>(<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>arkkityyppi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">names_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"taso"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values_to =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"p"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb6-5">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">muuttuja =</span> v)</span>
<span id="cb6-6">})</span>
<span id="cb6-7"></span>
<span id="cb6-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(prof, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> arkkityyppi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> taso, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> p)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_tile</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"white"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_text</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">label =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(p, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">size =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">2.7</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"grey15"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">facet_grid</span>(muuttuja <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> ., <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">scales =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"free_y"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">space =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"free_y"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">switch =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"y"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-12">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_gradient</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">low =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"white"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">high =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"turkoosi"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-13">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eduskunnan "</span>, K, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" arkkityyppiä"</span>),</span>
<span id="cb6-14">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Piirteen todennäköisyys kussakin arkkityypissä"</span>,</span>
<span id="cb6-15">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb6-16">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">theme</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">strip.placement =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"outside"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">strip.text.y.left =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_text</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">angle =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>),</span>
<span id="cb6-17">        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">panel.grid =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">element_blank</span>())</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa2-arkkityypit_files/figure-html/profiilit-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Datasta johdetut nimet: kunkin arkkityypin todennäköisin ammatti + ura + aikakausi</span></span>
<span id="cb7-2">modal <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(v, k) levs[[v]][<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.max</span>(fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>probs[[v]][k, ])]</span>
<span id="cb7-3">arkkinimet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_chr</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>K, \(k) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">modal</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ammattiluokka"</span>,k), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" · "</span>,</span>
<span id="cb7-4">                                       <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">modal</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ura_luokka"</span>,k), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" · "</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">modal</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"aikakausi"</span>,k)))</span>
<span id="cb7-5">osuudet <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">colMeans</span>(fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>posterior), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb7-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arkkityyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"A"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>K), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kuvaus =</span> arkkinimet, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus_pros =</span> osuudet) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb7-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">arrange</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">desc</span>(osuus_pros))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 3 × 3
  arkkityyppi kuvaus                                osuus_pros
  &lt;chr&gt;       &lt;chr&gt;                                      &lt;dbl&gt;
1 A3          Maatalous · Lyhyt &lt;4v · –1944               45.8
2 A1          Maatalous · Pitkä &gt;12v · 1945–1990          29  
3 A2          Opetus/tutkimus · Keski 4–12v · 1991–       25.2</code></pre>
</div>
</div>
</section>
<section id="tärkein-tulos-kukaan-ei-ole-puhdas-tyyppi" class="level2">
<h2 class="anchored" data-anchor-id="tärkein-tulos-kukaan-ei-ole-puhdas-tyyppi">Tärkein tulos: kukaan ei ole puhdas tyyppi</h2>
<p>Tähän asti olemme puhuneet arkkityypeistä laatikkoina. Mallin koko pointti on, että ne <strong>eivät</strong> ole laatikoita: jokaisella edustajalla on <strong>jäsenyysjakauma</strong> — esim. 60 % arkkityyppiä A, 30 % B, 10 % C. Katsotaan, kuinka monella tämä jakauma on todella sekoittunut.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1">post <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>posterior</span>
<span id="cb9-2">maxp <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">apply</span>(post, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, max)</span>
<span id="cb9-3">H <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">rowSums</span>(post <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(post <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">1e-12</span>)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">log</span>(K)   <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># normalisoitu entropia 0–1</span></span>
<span id="cb9-4">osuus_sekoittunut <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mean</span>(maxp <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>)</span>
<span id="cb9-5"></span>
<span id="cb9-6">p1 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(maxp), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> maxp)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_histogram</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">bins =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sininen"</span>]], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">alpha =</span> .<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">85</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_vline</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">xintercept =</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.7</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">linetype =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dashed"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">color =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"punainen"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb9-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Kuinka 'puhtaasti' edustaja kuuluu yhteen arkkityyppiin?"</span>,</span>
<span id="cb9-11">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">percent</span>(osuus_sekoittunut, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">accuracy =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>),</span>
<span id="cb9-12">                        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" edustajista jää alle 70 % varmuuden — he ovat sekoituksia"</span>),</span>
<span id="cb9-13">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Suurin jäsenyystodennäköisyys"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span>
<span id="cb9-14">p1</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa2-arkkityypit_files/figure-html/jasenyysjakauma-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Kolme edustajaa: sekoittunein, keskivertо, puhtain</span></span>
<span id="cb10-2">idx <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.max</span>(H), <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">order</span>(H)[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ceiling</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">length</span>(H)<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)], <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">which.min</span>(H))</span>
<span id="cb10-3">ex <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">map_dfr</span>(idx, <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">function</span>(i) <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(</span>
<span id="cb10-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi =</span> feat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>nimi[i], <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arkkityyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"A"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>K), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> post[i, ]))</span>
<span id="cb10-5">ex <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> ex <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">nimi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(nimi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">levels =</span> feat<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>nimi[idx]))</span>
<span id="cb10-6"></span>
<span id="cb10-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(ex, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> p, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> nimi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> arkkityyppi)) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb10-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>() <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb10-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb10-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_fill_manual</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">values =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(pal)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span>K]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb10-11">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jäsenyys jakaumana: kolme esimerkkiä"</span>,</span>
<span id="cb10-12">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Ylin on sekoittunein, alin puhtain tapaus"</span>,</span>
<span id="cb10-13">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Jäsenyystodennäköisyys"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Arkkityyppi"</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa2-arkkityypit_files/figure-html/esimerkit-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Tämä on koko sarjan teema henkilötasolla: edustaja ei ole piste yhdessä laatikossa, vaan jakauma. “Tyypillinen poliitikko” on harvinaisempi kuin retoriikka antaa ymmärtää.</p>
</section>
<section id="ovatko-arkkityypit-todellisia-mallin-ulkopuolinen-testi" class="level2">
<h2 class="anchored" data-anchor-id="ovatko-arkkityypit-todellisia-mallin-ulkopuolinen-testi">Ovatko arkkityypit todellisia? Mallin ulkopuolinen testi</h2>
<p>Arkkityypit voivat olla pelkkää kohinaa, jos ne eivät ennusta mitään, mitä malli ei nähnyt. Testaamme: jätimme <strong>toimielinjäsenyyksien määrän</strong> mallin ulkopuolelle. Jos arkkityypit ovat aitoja, niiden pitäisi erota tässäkin. Käytämme <strong>Kruskal–Wallis-testiä</strong> (jakaumavapaa, sopii vinolle lukumäärädatalle) ja efektikokona epsilon-neliötä.</p>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1">val <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> feat <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">arkkityyppi =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">factor</span>(fit<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>predclass))</span>
<span id="cb11-2">kw <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kruskal.test</span>(toimielin_lkm <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span> arkkityyppi, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">data =</span> val)</span>
<span id="cb11-3">eps2 <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">nrow</span>(val) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb11-4"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tibble</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">khi2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>statistic), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">df =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">unname</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>parameter),</span>
<span id="cb11-5">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">p =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">signif</span>(kw<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>p.value, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>), <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">epsilon2 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">round</span>(eps2, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))</span></code></pre></div></div>
</details>
<div class="cell-output cell-output-stdout">
<pre><code># A tibble: 1 × 4
   khi2    df         p epsilon2
  &lt;dbl&gt; &lt;int&gt;     &lt;dbl&gt;    &lt;dbl&gt;
1  795.     2 2.01e-173    0.297</code></pre>
</div>
</div>
<div class="callout callout-style-default callout-note callout-titled" title="Miksi tämä testi on rehellinen">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Miksi tämä testi on rehellinen
</div>
</div>
<div class="callout-body-container callout-body">
<p>Toimielinjäsenyyksiä <strong>ei käytetty</strong> arkkityyppien muodostuksessa, joten ero niissä on aito ulkoinen validointi, ei kehäpäätelmä. Lukumäärädata on vinoa, joten keskiarvojen vertailun sijaan käytämme jakaumavapaata testiä, ja painotamme efektikokoa p-arvon ohi.</p>
</div>
</div>
</section>
<section id="arkkityypit-nykyeduskunnassa" class="level2">
<h2 class="anchored" data-anchor-id="arkkityypit-nykyeduskunnassa">Arkkityypit nykyeduskunnassa</h2>
<div class="cell">
<details class="code-fold">
<summary>Näytä koodi</summary>
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb13-1">nyt_ids <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> mp_years <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">filter</span>(vuosi <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> REF_VUOSI) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">distinct</span>(henkilo_nro)</span>
<span id="cb13-2">nyt_mix <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> val <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">semi_join</span>(nyt_ids, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">by =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"henkilo_nro"</span>) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb13-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">count</span>(arkkityyppi) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">mutate</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">osuus =</span> n <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sum</span>(n),</span>
<span id="cb13-4">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">kuvaus =</span> arkkinimet[<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.integer</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">as.character</span>(arkkityyppi))])</span>
<span id="cb13-5"></span>
<span id="cb13-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ggplot</span>(nyt_mix, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">aes</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> osuus, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fct_reorder</span>(kuvaus, osuus))) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb13-7">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">geom_col</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fill =</span> pal[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"laivasto"</span>]]) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb13-8">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">scale_x_continuous</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">labels =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">label_percent</span>()) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span></span>
<span id="cb13-9">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">labs</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Nykyeduskunnan arkkityyppijakauma"</span>,</span>
<span id="cb13-10">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">subtitle =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Istuvat edustajat ("</span>, REF_VUOSI, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">")"</span>),</span>
<span id="cb13-11">       <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">x =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">y =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
</details>
<div class="cell-output-display">
<div>
<figure class="figure">
<p><img src="https://kristianvepsalainen.com/posts/eduskunta-osa2-arkkityypit_files/figure-html/nyt-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="mitä-tämä-tarkoittaa-päättäjälle" class="level2">
<h2 class="anchored" data-anchor-id="mitä-tämä-tarkoittaa-päättäjälle">Mitä tämä tarkoittaa päättäjälle</h2>
<ul>
<li><strong>Arkkityyppejä on, mutta ne ovat sumeita.</strong> Suuri osa edustajista on sekoituksia, ei puhtaita tyyppejä — “tyypillinen poliitikko” on retorinen hahmo, ei tilastollinen.</li>
<li><strong>Typologia kestää testin.</strong> Arkkityypit eroavat myös piirteessä, jota malli ei nähnyt, joten ne tavoittavat todellista rakennetta.</li>
<li><strong>Tämä on muuttuja seuraaviin osiin.</strong> Arkkityyppi (ja sen jäsenyysjakauma) kulkee mukana, kun kysymme: ennustaako arkkityyppi sitä, kuka puhuu, kuka vaikenee ja kuka säilyttää paikkansa.</li>
</ul>
</section>
<section id="uutiskoukku-takaisin" class="level2">
<h2 class="anchored" data-anchor-id="uutiskoukku-takaisin">Uutiskoukku takaisin</h2>
<p>Kun seuraavan kerran kuulet “tyypillisestä poliitikosta”, sinulla on tilastollinen vastaus: tyyppejä on muutama, mutta useimmat edustajat ovat niiden sekoituksia. Ihminen on jakauma, ei laatikko.</p>
<hr>
<div class="callout callout-style-default callout-tip callout-titled" title="Tehdäänkö teidän datallenne sama?">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Tehdäänkö teidän datallenne sama?
</div>
</div>
<div class="callout-body-container callout-body">
<p>Segmentointi ilman keinotekoisia laatikoita — jäsenyys jakaumana, ulkoisesti validoituna — on sama menetelmä, jolla erottelen asiakas-, riski- tai toimittajaryhmiä siten, että epävarmuus pysyy näkyvissä. Otetaan yhteyttä: <strong>kristianvepsalainen.com</strong>.</p>
</div>
</div>
<p><em>Datalähde: Eduskunnan avoin data (CC BY 4.0). Analyysi ja mahdolliset virheet ovat omiani.</em></p>


<!-- -->

</section>

 ]]></description>
  <category>eduskunta</category>
  <category>avoin data</category>
  <category>sekoitemalli</category>
  <category>latentti luokka</category>
  <category>jakaumat</category>
  <guid>https://kristianvepsalainen.com/posts/eduskunta-osa2-arkkityypit.html</guid>
  <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
</item>
</channel>
</rss>
