From 4ad9c1ad2d06af38e594367d9b58f8e20fd4bf68 Mon Sep 17 00:00:00 2001
From: Riku-Laine <28960190+Riku-Laine@users.noreply.github.com>
Date: Sun, 6 Oct 2019 16:32:17 +0300
Subject: [PATCH] Mainly thesis related updates: writing, refs etc

---
 Kandi.tex                                     | 798 ++++++++++--------
 .../code_linear_dependency.stan               |  35 +-
 .../stan_modelling_empirical.py               | 133 +--
 .../stan_modelling_theoretic.py               | 604 ++++++++-----
 figures/sl_thesis_all.png                     | Bin 0 -> 40059 bytes
 figures/sl_thesis_all_err.png                 | Bin 0 -> 29568 bytes
 figures/sl_thesis_bZ3__all.png                | Bin 0 -> 44599 bytes
 figures/sl_thesis_bZ3__all_err.png            | Bin 0 -> 30993 bytes
 viitteet.bib                                  |  48 +-
 9 files changed, 959 insertions(+), 659 deletions(-)
 create mode 100644 figures/sl_thesis_all.png
 create mode 100644 figures/sl_thesis_all_err.png
 create mode 100644 figures/sl_thesis_bZ3__all.png
 create mode 100644 figures/sl_thesis_bZ3__all_err.png

diff --git a/Kandi.tex b/Kandi.tex
index 8f0b765..1407a87 100644
--- a/Kandi.tex
+++ b/Kandi.tex
@@ -24,6 +24,7 @@
 \usepackage{graphicx} % kuvat
 \graphicspath{ {./figures/} }
 \usepackage{subcaption} % alitekstit
+\usepackage[margin=1.5cm]{caption}
 
 \usepackage{mdframed} % määritelmien raamit
 
@@ -51,6 +52,9 @@
 \newcommand{\M}{\mathcal{M}} % "fancy M"
 \newcommand{\B}{\mathcal{B}} % "fancy B"
 \newcommand{\RR}{\mathcal{R}} % supistusalgon R
+\newcommand{\invlogit}{\text{logit}^{-1}}
+
+\usepackage{bbm} % Indikaattorifunktio
 
 \newcommand{\R}{\mathbb{R}}
 \newcommand{\C}{\mathbb{C}}
@@ -81,10 +85,11 @@
 \addtolength{\voffset}{0.45cm}
 \addtolength{\textheight}{-0.9cm}
 
-\title{Kandidaatintutkielma\\ {\Large Kausaalipäättely valikoitumisharhan korjaamisessa}} % Parempi otsikko
+\title{Kandidaatintutkielma\\ {\Large Kontrafaktuaalinen imputointi}} % Parempi otsikko
 \author{Riku Laine\\ Valtiotieteellinen tiedekunta \\ Helsingin yliopisto}
 \date{\today}
 
+
 %%%%%%%%%%%%%%
 %
 % Tärkeitä termejä
@@ -102,12 +107,14 @@
 
 %%%%%%%%%
 
-\chapter*{Kiitokset -- Acknowledgements}\label{epkiit}
+\chapter*{Esipuhe}\label{epkiit}
 
 %Tämän tutkielman aikana on tullut esiin takuujärjestelmään liittyvät ongelmat ja sovellusalueen yhteiskunnallinen merkitys. 
 %Tutkielman teko on ollut minulle erityisen mielekästä antoisan aiheen ja mieleisten yhteistyökumppanien vuoksi. Olen kirjoittanut tämän kandidaatintutkielman yhteistyössä Helsingin yliopiston tietojenkäsittelytieteen osaston apulaisprofessorin Michael Mathioudakiksen ja tohtoritutkijan Antti Hyttisen kanssa. He tarjosivat minulle aiheen ja merkittävää tukea sekä tärkeitä kommentteja tämän tutkielman kirjoittamisen aikana.
 
-Tämän tutkielman on tarkastanut XYZ. %Haluan kiittää kaikkia edellä mainittuja henkilöitä sekä ystäviäni ja perhettäni, jotka tukivat minua tämän tutkielman tekemisessä. 
+Tämän tutkielman on tarkastanut XYZ. 
+
+% Kenen rahoituksella jne
 
 \bigskip
 
@@ -120,12 +127,56 @@ Tämän tutkielman on tarkastanut XYZ. %Haluan kiittää kaikkia edellä mainitt
 
 \bigskip
 
-\noindent I would like to wholeheartedly thank assistant professor Michael Mathioudakis from University of Helsinki's Department of Computer Science for mentoring my thesis. He provided me this extremely interesting thesis topic and provided insightful and encouraging comments throughout the process.
-Antti Hyttinen from the same department also gave important insight in the causal modelling and commented on the content.
+%\noindent I would like to thank assistant professor Michael Mathioudakis from University of Helsinki's Department of Computer Science for mentoring my thesis. He provided me this topic and provided insightful and encouraging comments throughout the process.
+%Antti Hyttinen from the same department also gave important insight in causal modelling and commented on the content.
 
 \chapter{Johdanto}\label{johd}
 
-Tämän tutkielman tavoitteena on luoda kausaalipäättelyn avulla algoritmi, jolla voimme arvioida ennustavien mallien todellista ennustuskykyä, kun käytettävissä on ainoastaan valikoitumisharhasta kärsivää aineistoa. Samankaltaista asetelmaa ovat julkaisuissaan käsitelleet muun muassa Lakkaraju ja Madras \cite{lakkaraju17, madras18}. Pyrin tutkielmassani luomaan joustavamman ja tarkemman vaihtoehdon Lakkarajun luomalle supistusalgoritmille, mutta esitän ensin yleistä taustaa kausaalipäättelystä ja valikoitumisharhasta.
+Erilaisissa instituutioissa tehdään päivittäin lukemattomia ihmisten elämään suuresti vaikuttavia päätöksiä: tuomarit päättävät epäiltyjen syyllisyydestä ja lääkärit potilaiden hoidosta. Vaikka nämä päätöksentekijät ovat alansa ammattilaisia ja erikoisosaajia, ovat he kuitenkin ihmisiä, jotka voivat tehdä virheitä ja olla ennakkoluuloisia tiettyjen ihmisryhmien edustajia kohtaan. Oikeudessa annettujen päätöksien reiluutta on analysoitu paljon päätöksenteon jälkeen, on esimerkiksi tutkittu syrjitäänkö miehiä huoltajuuskiistoissa. 
+
+Viime aikoina päätöksiä on alettu tehdä myös erilaisten algoritmien tukemana ja määräämänä. Esimerkiksi Yhdysvalloissa on luotu COMPAS-algoritmi (Correctional Offender Management Profiling for Alternative Sanctions), jolta tuomarit saavat oikeuskäsittelyn eri vaiheissa arvion epäillyn taipumuksesta tehdä uusi rikos, jos hänet päästetään vapaaksi. \cite{compas} Myöhemmin on kuitenkin huomattu, että kyseisen algoritmin ennusteet ovat olleet syrjiviä ja niiden yksinomainen käyttö vangitsemispäätöksen perusteena on sittemmin kielletty Yhdysvaltain korkeimman oikeuden päätöksellä. 
+
+Yleisesti ottaen päätöksien automatisoinnin tavoitteena ei ole päätöksenteon nopeuttaminen tai tehostaminen vaan laadittujen päätöksien ja ennusteiden laadullinen parantaminen syrjinnän ja virheellisten päätösten poistamiseksi. Jotta syrjintä ja virheet voidaan poistaa, on ennustemallit ja algoritmit auditoitava.
+Tarkkuuden ja tasapuolisuuden arviointi on tavallisimmissa sovelluksissa jokseenkin triviaalia ja useita metriikoita, kuten residuaalien neliösumma tai muut vastaavat, on sovellettu, mutta esimerkiksi edellä mainituissa oikeusprosessia koskevissa tapauksia näitä ei voi soveltaa, koska tietyltä osalta havainnoista puuttuu vastemuuttujan arvo.
+
+Sivuutan tässä tutkielmassa mallien sekä algoritmien reiluuden tarkastelun ja keskityn niiden suorituskyvyn arviointiin. Algoritmien reiluutta (engl. \emph{algorithmic fairness}) on tutkittu paljon ja johdatuksia voi löytää esimerkiksi Xltä ja Yltä. Käsittelen ...
+
+\section{Puuttuvuus ja imputointi}\label{puuttuvuus}
+
+Havaintoja voi puuttua erilaisissa tutkimuksissa useista eri syistä. Kyselytutkimuksissa vastauskatoa voi syntyä esimerkiksi vastaajan haluttomuudesta vastata kysymykseen tai yksinkertaisesti siitä syystä, että vastaajaa ei tavoiteta. Jos aineiston puuttuneisuusmekanismi on luonteeltaan täysin satunnainen, eli vastauksen puuttuneisuus ei liity millään tavalla mitattuihin muuttujiin, voidaan sanoa aineistoa puuttuvan \emph{täysin satunnaisesti}. Käänteisessä tapauksessa voidaan puhua \emph{ei-satunnaisesta puuttuvuudesta}. \cite{laaksonen13}
+
+Tässä tutkielmassa tarkasteltavassa asetelmassa havaintojen puuttuminen liittyy sekä havaittuihin että havaitsemattomiin muuttujiin. Puuttuneisuuden voidaan sanoa olevan \emph{satunnaista ehdollisesti}, koska aineistoa puuttuu vain yksilöiltä, joilla on korkea todennäköisyys haitalliseen tulokseen. (Erilaisia aineiston puuttuneisuusmekanismeja esitellään laajemmin esimerkiksi Laaksosen kirjassa \emph{Surveymetodiikka}. \cite{laaksonen13}) Puuttuneisuutta voidaan korjata imputoinnilla, jolla yritetään tehdä mahdollisimman hyvä arvaus puuttuvasta arvosta. Imputoinnin filosofinen perusta nojaa ajatukseen, että havaintoyksikön vasteella on jokin arvo, mutta sitä ei ole vain havaittu. 
+
+Aineistoa voidaan imputoida erilaisilla menetelmillä ja malleilla. Jos aineistoa ei haluta imputoida, puuttuvaa tietoa sisältävät havainnot voidaan poistaa. Eräs yleisesti käytetty imputointimalli on lineaarinen regressiomalli. Kun lineaarista regressiota käytetään imputointiin, puuttuvan muuttujan arvoja pyritään selittämään havaittujen muuttujien avulla. Tällaista lähestymistapaa, jossa imputointi tehdään estimoidun mallin avulla, sanotaan \emph{malliluovuttajalähestymistavaksi}. Vaihtoehtoisesti puuttuva arvo voidaan imputoida toisen vastaajan arvolla, mitä kutsutaan \emph{vastaajaluovuttajalähestymistavaksi}. 
+
+% Jos MCAR, niin keskiarvoimputointi
+
+\section{Valikoiva luokittelu -- seulotun aineiston ongelma}\label{sl}
+
+Valikoiva luokittelu (engl. \emph{selective labels}) aineiston luovana mekanismina on esitetty kuvassa \ref{valikoitumisharha}. Valikoivasti luokitellussa aineistossa päätöksentekijä tekee päätöksen henkilön piirteisiin perustuen. Hänen tavoitteena on estää haitallisen tuloksen $Y=0$ havaitseminen. Jos päätös on kielteinen $T=0$, tulosta ei havaita.\footnotemark Päätöksentekijä tekee siis päättäessään ennusteen: Mikä on tämän henkilön kohdalla epäonnistumisen todennäköisyys? 
+
+\footnotetext{Ongelma voidaan esittää vaihtoehtoisesti myös muodossa, jossa kielteinen päätös $T=0$ määrää havainnon arvon positiiviseksi $Y=1$.}
+
+Havainnollistan aineiston generoivaa mekanismia tässä tutkielmassa usein lääketieteestä tai oikeuskäsittelyistä lainatuilla esimerkeillä. Henkilö on ensin mainitussa potilas ja jälkimmäisessä epäilty. Päätöksentekijä voi olla esimerkiksi lääkäri, joka päättää annetaanko potilaalle vahvempaa -- ja ehkä kalliimpaa -- lääkettä, jolloin tauti ei uusiudu. Oikeuskäsittelyissä päättäjällä voidaan tarkoittaa tuomaria, joka päättää epäillyn vapauttamisesta takuita vastaan ilman pelkoa rikoksen uusimisesta. Molemmilla päättäjillä on selkeä kannustin estää haitalliset tulokset pitäen samalla päätöksistä aiheutuvat rasitteet yhteiskunnalle ja yksilöiden elämille mahdollisimman pienenä.
+
+Valikoiva luokittelu luo siis aineistoon havaintoja, joilta puuttuu vasteen arvo, jolla ei ole realisaatiota tai jota ei ole olemassa. Tällöin tarvitaan siis \emph{kontrafaktuaaleja}, joiden avulla voidaan arvioida, miten olisi käynyt, jos päätös olisi ollut toinen.
+
+\begin{figure}%[H]
+\centering
+\includegraphics[scale = 0.4]{valikoitumis_iso}
+\caption{Valikoiva luokittelu aineiston generoivana mekanismina \cite{lakkaraju17}}
+\label{valikoitumisharha}
+\end{figure}
+
+\section{Kausaatio ja kontrafaktuaalit}
+
+Perinteisen tilastollisen tutkimuksen tavoitteena on havaita \emph{assosiaatioita} tapahtumien välillä ja tehdä niiden pohjalta päättelyä. \cite{kalisch13} Luonnossa havaitaan tapahtumia ja niiden yhteyksiä sovitetaan erilaisiin malleihin ja lopulta näiden yhteyksien avulla voidaan pyrkiä ennustamaan tapahtumia. Usein kuitenkin tutkijat haluavat vastauksia syy-seuraussuhteita eli \emph{kausaatiota} sisältäviin kysymyksiin, kuten "Paraniko henkilö, koska hän sai lääkettä?" tai "Maksetaanko naisille vähemmän palkkaa?".
+
+Kuten tavallisissa tilastollisissa ongelmissa, syy-seuraussuhteita sisältävien ongelmien käsittelyyn tarvitaan malli. Mallit ovat ilmiöiden yksinkertaistuksia, jotka perustuvat teorioihin ja tietoon havainnoitavista ilmiöistä (kimmo). Kahden muuttujan $x$ ja $y$ lineaarista yhteyttä voidaan havainnollistaa lineaarisella mallilla $y = \beta x + \epsilon$, missä $\epsilon$ ilmaisee malliin liittyvää epävarmuutta. Tällainen yksinkertainen assosiatiivinen yhteys voidaan kääntää muotoon $x = \frac{y}{\beta}$. Kausatiivissa kysymyksissä syytä ei voida kuitenkaan vaihtaa seuraukseksi, joten malli on luontevaa määrittää verkkona. Tällaisia verkkomalleja sanotaan rakenteellisiksi kausaalimalleiksi (\emph{structural causal model}) ja ne rakennetaan kuten mikä tahansa muu malli, parhaan mahdollisen nykytiedon pohjalle. 
+
+Kausaalimallin avulla voidaan määrittää myös vaihtoehtoisia totuuksia, eli kontrafaktuaaleja. Kontrafaktuaalien avulla jossittelu voidaan määrittää matemaattisena ilmiönä. Kontrafaktuaalit vastaavat kysymyksiin miten olisi käynyt jos asiat olisivat olleet toisin. Kausaatiota voidaan määrittää kolmella eri tavalla, Rubin vs Pearl vs Arjas + ? (eerola). Pearl on kuitenkin osoittanut, että Rubinin malli on yhtäpitävä hänen esittämänsä version kanssa.
+
+%Tämän tutkielman tavoitteena on luoda kausaalipäättelyn avulla algoritmi, jolla voimme arvioida ennustavien mallien todellista ennustuskykyä, kun käytettävissä on ainoastaan valikoitumisharhasta kärsivää aineistoa. Samankaltaista asetelmaa ovat julkaisuissaan käsitelleet muun muassa Lakkaraju ja Madras \cite{lakkaraju17, madras18}. Pyrin tutkielmassani luomaan joustavamman ja tarkemman vaihtoehdon Lakkarajun luomalle supistusalgoritmille, mutta esitän ensin yleistä taustaa kausaalipäättelystä ja valikoitumisharhasta.
 
 %Tässä kappaleessa esittelen tutkielman taustaa ja yhdysvaltalaisen oikeuslaitoksen takuukäsittelyprosessin yleisellä tasolla. Sen jälkeen paneudun hieman vangitsemispäätöksen yhteiskunnalliseen merkitykseen: minkä takia ihmisiä vangitaan ja mitä perusteita on vangitsemattajättämispäätökselle. Pyrin luvun aikana myös hieman selvittämään takuujärjestelmän käyttöä Suomessa ja kappaleen lopussa pohdin hieman kausaalipäättelyä paradigman muutoksena tilastotieteen kentällä. Jätän kuitenkin tarvittavien merkintöjen esittämisen kappaleeseen \emph{\nameref{kausaalimerk}} ja mallin esittelyn \emph{\nameref{kausaalimalli}}-lukuun. 
 
@@ -157,439 +208,411 @@ Tämän tutkielman tavoitteena on luoda kausaalipäättelyn avulla algoritmi, jo
 
 %Ongelmana tässä on se, millä perustein tuomarit tekevät päätöksen bailille pääsemisestä on käynyt ilmi (linkkaa propublica), että vaikka he käyttävät yhdysvaltalaisen yhtiön North
 
-%%%%%%%%%
-
-\section{''Kausaalipäättely uutena paradigmana''}\label{para}
 
 % miksi halutaan siirtyä (frekventistisen / bayes-päättelyn ongelmat), edut, esiintyminen, erot, käyttö
 
-Judea Pearl ja Mackenzie esittävät kirjassaan Miksi, että ihmisillä on luontainen kausaalisen päättelyn taito \cite{miksi}. Tavalliset tilastollisen päättelyn menetelmät eivät tarjoa tapaa määritellä kausaalista yhteyttä: aineistosta voidaan päätellä erilaisia \emph{korrelaatioita}, mutta kausaalista päättelyä \emph{A johtuu B:stä} ei voida tehdä perinteisen tilastotieteen keinoin. Käytännön tutkimuksessa kausaaliset yhteydet kiinnostavat erityisesti lääketieteen alalla \cite{pearl10}. Kuten Kalisch toteaa, aiemmin kausaalisuuden päättely on perustunut korrelaatioiden havaitsemiseen. On hypotetisoitu, että jonkinlaisen biomarkkerin ja taudin samanaikainen havaitseminen viittaisi siihen, että markkeri aiheuttaa taudin. Voimmeko siis markkeria käsittelemällä vaikuttaa tautiin tai jopa parantaa sen? \cite{kalisch14}
-
-Syy-seuraussuhteen matemaattinen määrittely vaatii uutta lähestymistä myös todennäköisyyslaskennan merkintöihin. Pearl käyttää alkuperäisessä, englanninkielisessä kirjallisuudessa merkintää 'do' ilmaisemaan interventiota. Merkinnällä halutaan erottaa tavanomainen ehdollinen todennäköisyys $\pr(Y|X=x)$ interventiosta, jossa asetamme muuttujan $X$ arvoon $x$: $\pr(Y|\text{do}(X=x))$. Kausaalipäättelyyn liittyvät myös oleellisesti kontrafaktuaalit, jotka kuvaavat muuttujien mahdollisia arvoja, jos jokin toinen muuttuja olisi ollut erilainen -- "sateen todennäköisyys, jos taivaalla olisi ollut pilviä". Esimerkiksi muuttujan $Y$ arvoa, jos $X$ olisi ollut $x$ asteikolla $u$ merkittäisiin $Y_x(u)$. Tässä tutkielmassa käsittelen kuitenkin vain Pearlin kausaalimallia. Esittelen käyttämäni merkinnät tarkemmin kappaleessa \ref{kausaalimerk_laus}.
-
-Kausaalipäättelyssä mallit voidaan esittää graafeina, eli verkkoina. Verkoista voidaan suoraan lukea eri muuttujien syy-seuraussuhteet ja riippuvuudet tai riippumattomuudet.
-%%%%%%%%%
-
-\section{Valikoitumisharha -- seulotun aineiston ongelma}\label{sl}
-
-Havaintoja voi puuttua erilaisissa tutkimuksissa useista eri syistä. Kyselytutkimuksissa vastauskatoa voi syntyä esimerkiksi vastaajan haluttomuudesta vastata kysymykseen tai yksinkertaisesti siitä syystä, että vastaajaa ei tavoiteta. Jos aineiston puuttuneisuusmekanismi on luonteeltaan täysin satunnainen, eli vastauksen puuttuneisuus ei liity millään tavalla mitattuihin muuttujiin, voidaan sanoa aineistoa puuttuvan \emph{täysin satunnaisesti}. Käänteisessä tapauksessa voidaan puhua \emph{ei-satunnaisesta puuttuvuudesta}. \cite{laaksonen13}
-
-Tässä tutkielmassa tarkasteltavassa asetelmassa havaintojen puuttuminen liittyy sekä havaittuihin että havaitsemattomiin muuttujiin. Puuttuneisuuden voidaan sanoa olevan \emph{satunnaista ehdollisesti}, koska aineistoa puuttuu vain yksilöiltä, joilla on korkea todennäköisyys haitalliseen tulokseen. (Erilaisia aineiston puuttuneisuusmekanismeja esitellään laajemmin esimerkiksi Laaksosen kirjassa \emph{Surveymetodiikka}.) Puuttuneisuutta voidaan korjata imputoinnilla, jolla yritetään tehdä mahdollisimman hyvä arvaus puuttuvasta arvosta. Todistan tutkielmassani myöhemmin, että kausaalipäättelyä hyödyntämällä voimme estimoida havaitusta, valikoitumisharhaisesta aineistosta haluttuja tunnuslukuja ilman imputointia harhattomasti. \cite{laaksonen13} Englanninkielisessä kirjallisuudessa seulotun aineiston ongelmasta on alettu käyttää Lakkarajun esittämää termiä \emph{selective labels} \cite{lakkaraju17}. % se lähde, missä näin väitettiin
-
-Aineiston luova mekanismi on esitetty kuvassa \ref{valikoitumisharha} ja toimii siten, että aluksi jokin henkilö tai muu entiteetti saapuu päätöksentekijän eteen seulottavaksi. Päätöksentekijän tavoitteena on estää haitallinen tulos ($y=0$) pitäen samalla myönteisten päätösten ($t=1$) määrä mahdollisimman pienenä. Seuloja pyrkii siis antamaan kielteisen päätöksen kaikille niille, joilla epäonnistuminen on todennäköisin. Päätöksen jälkeen Kohtalo määrittää havainnolle tuloksen $y\in\{0, 1\}$. Kielteisen päätöksen saaneille tulos voidaan merkitä puuttuvaksi tai onnistuneeksi, koska haitallista tapahtumaa ei havaita. 
-
-Aineiston generoivaa mekanismia voidaan havainnollistaa lääke- ja oikeustieteen alan esimerkeillä. Henkilö on ensin mainitussa potilas ja jälkimmäisessä epäilty. Seuloja voi olla esimerkiksi lääkäri, joka päättää annetaanko potilaalle vahvempaa ja samalla kalliimpaa lääkettä, jolloin relapsia ei havaita. Oikeudellisessa asetelmassa seulojalla voidaan tarkoittaa tuomaria, joka päättää epäillyn vapauttamisesta takuita vastaan ilman pelkoa rikoksen uusimisesta. Molemmilla päättäjillä on selkeä kannustin estää haitalliset tulokset -- sairauskohtaukset tai rikokset -- pitäen samalla päätöksistä aiheutuvat rasitteet yhteiskunnalle ja yksilöiden elämille mahdollisimman pienenä. Lisäksi erityisesti oikeudellisessa asetelmassa on selvää, kuinka takuukäsittelystä kielteisen tuloksen saaneet eivät voi syyllistyä uuteen rikokseen, joten heidän tulosmuuttujan arvo voidaan merkitä joko onnistumiseksi tai havaitsemattomaksi.
-
-\begin{figure}%[H]
-\centering
-\includegraphics[scale = 0.4]{valikoitumis_iso}
-\caption{Valikoitumisharha aineiston generoivana mekanismina \cite{lakkaraju17}}
-\label{valikoitumisharha}
-\end{figure}
-
-%%%%%%%%%
-%%%%%%%%%
-%%%%%%%%%
-
-\chapter{Aineiston generointi}\label{aineisto}
-
-
-%%%%%%%%%%
+%Judea Pearl ja Mackenzie esittävät kirjassaan Miksi, että ihmisillä on luontainen kausaalisen päättelyn taito \cite{miksi}. Tavalliset tilastollisen päättelyn menetelmät eivät tarjoa tapaa määritellä kausaalista yhteyttä: aineistosta voidaan päätellä erilaisia \emph{korrelaatioita}, mutta kausaalista päättelyä \emph{A johtuu B:stä} ei voida tehdä perinteisen tilastotieteen keinoin. Käytännön tutkimuksessa kausaaliset yhteydet kiinnostavat erityisesti lääketieteen alalla \cite{pearl10}. Kuten Kalisch toteaa, aiemmin kausaalisuuden päättely on perustunut korrelaatioiden havaitsemiseen. On hypotetisoitu, että jonkinlaisen biomarkkerin ja taudin samanaikainen havaitseminen viittaisi siihen, että markkeri aiheuttaa taudin. Voimmeko siis markkeria käsittelemällä vaikuttaa tautiin tai jopa parantaa sen? \cite{kalisch14}
 %
-%\section{COMPAS}\label{compas}
+%Syy-seuraussuhteen matemaattinen määrittely vaatii uutta lähestymistä myös todennäköisyyslaskentaan. Kausaalipäättelyyn liittyvät oleellisesti kontrafaktuaalit, jotka kuvaavat muuttujien mahdollisia arvoja, jos jokin toinen muuttuja olisi ollut erilainen -- "palkan määrä, jos olisi hankkinut korkeamman tutkinnon". Kontrafaktuaalien määrittämiseen rakenneyhtälömallit ja kausaaliset rakennemallit
 %
-%COMPAS-aineisto (Correctional Offender Management Profiling for Alternative Sanctions) on alun perin ProPublica-julkaisun koostama aineisto yhteensä 18 610 amerikkalaisesta. Aineistossa on muun muassa heidän demografiset tiedot, kuten ikä, sukupuoli ja rotu, ja rikoshistoriaan liittyvät tiedot. Oikeammin COMPAS viittaa Northpointe-yhtiön työkaluun, joka antaa arvion epäillyn rikoksenuusintariskistä. Arvio perustuu epäillyn vastauksiin kyselyyn, jossa tiedustellaan hänen taustoistaan, kuten lähipiirin huumeidenkäytöstä ja epäillyn taipumuksesta väkivaltaisuuteen. ProPublica kokosi aineiston alun perin paljastaakseen arvion tuottavan algoritmin mustia syrjivän luonteen. ProPublican analyysi osoitti, että mustat saivat järjestelmällisesti korkeamman riskiarvion kuin valkoihoiset. \cite{propublica16}
-%
-%ProPublica esittää artikkelinsa metodologiaosiossa, kuinka he ovat päätyneet lopulliseen aineistoon, joka käsittää tiedot 6172 henkilöstä.  Pääpiirteissään he ovat siistineet aineistoa siten, että se yhdistää oikeat henkilöt oikeisiin pisteytyksiin ja oikeisiin uusintatuomioihin. Joitakin johdettuja mutujia luotiin, kuten tekstuaalinen kuvaus desiilipisteytyksestä scoretext joka ryhmittää etc etc.
-%
-%\begin{table}[H]
-%\centering
-%\begin{tabular}{lrrrrrrrrrr}
-%\hline \hline 
-% Muuttujan nimi    & $\bar{x}$ &  Keskihajonta &   Min &   25\% &   50\% &   75\% &   Max \\
-%\hline \hline
-% age                  		&  34,5   	&  11,7   &  18 &  25 &  31 &  42 &  96 \\
-% priors\_count            	&    3,25  	&   4,74  &   0 &   0 &   1 &   4 &  38 \\ \hline
-% days\_b\_screening\_arrest &   -1,74  &   5,08  & -30 &  -1 &  -1 &  -1 &  30 \\
-% decile\_score            	&    4,42   	&   2,84  &   1 &   2 &   4 &   7 &  10 \\
-% is\_recid                		&   0,484 	&   0,500 &   0 &   0 &   0 &   1 &   1 \\ \hline
-% two\_year\_recid      		&    0,455  &   0,498 &   0 &   0 &   0 &   1 &   1 \\
-% length\_of\_stay        	&  14,6   	&  46,7   &  -1 &   0 &   1 &   5 & 799 \\
-%\hline \hline
-%\end{tabular}
-%\caption{COMPAS-aineiston numeeristen muuttujien hajontalukuja}
-%\label{table:1}
-%\end{table}
+%Esimerkiksi muuttujan $Y$ arvoa, jos $X$ olisi ollut $x$ asteikolla $u$ merkittäisiin $Y_x(u)$. Tässä tutkielmassa käsittelen kuitenkin vain Pearlin kausaalimallia. 
 
 %%%%%%%%%
 
-%\section{Synteettinen}\label{synteettinen}
-
-Synteettinen aineisto luotiin Lakkarajun selostamalla tavalla. Aineistoon simuloitiin kolme muuttujaa $X$, $Z$, ja $W$. Näistä muuttujista $X$ vastaa informaatiota, joka on sekä mallin että päätöksentekijän havaittavissa. Käytännössä muuttuja $X$ vastaa kirjallista informaatiota, joka on kirjattu erilaisiin pöytäkirjoihin tai rekistereihin. Muuttujalla $Z$ kuvataan tietoa, jonka vain päätöksentekijä voi havaita: kuten Lakkaraju havainnollistaa, tällaista voi olla oikeudessa esimerkiksi tieto siitä, onko vastaajalla perhettä mukana oikeussalissa. $W$ tuo malliin kohinaa. Muuttujalla esitämme aineistossa informaatiota, joka ei ole saatavilla päätöksentekijöille eikä mallille, mutta vaikuttaa silti epätoivottavan tuloksen riskiin. Aineistossa nämä ovat kaikki riippumattomia standardinormaalijakautuneita satunnaismuuttujia, eli $X, W, Z \sim N(0, 1) \independent$. \cite{lakkaraju17}
-
-Aineistossa jyvitämme jokaiselle $M=100$ päätöksentekijälle 500 arvioitavaa. Kaikille päättäjille arvotaan hyväksymisprosentti ottamalla arvoja tasajakaumasta suljetulta väliltä [0,1; 0,9] ja sitten pyöristämällä saadut arvot 10 desimaalin tarkkuuteen. Tulosmuuttuja Y määritetään ehdollisen todennäköisyyden 
-\begin{equation} \label{y_ehd}
-\pr(Y=0|X, Z, W)=\dfrac{1}{1+\text{exp}\{-(\beta_XX+\beta_ZZ+\beta_WW)\}}
-\end{equation}
-mukaisesti. Jos $\pr(Y=0|X, Z, W) \geq 0,5$, tulosmuuttujan arvoksi asetetaan 0 ja vastaavasti jos $\pr(Y=0|X, Z, W) < 0,5$ muuttujan arvoksi asetetaan 1. Lausekkeissa \ref{y_ehd} ja \ref{t_ehd} olevat kertoimet $\beta_X$, $\beta_Z$ ja $\beta_W$ ovat 1, 1 ja 0,2 vastaavassa järjestyksessä. \cite{lakkaraju17}
-
-Päätösmuuttuja $T$ määritetään kaksivaiheisesti: ensin määritetään todennäköisyys kielteiselle päätökselle ja sitten muuttujan arvo asetetaan näiden todennäköisyyksien keskinäisen suuruuden ja hyväksymisasteen $r$ mukaisesti. Muuttujan $T$ ehdollinen todennäköisyys 
-\begin{equation} \label{t_ehd}
-\pr(T=0|X, Z)=\frac{1}{1+\text{exp}\{-(\beta_XX+\beta_ZZ)\}} + \epsilon,
-\end{equation}
-missä $\epsilon \sim N(0, 0,1)$ vastaa pientä määrää kohinaa. Henkilölle $i$ annetaan kielteinen päätös, eli $T_i=0$, jos ehdollinen todennäköisyys $\pr(T=0)$ on seulojan $j$ suurimman $(1-r)\cdot 100\%$ joukossa. Toisin sanoen seuloja $j$ antaa myönteisen päätöksen $r$ prosentille hänen arvioitavakseen annetuista henkilöistä, joilla on alin todennäköisyys kielteiseen päätökseen, oli se sitten rikoksen uusinta tai relapsi. \cite{lakkaraju17}
-
-Kun aineisto oli simuloitu, se jaettiin niin sanottuihin koulutus- ja testiaineistoihin. Lopuksi molempia aineistoja muokattiin siten, että tulosmuuttujan arvo oli saatavissa vain yksilöille, joille oli annettu positiivinen päätös $(T=1)$. Kielteisen päätöksen saaneille tulosmuuttujan arvo asetettiin arvoon NA, kuten kuvassa \ref{valikoitumisharha}. Syntetisoidun aineiston keskeisimmät hajontaluvut on esitetty taulukossa \ref{synt_hl}. \cite{lakkaraju17}
-
-\begin{table}[H]
-\centering
-\begin{tabular}{lrrrrrrrrrr}
-\hline \hline 
-Muuttuja           &  Keskiarvo &   Keskihajonta &   Minimi &   25\% &   50\% &   75\% &   Maksimi \\
-\hline
- acceptanceRate\_R &         0.48 &           0.23 &     0.10 &  0.26 &  0.47 &  0.65 &      0.89 \\
- X                	&         0.00 &           1.00 &    -4.66 & -0.67 &  0.00 &  0.67 &      3.83 \\
- Z                	&         0.01 &           1.00 &    -4.85 & -0.67 &  0.00 &  0.68 &      4.24 \\
- W                	&         0.01 &           1.00 &    -4.03 & -0.67 &  0.01 &  0.68 &      4.29 \\
- result\_Y         	&         0.50 &           0.50 &     0.00 &  0.00 &  0.00 &  1.00 &      1.00 \\
-% probabilities\_T &         0.50 &           0.28 &    -0.34 &  0.28 &  0.50 &  0.72 &      1.30 \\
- decision\_T      	&         0.48 &           0.50 &     0.00 &  0.00 &  0.00 &  1.00 &      1.00 \\
-\hline
-\end{tabular}
-\caption{Synteettisen aineiston muuttujien hajontalukuja}
-\label{synt_hl}
-\end{table}
-
 %%%%%%%%%
 %%%%%%%%%
 %%%%%%%%%
 
-\chapter{Menetelmät}\label{metodit}
-
-Tässä kappaleessa esitän tutkielmassani käyttämät metodit. Selostan supistusalgoritmin toiminnan kappaleessa \ref{contraction} sekä kausaalisen mallin laatimisessa ja arvioinnissa käyttämäni teoreettisen taustan kappaleissa \ref{verkot}. Koska kausaalinen malli esitetään verkkona, käyn aluksi läpi vaadittavat verkkoteoreettiset määritelmät. Esitän sen jälkeen mallini graafina ja osoitan kausaalisen vaikutuksen olevan identifioituva.
+\chapter{Määritelmät ja teoria}
 
-\section{Metriikat}
+Erilaisten algoritmien ja mallien suorituskyvyn arviointiin on kehitetty useita tapoja. Tavan valinta liittyy usein läheisesti vastemuuttujan arvojoukkoon: binäärisiä muuttujia on luontevaa arvioida eri tavoin kuin jatkuvia. Koska tuloksen $Y$ havaitseminen riippuu päätöksestä $T$, määritetään kaksi metriikkaa -- hyväksymisprosentti (engl. \emph{acceptance rate}, (AR)) ja virheprosentti (\emph{failure rate} (FR)), joilla on hyvin intuitiiviset vastaavuudet reaalimaailmassa.
 
-Algoritmien suorituskyvyn arviointiin liittyy kolme keskeistä metriikkaa: hyväksymisaste (engl. \emph{acceptance rate}, (AR)), epäonnistumisprosentti (\emph{failure rate} (FR)) ja keskimääräinen virhe(\emph{mean absolute error} (MAE)).
+\begin{maar}[Hyväksymisprosentti (AR)] \label{AR}
 
-\begin{maar}[Hyväksymisaste (AR)] \label{acc_rate}
+Päättäjän hyväksymisprosentti määritetään myönteisten päätösten määrän suhteena annettujen päätösten kokonaismäärään. Jos päätöksentekijä antaa 100 päätöstä, joista 40 on myönteisiä, niin hänen hyväksymisprosenttinsa on $0,4$.
 
-Päättäjän hyväksymisaste määritetään myönteisten päätösten määrän suhteena annettujen päätösten kokonaismäärään. Eli jos päätöksentekijä antaa 100 päätöstä, joista 40 on myönteisiä, niin hänen hyväksymisasteensa on $0,4$.
-
-\end{maar} 
+\end{maar}
 
-\begin{maar}[Epäonnistumisprosentti (FR)] \label{fail_rate}
+\begin{maar}[Virheprosentti (FR)] \label{FR}
 
-Päätöksentekijän epäonnistumisprosentti määritetään epäonnistuneiden tulosten määrän suhteena annettujen päätösten kokonaismäärään. Eli jos päätöksentekijä antaa 100 päätöstä, joista 60 on myönteistä ja näistä 60 päätöksestä 30 johtaa epäonnistumiseen (esimerkiksi rikoksen uusintaan), niin tuomarin epäonnistumisprosentti on $0,3$.
+Päätöksentekijän virheprosentti määritetään epäonnistuneiden tulosten määrän suhteena annettujen päätösten kokonaismäärään. Jos päätöksentekijä antaa 100 päätöstä, joista 60 on myönteistä ja näistä 60 päätöksestä 30 johtaa epäonnistumiseen (esimerkiksi rikoksen uusintaan), niin tuomarin virheprosentti on $0,3$.
 
 \end{maar} 
 
-\begin{maar}[Keskimääräinen virhe (MAE)] \label{mae}
+\noindent Vertaillaksemme eri algoritmien ennusteiden tarkkuutta laskemme keskimääräisen virheen (\emph{mean absolute error} (MAE)) suhteutettuna johonkin referenssipisteeseen. Referenssipisteenä voidaan esimerkiksi käyttää epäonnistumisprosentin todellisia arvoja ja verrata eri algoritmien ennusteita käyttäen keskimääräistä virhettä.
 
+\begin{maar}[Keskimääräinen virhe (MAE) \cite{willmott05}] \label{MAE}
 
+Olkoot $y_i$, missä $i = 1, \ldots, n$, havaintojen todelliset arvot ja $\hat{y_i}$ ennusteet. Tällöin jatkuville muuttujille keskimääräinen virhe
+$$\text{MAE} = \dfrac{\sum_{i=1}^{n}|\hat{y_i}-y_i|}{n} = \dfrac{\sum_{i=1}^{n}|e_i|}{n}$$
+ja edelleen binäärisille muuttujille
+$$\text{MAE} = \dfrac{\sum_{i=1}^{n}\mathbbm{1}\{\hat{y}_i\neq y_i\}}{n}.$$
 
 \end{maar} 
 
-\section{Supistusalgoritmi}\label{contraction}
+\section{Bayes-päättely}
 
-Supistusalgoritmi on 2017 esitetty algoritmi \cite{lakkaraju17}, jonka avulla voidaan arvioida ennustavien mallien todellista suorituskykyä, kun vain tietylle osalle aineistosta on luokka (label) saatavissa. Algoritmin toimintaperiaatteena on arvioida mallin $\B$ ennusteita löyhimmän päätöksentekijän tekemien päätösten joukossa. Algoritmin pseudokoodi on esitetty Algoritmissa \ref{contraction_alg}. 
+% TN -avaruus? > Todennäköisyys > jakauma/tiheysfunktio > ehdollinen tn > bayesin kaava
+% https://fi.wikipedia.org/wiki/Todenn%C3%A4k%C3%B6isyysteoria
 
-\begin{algorithm}[H] 			% enter the algorithm environment
-\caption{Supistusalgoritmi} 		% give the algorithm a caption
-\label{contraction_alg} 			% and a label for \ref{} commands later in the document
-\begin{algorithmic}[1] 		% enter the algorithmic environment
-\REQUIRE Aineisto $\D$, todennäköisyydet $\s$ ja hyväksymisaste $r$
-\ENSURE Epäonnistumisprosentti (FR) hyväksymisasteella $r$
+Bayes-päättely perustuu rakennuspalikat perustuvat pikälti Bayesin kaavaan, joka on johdettavissa ehdollisen todennäöisyyden määritelmästä. Johtaaksemme Bayesin kaavan määritetään ensin todennäköisyysavaruus ja sen tapahtumat
 
-\STATE Olkoon $q$ päättäjä, jolla on korkein hyväksymisaste $r$.
-\STATE $\D_q = \{(x, j, t, y) \in \D | j = q \}$
-\STATE \hskip3.0em $\rhd$ Nyt $\D_q$ on havaintojoukko, jolle $q$ on antanut päätökset.
-\STATE
-\STATE $\RR_q = \{(x, j, t, y) \in \D_q | t=1 \}$
-\STATE \hskip3.0em $\rhd$ $\RR_q$ on on joukon $\D_q$ osa, jolle tulosmuuttujan arvot on havaittu.
-\STATE
-\STATE Järjestä taulukoon $\RR_q$ havainnot laskevaan järjestykseen todennäköisyyksien $\s$ mukaan ja talleta ne taulukkoon $\RR_q^{sort}$
-\STATE \hskip3.0em $\rhd$ Mallin korkeariskisimmät ovat nyt listan kärjessä
-\STATE
-\STATE Ota taulukosta $\RR_q^{sort}$ sen $[(1.0-r)|\D_q|]-[|\D_q|-|\RR_q|]$ ensimmäistä/ylintä havaintoa ja talleta ne taulukkoon $\RR_\B$.
-\STATE \hskip3.0em $\rhd$ $\RR_\B$ on lista henkilöistä, joille malli $\B$ on antanut positiivisen päätöksen
-\STATE 
-\STATE Laske $\mathbf{u} = \sum_{i=1}^{|\RR_\B|} \dfrac{\delta\{y_i=0\}}{|\D_q|}$.
+\begin{maar}[Todennäköisyysavaruus]
 
-\RETURN $\mathbf{u}$
-\end{algorithmic}
-\end{algorithm}
+Kolmikko $(\Omega, \mathcal{F}, \pr)$ on \emph{todennäköisyysavaruus}, jos 
 
-%%%%%%%%%%
-%
-%\section{Aiemmat tutkimukset?}\label{aiemmat}
-%
-%Aiemmat tutkimukset ovat lähestyneet monesta näkökulmasta, mutta ilman kausaatiota. 
-%
-%%%%%%%%%%
-%
-%\section{Validointimetodit}\label{validointi}
-%
-%Tulosten arvioinnissa käytetään 
-%
-%Tulosten arvioinnissa käytetään visuaalista tarkastelua ja XZY. Laskemme arvioista vapaaksi päässeiden uusijoiden suhteen kaikkiin tuomittuihin, eli niin sanotun virhesuhteen (failure rate).
-%
-%%%%%%%%%%
-
-\section{Verkkoteoria}\label{verkot}
-
-Verkot koostuvat \emph{solmuista} ja \emph{kaarista}, joita voidaan havainnollistaa pisteinä ja viivoina tai nuolina näiden pisteiden väliilä. Kaaret ovat järjestettyjä pareja, kuten verkot itsekin, mutta oletan tavallisimmat joukko-opin merkinnät ja käsitteet tunnetuiksi. Noudatan määritelmissä Oinosta \cite{oinonen16} ja erikseen merkityissä kohdissa Kivistä \cite{tira}. 
-% TiRan materiaalit??
+\begin{itemize}
+\item Perusjoukko $\Omega$ on epätyhjä
+\item $\mathcal{F}$ on $\sigma$-algebra
+\item $\pr$ on mitta
+\end{itemize}
 
-% Ota esimerkki verkko ja kirjoita siitä lyhyet havainnollistavat kommentit
-
-\begin{figure} [h]
-\centering
-\begin{tikzpicture}[->,>=stealth',node distance=2.0cm, semithick]
-
-  \tikzstyle{every state}=[fill=none,draw=black,text=black]
-
-  \node[state] (R)                    {$R$};
-  \node[state] (X) [right of=R] {$X$};
-  \node[state] (T) [below of=X] {$T$};
-  \node[state] (Z) [right of=X] {$Z$};
-  \node[state] (Y) [below of=Z] {$Y$};
-
-  \path (R) edge (T)
-        (X) edge (R)
-        	     edge (T)
-	     edge (Y)
-        (Z) edge (X)
-        	     edge (T)
-	     edge (Y)
-	     edge [bend right] (R)
-        (T) edge (Y);
-\end{tikzpicture}
-\caption{Eräs verkko $H = (V, E)$, missä $V =  \{R, X, Z, T, Y\}$.}
-\label{esverkko}
-\end{figure}
-
-
-\begin{maar}[Suunnattu verkko] \label{suun_verkko}
-
-\emph{Suunnattu verkko G} on pari $(V, E)$, missä $V \neq \emptyset$ on \emph{solmujen} joukko ja $$E = \{(a, b) \in V \times V | \text{ solmusta } a \text{ on nuoli solmuun } b \} $$ on \emph{kaarien} joukko.
-
-\end{maar} 
+\end{maar}
 
-\smallskip
 
-\noindent Kuvassa \ref{esverkko} näkyvässä verkossa esimerkiksi $(X, R) \in E$, mutta $(T, Z) \notin E$, koska solmusta $T$ ei ole nuolta solmuun $Z$. Lisäksi voidaan todeta, että kaarien joukkoon kuuluu yhdeksän järjestettyä paria ja solmujen joukko $V$ käsittää viisi alkiota.
 
-\smallskip
+Frekventistisessä tilastollisessa päättelyssä tuntemattoman parametrin $\theta$ arvo on kiinnitetty vakio, kun bayesiläisessä päättelyssä parametrin arvo voidaan käsittää satunnaismuuttujana. Bayes-päättelyn tavoitteena laskea parametrille \emph{posteriorijakauma} eli posteriori $f_{\Theta|\mathbf{Y}}(\theta|\mathbf{y})$, joka kertoo parametrin jakauman, kun huomioidaan kerätty aineisto $\mathbf{y}$ ja aiempi tieto parametrin jakaumasta. Tämä aiempi tieto ilmaistaan priorijakaumana eli priorina $f_\Theta(\theta)$. Posteriori määritellään Bayesin kaavan avulla:
+\begin{equation}
+f_{\Theta|\mathbf{Y}}(\theta|\mathbf{y}) = \dfrac{f_{\mathbf{Y}|\Theta}(\mathbf{y}|\theta)f_\Theta(\theta)}{f_\mathbf{Y}(\mathbf{y})},
+\end{equation}
+missä marginaaliuskottavuus $f_\mathbf{Y}(\mathbf{y})=\int_\Omega f_{\mathbf{Y}|\Theta}(\mathbf{y}|\theta')f_\Theta(\theta')~d\theta'$ jatkuville muuttujille (tietyin edellytyksin). On kuitenkin huomattava, että marginaaliuskottavuus $f_\mathbf{Y}(\mathbf{y})$ ei riipu parametrista $\theta$, joten posteriorin lauseketta voidaan edelleen yksinkertaistaa verrannolla
 
-\begin{maar} % Lähtösolmu, maalisolmu, vierussolmu
+\begin{equation}
+f_{\Theta|\mathbf{Y}}(\theta|\mathbf{y}) \propto f_{\mathbf{Y}|\Theta}(\mathbf{y}|\theta)f_\Theta(\theta).
+\end{equation}
 
-Oletetaan, että $G=(V, E)$ on suunnattu verkko ja $a, b \in V$. \\
+\section{Kontrafaktuaalit}
 
-\noindent Merkintä $a \rightarrow b$ tarkoittaa, että $(a, b) \in E$. Tällöin sanotaan, että $a$ on kaaren $(a, b)$ \emph{lähtösolmu} ja $b$ on kaaren $(a, b)$ \emph{maalisolmu}. Sanotaan myös, että solmu $b$ on solmun $a$ \emph{vierussolmu} tai että solmut $a$ ja $b$ ovat \emph{vierekkäisiä}. \\ 
+Kontrafaktuaalit liittyvät aina vastaavaan kausaalimalliin, joten määritellään ensin kausaalimalli.
 
-\noindent Jos $(a, a) \in E$, sanotaan suunnatussa verkossa olevan \emph{silmukka} solmussa $a$.
-\end{maar}
+\begin{maar}[Kausaalimalli \cite{pearl10} (pearl 2009 (TIKKA))]
 
-\noindent Esimerkkiverkossa $H$ kaaren $(Z, T)$ lähtösolmu on solmu $Z$ ja maalisolmu solmu $T$. Lisäksi huomataan,  että verkossa $H$ ei ole yhtään silmukkaa. Kuvan \ref{esverkko} verkosta havaitaan, että melkein kaikki solmut ovat toistensa vierussolmuja. Ainoa poikkeus on solmut $R$ ja $Y$, joiden välillä ei ole nuolta ja jotka eivät siten ole vierekkäisiä.
+Kausaalimalli $M$ on kolmikko $(\mathbf{U}, \mathbf{V}, \mathbf{F})$, missä
 
-\begin{maar}[Yksinkertainen suunnattu verkko] \label{yk_suun_verkko}
-
-Oletetaan, että $G = (V,E)$ on suunnattu verkko, jossa ei ole yhtään silmukkaa eli $(v, v) \notin E$ kaikilla $v \in V$. \\
+\begin{enumerate}
+\item $\mathbf{U}$ on joukko havaitsemattomia taustamuuttujia, jotka määräytyvät mallin ulkopuolisista tekijöistä
+\item $\mathbf{V}=\{V_1, V_2, \ldots, V_n\}$ on joukko havaittuja muuttujia, jotka määräytyvät mallin sisältämistä muuttujista, eli joukon $\mathbf{U} \cup \mathbf{V}$ alkioista
+\item $\mathbf{F}=\{f_{V_1}, f_{V_2}, \ldots, f_{V_n}$ on sellainen joukko funktioita, että jokainen $f_{V_i}$ on kuvaus joukolta $\mathbf{U} \cup (\mathbf{V} \ V_i)$ joukolle $V_i$, ja joukko $\mathbf{F}$ muodostaa kuvauksen joukolta $\mathbf{U}$ joukkoon $\mathbf{V}$.
+\end{enumerate}
 
-\noindent Tällöin sanotaan, että $G$ on yksinkertainen suunnattu verkko.
 \end{maar}
 
-\noindent Esimerkkinä käytetystä verkosta $H$ nähdään heti, että se on yksinkertainen suunnattu verkko, koska siinä ei ole yhtään silmukkaa. Yksinkertaisesta suunnatusta verkosta käytetään englanniksi nimitystä \emph{directed acyclic graph} ja se saatetaan lyhentää DAG.
+Kontrafaktuaalit muodostuvat, kun kausaalimalliin tehdään muutos.
 
-\begin{maar}[Polku ja suunnattu polku] \label{polku}
+\begin{maar}[Kontrafaktuaali (pearl)]
 
-Oletetaan, että $G$ on yksinkertainen verkko ja $n \in \N, n \geq 1$.
+Oletetaan, että $M$ on kausaalimalli ja että $M_x$ on kausaalimalli, jossa muuttujasta $X$ riippuviin yhtälöihin on sijoitettu $X=x$. Merkitään muuttujan $Y$ ratkaisua mallissa $M_x$ merkinnällä $Y_{M_x}(u)$. Tällöin kontrafaktuaali $Y_x(u)$ (eli muuttujan $Y$ arvo tilanteessa $u$, jos $X$ olisi ollut $x$) on
 
-\begin{enumerate}[(a)]
-\item Verkon $G$ solmujen jono $v_1, \ldots, v_n$ on \emph{polku} solmusta $v_1$ solmuun $v_n$, jos jonon jokaisesta solmusta on kaari jonon seuraavaan solmuun. Polkua voidaan merkitä $v_1 \leadsto v_n$.
-\item Jos verkko $G$ on suunnattu verkko, $a, b \in V$ ja kaikki polun $a \leadsto b$ kaaret kulkevat kaarien suuntien mukaisesti, voidaan täsmentää, että polku $a \leadsto b$ on \emph{suunnattu polku}.
-\item Polku on \emph{yksinkertainen}, jos kukin solmu esiintyy polussa vain kerran, paitsi että viimeinen ja ensimmäinen saavat olla sama solmu. \cite{tira}
-\item Yksinkertainen polku on \emph{sykli} eli \emph{kehä}, jos viimeinen ja ensimmäinen solmu ovat samat.  \cite{tira} %Suuntaamattomassa verkossa lisäksi vaaditaan, että syklissä pitää olla vähintään kolme solmua.
-\end{enumerate}
+\begin{equation}
+Y_x(u) \overset{\Delta}{=} Y_{M_x}(u).
+\end{equation}
 
 \end{maar}
 
-\smallskip
+\section{Tutkimusongelma}
 
-\noindent Huomataan, että verkossa $H$ on useita polkuja solmusta $R$ solmuun $Y$. Polku $R \rightarrow T \rightarrow Y$ on ainut suunnattu polku ja $R \leftarrow X \rightarrow Y$ on tavallinen polku, sillä solmujen $R$ ja $X$ välillä kuljetaan nuolen suunnan vastaisesti. Verkossa ei ole yhtään sykliä eli se on \emph{syklitön}. Suunnatuista ja syklittömistä verkoista voidaan käyttää englannin kielestä juontuvaa lyhennettä DAG \emph{(directed acyclic graph)} \cite{tira}.
+Oletetaan, että on olemassa aineisto $D = \{x, j, t, y\}$, joka on valikoidusti luokiteltu, ja päätöksentekijä $J(r)$, missä $r$ kuvaa hänen hyväksymisprosenttia. Tavoitteena on arvioida päätöksentekijän $J(r)$ virheprosenttia mahdollisimman tarkasti millä tahansa hyväksymisprosentilla $r \in [0, 1]$. 
 
-\smallskip
+\chapter{Aineisto}\label{aineisto}
 
-\begin{maar}[Jälkeläisyys] \label{sukulaisuus}
+Tutkimuksessa käytettiin synteettistä aineistoa, johon simuloitiin kolme muuttujaa $X$, $Z$, ja $W$. Näistä muuttujista $X$ on sekä mallin että päätöksentekijän havaittavissa. Käytännössä muuttuja $X$ kuvaa kirjallista informaatiota, joka on erilaisissa pöytäkirjoissa tai rekistereissä. Muuttujalla $Z$ kuvataan tietoa, jonka vain päätöksentekijä voi havaita: kuten Lakkaraju havainnollistaa, tällaista voi olla oikeuskäsittelyissä tieto siitä, onko vastaajalla perhettä mukana oikeussalissa. $W$ tuo malliin kohinaa. Muuttujalla esitämme aineistossa informaatiota, joka ei ole saatavilla päätöksentekijöille eikä mallille, mutta vaikuttaa silti tulokseen. Aineistossa nämä kaikki ovat riippumattomia standardinormaalijakautuneita satunnaismuuttujia. \cite{lakkaraju17}
 
-Oletetaan, että $G=(V, E)$ on suunnattu verkko ja $a, b \in V$. \\
-
-\noindent Jos on olemassa suunnattu polku $a \leadsto b$, niin solmun $b$ sanotaan olevan solmun $a$ \emph{jälkeläinen}. Vastaavasti tällöin sanotaan solmun $a$ olevan solmun $b$ \emph{vanhempi}. 
-\end{maar}
+Tulosmuuttujan $Y$ arvo otettiin satunnaisesti Bernoulli-jakaumasta parametrilla $p = \pr(Y=0|X, Z, W)=\dfrac{1}{1+\text{exp}\{-(\beta_xx+\beta_zz+\beta_ww)\}}$. Lausekkeen kertoimet $\beta_x$, $\beta_z$ ja $\beta_w$ asetettiin arvoihin 1, 1 ja 0,2. \cite{lakkaraju17}
 
-\noindent Esimerkiksi kuvan \ref{esverkko} verkossa solmulla $Y$ ei ole jälkeläisiä ja solmun $Z$ jälkeläiset ovat kaikki muut verkon solmut poislukien se itse, eli solmun $Z$ jälkeläiset on joukko $V \setminus \{Z\}$.
+Päätösmuuttujan $T$ arvo määritettiin vertaamalla lausekkeen $\pr(T=0|X, Z)=\frac{1}{1+\text{exp}\{-(\beta_XX+\beta_ZZ)\}} + \epsilon$, missä $\epsilon \sim N(0; 0,1)$, arvoa vastaavan satunnaismuuttujan kvantiilifunktion $F^{-1}_{\pr(T=0|X, Z)}$ arvoon kohdassa $r$. Henkilölle annetaan kielteinen päätös $T=0$, jos $F^{-1}_{\pr(T=0|X, Z)}(r) < \pr(T=0|X=x_i, Z=z_i)$ ja positiivinen päinvastaisessa tapauksessa. Näin annetut päätökset ovat toisistaan riippumattomia ja tuomarille annettu hyväksymisprosentti konvergoi havaittuun hyväksymisprosenttiin.
 
-Kausaalipäättelyssä kausaalisten vaikutusten identifiomiseksi tarvitaan usein selvittää niin sanotut \emph{haarukka-} ja \emph{käänteiset haarukkasolmut}. Määritellään ne seuraavaksi.
 
-\begin{maar}[Haarukkasolmu] \label{haarukka}
+Kun aineisto oli simuloitu, se jaettiin koulutus- ja testiaineistoihin. Lopuksi molempia aineistoja muokattiin siten, että tulosmuuttujan arvo oli saatavissa vain yksilöille, joille oli annettu positiivinen päätös $(T=1)$. Kielteisen päätöksen saaneille tulosmuuttujan arvo asetettiin arvoon $0$. \cite{lakkaraju17}
 
-Oletetaan, että suunnatussa verkossa on polku $A \leftarrow B \rightarrow C \leftarrow D$. Tällöin solmua B sanotaan \emph{haarukkasolmuksi} ja solmua C \emph{käänteiseksi haarukkasolmuksi}.
-
-\end{maar}
 
+%%%%%%%%%
+%%%%%%%%%
 %%%%%%%%%
 
-\section{Kausaalipäättely}\label{kausaali}
-
-Judea Pearl esittää artikkelissaan \cite{pearl10}, että kaikessa tutkimuksessa, joka hyödyntää kausaalipäättelyä, tulisi edetä järjestelmällisesti neljässä vaiheessa:
-
-\begin{enumerate}
+\chapter{Menetelmät}\label{metodit}
 
-\item Määrittely: Määritetään tavoitesuuruus Q funktiona Q($\M$), joka voidaan laskea kaikille malleille $\M$.
-\item Oletuksien esitys: Esitä kausaaliset oletukset luonnollisella kielellä ja ilmaise niiden rakenteellinen osa verkkona.
-\item Identifioituvuus: Osoita, onko tavoitesuuruus määritettävissä (ilmaistavissa estimoitavina parametreina).
-\item Estimointi: Estimoi tavoitesuuruutta, jos se on identifioituva tai approksimoi sitä jos se ei ole. Tarkista mallin mahdolliset (tilastolliset) oletukset ja implikaatiot ja muuta mallia, jos oletukset osoittautuvat paikkaansa pitämättömiksi.
+Ennustemallien suorituskyvyn arvioiminen valikoidusti luokitellussa aineistossa ei ole suoraviivaista. Yksinkertaisimmillaan ongelma juontuu siitä, että niiden havaintojen $X$ jakauma, joille on annettu myönteinen päätös, on erilainen kuin kielteisen päätösten saaneiden havaintojen jakauma, eli
+\begin{equation}
+f_X(X|T=0) \neq f_X(X|T=1).
+\end{equation}
+Kuten mainittua, lisäongelmana valikoidusti luokitelluissa aineistoissa on se, että kielteisen päätöksen saaneille vasteen arvo ei ole havaittu ja siten vasteen puuttuminen lliittyy vasteen arvoon.
 
-\end{enumerate}
+Valikoidusti luokitelluissa aineistoissa mallin tarkkuutta voidaan verrata kahteen metriikkaan, mallin todelliseen tarkkuuteen (engl. \emph{true evaluation}) ja havaittujen tulosten perusteella laskettuun tarkkuuteen. Todellinen tarkkuus arvioidaan järjestämällä havainnot jonkin ennustemallin $\B$ ennusteiden mukaan. Malli $\B$ voi olla esimerkiksi regressiomalli tai neuroverkko, joka yhdistää yksilön havaittavissa olevat ominaisuudet $\mathbf{x}$ todennäköisyyteen negatiiviseen tulokseen $Y=0$. Jos mallin suorituskykyä arvioidaan hyväksymistasolla $r'$ ja havaintoja on $N$ kappaletta, mallin virheprosentti arvioidaan laskemalla $\sum_{i=1}^{r'\cdot N} \mathbbm{1}\{y_i=0\}$ niiden havaintojen joukossa, joille $\B$ on arvioinut pienimmän epäonnistumisen todennäköisyyden (katso algoritmi \ref{alg:true_eval}).
 
-\noindent Tutkielmani tavoitteena on esittää algoritmi, jolla voimme paremmin ennustaa riskiä populaatiotasolla, kun muutamme myönteisten päätösten osuutta jakun käytössä on valintaharhasta kärsivää aineistoa. Todennäköisyyslausekkein ilmaistuna haluamme siis selvittää vapautusprosentin muutoksen vaikutusta epätoivottavan tapahtuman $Y=0$ todennäköisyyteen, mikä voidaan kirjoittaa muotoon
+Koska oikeissa sovelluksissa sellaisia tuloksia $Y$ ei voida havaita, joille päätös on ollut kielteinen ($T=0$), niin yleensä mallin suorituskyvyn arvioinneissa käytetään vain havaittuja tuloksia. Pelkästään havaittujen tulosten perusteella laskettu virheprosentti on usein virheellinen, koska 
 
-\begin{equation} \label{q_m}
-\pr(Y=0 | \text{do}(R=r)).
-\end{equation} 
+XXXXXX (mallilla ei ole saatavissa muuttujaa Z ja se sitten järjestää eri järjestykseen lisäksi sellainen "harjakuva"). Havaittujen tuloksien perusteella laskettu virheprosentti lasketaan algoritmin \ref{alg:labeled_outcomes} esittämällä tavalla
 
-\noindent Huomataan, että lauseke \ref{q_m} ei riipu mistään mallista $\M$, joten se täyttää Pearlin tavoitesuuruuden Q määritelmän mukaiset ehdot. 
+\begin{algorithm}[] % enter the algorithm environment
+\caption{Todellinen tarkkuus} % give the algorithm a caption
+\label{alg:true_eval} % and a label for \ref{} commands later in the document
+\begin{algorithmic}[1] % enter the algorithmic environment
+\REQUIRE Aineisto $\D$, jossa on mallin $\B$ ennusteet $\s$ ja \emph{kaikki tulokset}, hyväksymisprosentti r
+\ENSURE Virheprosentti hyväksymisprosentilla $r$
+\STATE Järjestä aineisto ennusteiden $\s$ mukaan nousevaan järjestykseen.
+\STATE \hskip3.0em $\rhd$ Vaarallisimmat yksilöt ovat nyt taulukon viimeisenä.
+\STATE Laske vapautettavien määrä $N_{vap} = |\D| \cdot r$.
+\RETURN $\frac{1}{|\D|}\sum_{i=1}^{N_{vap}}\mathbbm{1}\{y_i=0\}$
+\end{algorithmic}
+\end{algorithm}
 
-Kausaalipäättelyssä mallit määritellään usein yksinkertaisina suunnattuina verkkoina. Mallin määrittämästä verkosta voidaan suoraan lukea kausaaliset riippuvuussuhteet ja malliin kuuluvat muuttujat. Jos mallissa on solmut $A$ ja $B$ ja jos solmu $B$ on solmun $A$ jälkeläinen, niin muuttujalla $A$ on mallin mukaan jonkinlainen kausaalinen vaikutus muuttujaan $B$. Jos verkossa muuttujien välillä ei ole jälkeläisyyssuhdetta, niin ne ovat toisistaan riipumattomat. Kausaalisen vaikutuksen funktionaalista muotoa ei usein määritellä.
+\begin{algorithm}[] % enter the algorithm environment
+\caption{Havaittujen tulosten perusteella laskettu tarkkuus} % give the algorithm a caption
+\label{alg:labeled_outcomes} % and a label for \ref{} commands later in the document
+\begin{algorithmic}[1] % enter the algorithmic environment
+\REQUIRE Aineisto $\D$, jossa on mallin $\B$ ennusteet $\s$ ja \emph{puuttuvia tuloksia}, hyväksymisprosentti r
+\ENSURE Virheprosentti hyväksymisprosentilla $r$
+\STATE Poista puuttuvat havainnot ja tallenna loput havainnot aineistoon $\D_{hav}$.
+\STATE Järjestä $\D_{hav}$ ennusteiden $\s$ mukaan nousevaan järjestykseen.
+\STATE \hskip3.0em $\rhd$ Vaarallisimmat yksilöt ovat nyt taulukon viimeisenä.
+\STATE Laske vapautettavien määrä $N_{vap} = |\D_{hav}| \cdot r$.
+\RETURN $\frac{1}{|\D_{hav}|}\sum_{i=1}^{N_{vap}}\mathbbm{1}\{y_i=0\}$
+\end{algorithmic}
+\end{algorithm}
 
-\subsection{Merkinnät ja keskeiset lauseet}\label{kausaalimerk_laus}
 
-Kausaalipäättelyssä käytettävät merkinnät noudattelevat pitkälle tavallisia todennäköisyyslaskennan merkintöjä. Kun selvitetään muuttujan $X$ vaikutusta muuttujaan $Y$ ja tehdään interventio asettamalla muuttuja $X$ arvoon $x_0$, sitä merkitään $\pr(Y| \text{do} (X=x_0))$.
+% Nimet kuviin: TODELLINEN SUORITUSKYKY > lyh. TODELLINEN, HAVAITUT TULOKSET > HAVAITUT, SUPISTUSALGORITMI, KONTRAFAKTUAALIT
 
-Käydään seuraavaksi läpi kausaalilaskennan kannalta keskeisimmät lauseet. Lauseiden todistukset sivuutetaan, mutta ne on löydettävissä Pearlin artikkelin lähteistä \cite{pearl10}. Määritelmät \ref{d_sep} ja \ref{takaovi} \textbf{JNE}.
+\section{Supistusalgoritmi}\label{contraction}
 
-\begin{maar}[d-separoituvuus \cite{pearl10}]\label{d_sep}
+Supistusalgoritmi (\emph{contraction}) on 2017 esitetty algoritmi, jonka avulla voidaan arvioida ennustavien mallien todellista suorituskykyä valikoidusti luokitelluissa aineistoissa. \cite{lakkaraju17} Algoritmin toimintaperiaatteena on arvioida mielivaltaisen ennustavan mallin $\B$ ennusteita löyhimmän, eli eniten positiivisia päätöksiä päätöksentekijän tekemien päätösten joukossa. Algoritmin pseudokoodi on esitetty algoritmissa \ref{contraction_alg}. Algoritmin toiminta perustuu armollisimman päättäjän arvioiman havaintojoukon järjestämiseen ja osittamiseen siten, että mallin $\B$ ennusteen virheprosenttia arvioidaan vain havainnoilla, joille on havaittu tulos.
 
-Joukko $\s$ katkaisee (blocks) polun $p$, jos vähintään toinen seuraavista ehdoista on voimassa:
+Supistusalgoritmin oletukset on esitetty alkuperäisissä tuloksissa. \cite{lakkaraju17} Algoritmi olettaa, että havaintojen määräytyminen päätöksentekijöille on täysin satunnaista ja että aineistossa on useita päätöksentekijöitä eri hyväksymisprosenteilla. Oletuksista ensimmäinen on looginen ja yleisesti, joskin saattaa rajoittaa joidenkin aineistojen käyttöä jos päätöksentekijän osoittaminen on jonkinlaisen (oikeus)prosessin tulos. Useiden päätöksentekijöiden oletuksessa on samankaltaiset ongelmat: kaikissa osissa aineistoa ei ole välttämättä saatavissa päätöksentekijän identifioivaa tietoa, jolloin erilaisten aineistojen käyttö rajoittuu. (Onko balanssin kanssa ongelmaa: jos jokin päättäjä 80 \% AR tekee 80\% päätöksistä ja joku jolla on 50 \% AR tekee loput?)
 
-\begin{enumerate}[(a)]
-\item Polku $p$ sisältää vähintään yhden solmun, joka on jonkin polun kulkusuuntaisen kaaren lähtösolmu ja kuuluu joukkoon $\s$. (arrow-emitting)
-\item Polku $p$ sisältää vähintään yhden käänteisen haarukkasolmun (collision node), joka ei kuulu joukkoon $\s$ ja jolla ei ole jälkeläisiä joukossa $\s$.
-\end{enumerate}
+Supistusalgoritmin tarkkuuteen vaikuttavat armeliaimman päätöksentekijän hyväksymisprosentti, hänen antamien päätöksien yhdenmukaisuus ennustemallin $\B$ ennusteiden kanssa (engl. \emph{agreement rate}) ja hänen antamien päätöksien lukumäärä. Näiden suureiden vaikutusta on analysoitu alkuperäisessä julkaisussa. \cite{lakkaraju17} Yleisesti hyväksymisprosentin, yhdenmukaisuuden ja päätöksien lukumäärän kasvaessa algoritmin tarkkuus paranee.
 
-\noindent Jos joukko $\s$ katkaisee kaikki polut muuttujasta $X$ muuttujaan $Y$, sanotaan joukon $\s$ d-separoivan muuttujat $X$ ja $Y$. Tällöin $X$ ja $Y$ ovat riippumattomia ehdolla $\s$, eli $X \independent Y | \s$.
+\begin{algorithm} % enter the algorithm environment
+\caption{Supistusalgoritmi} % give the algorithm a caption
+\label{contraction_alg} % and a label for \ref{} commands later in the document
+\begin{algorithmic}[1] % enter the algorithmic environment
+\REQUIRE Aineisto $\D$, todennäköisyydet $\s$ ja hyväksymisprosentti $r$
+\ENSURE Virheprosentti hyväksymisprosentilla $r$
 
-\end{maar}
+\STATE Olkoon $q$ päättäjä, jolla on korkein hyväksymisprosentti $r$.
+\STATE $\D_q = \{(x, j, t, y) \in \D | j = q \}$
+\STATE \hskip3.0em $\rhd$ Nyt $\D_q$ on havaintojoukko, jolle $q$ on antanut päätökset.
+\STATE
+\STATE $\RR_q = \{(x, j, t, y) \in \D_q | t=1 \}$
+\STATE \hskip3.0em $\rhd$ $\RR_q$ on on joukon $\D_q$ osa, jolle tulosmuuttujan arvot on havaittu.
+\STATE
+\STATE Järjestä taulukoon $\RR_q$ havainnot laskevaan järjestykseen todennäköisyyksien $\s$ mukaan ja talleta ne taulukkoon $\RR_q^{sort}$
+\STATE \hskip3.0em $\rhd$ Mallin korkeariskisimmät ovat nyt listan kärjessä
+\STATE
+\STATE Ota taulukosta $\RR_q^{sort}$ sen $[(1.0-r)|\D_q|]-[|\D_q|-|\RR_q|]$ ensimmäistä/ylintä havaintoa ja talleta ne taulukkoon $\RR_\B$.
+\STATE \hskip3.0em $\rhd$ $\RR_\B$ on lista henkilöistä, joille malli $\B$ on antanut positiivisen päätöksen
+\STATE 
+\STATE Laske $\mathbf{u} = \sum_{i=1}^{|\RR_\B|} \dfrac{\delta\{y_i=0\}}{|\D_q|}$.
 
-\begin{maar}[Takaovikriteeri (\emph{back-door criterion}) \cite{pearl10}] \label{takaovi}
+\RETURN $\mathbf{u}$
+\end{algorithmic}
+\end{algorithm}
 
-Oletetaan, että halutaan selvittää muuttujan X kausaalista vaikutusta muuttujaan Y. Joukko $\s$ on \emph{riittävä} vaikutuksen selvittämiseen (sufficient for adjustment), kun seuraavat ehdot ovat voimassa: 
+%%%%%%%%%
 
-\begin{enumerate}[(1)]
-\item Yksikään joukon  $\s$ alkioista ei ole solmun X jälkeläinen.
-\item Joukon $\s$ alkiot katkaisevat kaikki määritelmän \ref{d_sep} mukaiset kiertoreitit solmusta X solmuun Y. Kiertoreittejä ovat polut, jotka päättyvät muuttujaan $X$ osoittavaan nuoleen.
-\end{enumerate}
+\section{Kontrafaktuaalinen imputointi}\label{kf_imputointi}
 
-\end{maar}
+Kontrafaktuaalinen imputointimetodi perustuu kausaalimalliin, joka on esitetty kuvassa \ref{kausaalimalli}. Metodi perustuu siihen, että latentista muuttujasta $Z$ on aina saatavissa jonkin verran tietoa. Esimerkiksi oikeuskäsittelyissä, jos havaittu muuttuja $X$ osoittaa epäillyn olevan vaarallinen, mutta on päätetty vapauttaa epäilty $T=1$, niin voidaan ajatella latentin informaation -- eli muuttujan $Z$ arvon -- olleen niin poikkeava, että vapautus kannatti tehdä. Sama pätee päinvastaisessa tapauksessa. Toisaalta tilanteissa, joissa päätös $T$ ja muuttujan $X$ arvot ovat samansuuntaiset, latentista muuttujasta ei ole niin paljoa informaatiota saatavilla. Voidaan vain todeta, että sen arvo ei ole ollut riittävän äärimmäinen muuttamaan päätöstä.
 
+Tutkielmassa esitetyt tulokset ja päätelmät on tehty kaksiarvoisille muuttujille, mutta ne pätevät myös jatkuville muuttujille. Tällöin mallin logistinen regressio voidaan vaihtaa esimerkiksi lineaariseen malliin ja tarkkuutta voidaan mitata keskimääräisen virheen sijaan residuaalien neliösummalla.
 
-\subsection{Malli}\label{kausaalimalli}
+Tässä esitetty menetelmä perustuu jossain määrin siihen, että päätöksentekijällä on tulokseen liittyvää tietoa ja että hän käyttää sitä hyväkseen. Huomattavaa on, että jos päätöksentekijä sivuuttaa hänelle esitetyn tiedon ja tekee päätökset täysin satunnaisesti, aineisto ei ole enää valikoidusti luokiteltua ja havaintoja puuttuu täysin satunnaisesti. Tällöin regressiomallit voidaan rakentaa täysin normaalisti ja puuttuvat havainnot voidaan esimerkiksi poistaa.
 
-Malli sisältää viisi muuttujaa, jotka on esitelty lyhyesti taulukossa \ref{syntmjat}. Muuttujalla $R$ kuvataan päätöksentekijän hyväksymisprosenttia, eli sitä prosentuaalista osuutta henkilöistä, joilla on pienin vaara epätoivottavaan tulokseen ja joille siten voidaan antaa myönteinen päätös. $X$ ilmentää henkilön henkilökohtaisia ominaisuuksia, jotka ovat sekä päätöksentekijän että mallin havaittavissa. Muuttuja $X$ voi olla esimerkiksi jonkinlainen rekisteritieto, kuten ikä tai sukupuoli. Muuttuja $Z$ on muuttuja, jonka tuomari tai muu asiantuntija voi havaita, mutta joka on mallilta piilotettu. Muuttujan $Z$ voidaan ajatella esimerkiksi oikeuskäsittelyjen tapauksessa kuvaavan epäillyn kääytöstä oikeussalissa. Tulosmuuttuja $Y$ ja päätösmuuttuja $T$ ovat kaksiarvoisia ja niiden määrittelyt on esitelty kuvassa \ref{valikoitumisharha}: myönteistä päätöstä merkitään $t=1$, kielteistä $t=0$. Vastaavasti myönteinen tulos määritellään muuttujan $y$ arvoksi 1, kielteinen arvoksi 0.
+\subsection{Kausaalimalli}
 
-Mallin määrittelevä graafi on estetty kuviossa \ref{final_model} ilman virhemuuttujia. Graafista voidaan suoraan lukea oletukset: oletetaan, että $Z \independent X, R$ mutta laajennetaan Lakkarajun oletuksia sallimalla muuttujan X vaikutus muuttujaan R \cite{lakkaraju17}. Mallin oletetuilla kausaalisilla vaikutuksilla on lisäksi selkeästi ilmaistavat realisaatiot: kuinka osuuden $R$ muuttaminen vaikuttaa päätökseen ja edelleen päätös tulokseen ja niin edelleen.
+Kuvassa \ref{kausaalimalli} oleva verkko esittää oletetun kausaalisuuden rakenteen muuttujien välillä. Kuva esittää kuinka päätöksentekijän hyväksymisprosentti $R \in [0, 1]$ vaikuttaa vain päätökseen $T$. Päätökseen vaikuttaa lisäksi latentti informaatio $Z$ ja kirjallinen, malleille havaittavissa oleva informaatio $X$. Kuvasta voidaan lisäksi lukea, kuinka edellä mainitut muuttujat $T$, $X$ ja $Z$ vaikuttavat tulokseen $Y$. Erityispiirteenä on huomattava se, että jos päätös $T$ on kielteinen ($T=0$) niin tulosmuuttujan arvoa ei voida havaita.
 
-\begin{table} %[H]
+\begin{figure}
 \centering
-\begin{tabular}{rl}
-\hline \hline 
-Muuttuja  &  Kuvaus \\
-\hline
- R 	& Myönteisten päätösten osuus prosentteina $r \in [0, 1]$ \\
- X 	& Kirjatut muuttujat, havaittavissa kaikille \\
- Z 	& Kirjaamattomat muuttujat, vain päättäjän havaitsemat\\
- Y 	& Tulosmuuttuja, $y \in \{0, 1\}$\\
- T 	& Päätösmuuttuja, $t \in \{0, 1\}$\\
-\hline  \hline 
-\end{tabular}
-\caption{Mallin muuttujien selitteet}
-\label{syntmjat}
-\end{table}
-
-\begin{figure}% [H]
-    \centering
-    \begin{subfigure}[b]{0.4\textwidth}
-        \includegraphics[width=\textwidth]{final_model}
-        \caption{Malli ilman interventiota.}
-        \label{final_model}
-    \end{subfigure}	
-    ~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
-      %(or a blank line to force the subfigure onto a new line)
-    \begin{subfigure}[b]{0.5\textwidth}
-        \includegraphics[width=\textwidth]{intervention_model}
-        \caption{Malli, johon interventio on merkitty.}
-        \label{intervention_model}
-    \end{subfigure}
-    ~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
-    %(or a blank line to force the subfigure onto a new line)
-    \caption{Kausaalimallit graafeina.}\label{mallikuvat}
+\begin{tikzpicture}[->,>=stealth',node distance=2cm, semithick]
+
+\tikzstyle{every state}=[fill=none,draw=black,text=black]
+
+\node[state] (R) {$R$};
+\node[state] (X) [right of=R] {$X$};
+\node[state] (T) [below of=X] {$T$};
+\node[state] (Z) [rectangle, right of=X] {$Z$};
+\node[state] (Y) [below of=Z] {$Y$};
+
+\path (R) edge (T)
+(X) edge (T)
+edge (Y)
+(Z) edge (T)
+edge (Y)
+(T) edge (Y);
+\end{tikzpicture}
+\caption{Kausaalimalli: $R$ on päätöksentekijän hyväksymisprosentti, $X$ kirjatut, kaikille havaittavissa olevat muuttujat, $T$ päätöksentekijän päätös, $Z$ kirjaamattomat, vain hänelle havaittavissa olevat muuttujat ja $Y$ tulosmuuttuja. Virhetermit on jätetty pois selkeyden vuoksi.} \label{kausaalimalli}
 \end{figure}
 
-Johdetaan muuttujan $R$ kausaalivaikutus muuttujaan $Y$ yli kaikkien ositteiden X. Huomataan, että osuuden $R$ kausaalinen vaikutus voidaan ilmaista suoraan lausekkeella \ref{q_m}, sillä $\pr(Y=0|\text{do}(R=0))=0$ ja siten edelleen
-\begin{equation*}
-  \pr(Y=0|\text{do}(R=r))-\pr(Y=0|\text{do}(R=0)) \\
-%  =\: \pr(Y=0|\text{do}(R=r))-0 \\
-  =\: \pr(Y=0|\text{do}(R=r)).
-\end{equation*}
-
-Osoitetaan seuraavaksi, että X on riittävä vaikutusten korjaamiseen määritelmän \ref{takaovi} mukaisesti, kun selvitetään muuttujan R kausaalista vaikutusta muuttujaan Y. Mallista voidaan suoraan lukea, että takaovikriteerin ensimmäinen ehto on voimassa: X ei ole muuttujan R jälkeläinen. Polut, jotka muuttujan X pitää katkaista ollakseen riittävä vaikutusten korjaamiseen ovat $R \leftarrow X \rightarrow Y$, $R \leftarrow X \rightarrow T \rightarrow Y$ ja $R \leftarrow X \rightarrow T \leftarrow Z \rightarrow Y$. Muuttuja X täyttää kuitenkin määritelmän \ref{d_sep} (a)-kohdan ehdon ja siten d-separoi muuttujat R ja Y. Tällöin X on riittävä vaikutusten korjaamiseen ja voidaan hyödyntää Pearlin kaavaa 25 \cite{pearl10}:
-
-\begin{subequations} \label{derivation}
-\begin{align} 
- \pr&(Y=0|\text{do}(R=r))  = \sum_x \pr(Y=0| R=r, X=x) \pr(X=x) 		\label{derivation1} \\
-      &=  \sum_x \left( \sum_t \pr(Y=0, T=t| R=r, X=x) \right) \pr(X=x) 		\label{derivation2} \\
-      &=  \sum_x \left( \sum_t \pr(Y=0| T=t, R=r, X=x)\pr(T=t| R=r, X=x) \right) \pr(X=x)  \label{derivation3} \\
-      &=  \sum_x \pr(Y=0| T=1, R=r, X=x) \pr(T=1| R=r, X=x) \pr(X=x) 	\label{derivation4} \\
-      &=  \sum_x \pr(Y=0| T=1, X=x) \pr(T=1| R=r, X=x) \pr(X=x)  		\label{derivation5}
-\end{align}
-\end{subequations}
-
-Yllä oleva lauseke on yhtäpitävä myös jatkuville muuttujan $x$ arvoille, kun korvaamme summaukset integraalilla parametriavaruuden yli: $$\pr(Y=0|\text{do}(R=r)) = \int_x \pr(Y=0| T=1, X=x) \pr(T=1| R=r, X=x) \pr(X=x).$$
+\subsection{Bayes-malli}
 
-\subsection{algo}
+Esittämämme menetelmä perustuu bayesiläisen mallin hyödyntämiseen. Bayes-mallin määrittämiseksi on asetettava priorit kertoimille ja muuttujalle $Z$. Koska muuttuja $Z$ esittää useiden muuttujien summaa (vaatetus, käytös ja niin edelleen) voidaan \emph{a priori} olettaa muuttujan $Z$ olevan standardinormaalijakautunut keskeisen raja-arvolauseen nojalla. Logistisen regression kertoimien ($\beta_{xt},~\beta_{xy},~\beta_{zt}$ ja $\beta_{zy}$) priori on Studentin t-jakauma viidellä vapausasteella. Laskennallisista syistä priorit uudelleenparametroitiin olemaan epäkeskisiä. Prioriin päädyttiin MCMC-sämplerin diagnostiikoiden jälkeen ja koska normaalipriorilla on liian kevyet/raskaat hännät Gelman et al. mukaan. Mallinsimme aineistoa seuraavalla hierarkkisella mallilla \ref{eq:data_model} käyttäen Stan-ohjelmistoa \cite{stan}
 
+% osoita tässä uudelleenparametroinnin / epäkeskisen parametroinnin yhtäpitävyys?
+% + huomioita "funneliin" liittyvistä ongelmista
 
-Pearlin mukaan: 
+\begin{align} \label{eq:data_model}
+Y ~|~ T = 1,~ x & \sim \text{Bernoulli}(\invlogit(\alpha_y + \beta_{xy} x + \beta_{zy} z)) \\ \nonumber
+T ~|~ \D,~x,~Z & \sim \text{Bernoulli}(\invlogit(\alpha_{j} + \beta_{xt} x + \beta_{zt}z)). \\ \nonumber
+Z & \sim N(0, 1) \\ \nonumber
+\alpha_*~|~\sigma_\alpha & \sim N(0, \sigma^2_\alpha) \\ \nonumber % TARKISTA
+\beta_* & \sim t_6 \\ \nonumber % TARKISTA
+\sigma_\alpha & \sim N_+(0, \sigma_\tau),
+\end{align}
 
-$$P(Y=0|do(R=r), X=x)=P(Y=0|R=r, X=x)=P(Y=0|R=r, X=x, T=1)P(T=1|R=r, X=x)$$
+missä $j = 1, \ldots, M$ ja $M$ on tuomarien lukumäärä. Käytännössä tehtiin kaksi logistista regressiomallia, joista ensimmäinen mallintaa päätöksiä havaittujen ominaisuuksien $X$ ja tuomarin identiteetin perusteella hyödyntäen koko aineistoa. Jokaiselle tuomarille määritetään erillinen leikkauspiste $\alpha_j$, jotta erilaiset hyväksymisprosentit voidaan ottaa huomioon. Toinen regressiomalleista mallintaa tuloksia $Y$ havaittujen ominaisuuksien $X$ avulla käyttäen vain sitä osaa aineistosta, jolle tulokset on havaittu, eli jolle $T=1$. 
 
-Mallit  vaikutukset laskettiin Pythonilla versio 3.6. Syötteett sklinear mallliin , joka fitattiin testi dataan ja sitten integroitiin eri leniencyn tasoilla muuttujan X parametriavaruuden eli reaaliakselin ylitse.
+Käyttäen posteriorista poimittuja havaintoja voimme ennustaa kontrafaktuaalien arvon prediktiivisestä jakaumasta (\emph{posterior predictive}) 
+\begin{equation} \label{eq:post_pred}
+p(\tilde{y}|\mathbf{y})=\int_\Omega p(\tilde{y}|\theta)p(\theta|\mathbf{y})d\theta.
+\end{equation}
+Käytännössä, kun Stanilla on arvioitu parametrien $\theta$ arvot jne jne...
+
+\begin{algorithm}[H] % enter the algorithm environment
+\caption{Kontrafaktuaalinen imputointialgoritmi} % give the algorithm a caption
+\label{counterfactual_imputation} % and a label for \ref{} commands later in the document
+\begin{algorithmic}[1] % enter the algorithmic environment
+\REQUIRE Aineisto $\D = \{x, j, t, y\}$, ja hyväksymisprosentti $r$
+\ENSURE Virheprosentti (FR) hyväksymisprosenttiella $r$
+
+\STATE Poimi $\s$ havaintoa jokaisen parametrin posteriorista. 
+\FOR{$i$ in $1, \ldots, \s$} 
+\FOR{$j$ in $1, \ldots, n$}
+\STATE Poimi uusi tulos $\hat{Y}$ Bernoulli-jakaumasta parametrilla $\invlogit(\alpha_j[i]+\beta_{xt}[i]x+\beta_{zt}z[i,j]$.
+\ENDFOR
+\STATE Imputoi puuttuvat arvot käyttäen äsken vedettyjä arvoja.
+\STATE Järjestä havainnot nousevaan järjestykseen ennustemallin $\B$ ennusteiden perusteella.
+\STATE Laske $\text{FR} = \frac{1}{n}\sum_{k=1}^{n\cdot r} \mathbbm{1}\{y_k=0\}$.
+\ENDFOR
+
+\RETURN $\mathcal{U}$
+\end{algorithmic}
+\end{algorithm}
 
-%\begin{algorithm} 			% enter the algorithm environment
-%\caption{Kausaalialgoritmi} 		% give the algorithm a caption
-%\label{causal_alg} 			% and a label for \ref{} commands later in the document
-%\begin{algorithmic}[1] 		% enter the algorithmic environment
-%\REQUIRE aineisto $(\mathbf{x}, t, y) \in \D_t, \D_v$ ja hyväksymisaste $r \in [0, 1]$, missä $\D_t$ on testiaineisto ja $\D_v$ validointiaineisto.
-%\ENSURE $\pr(Y=0|\text{do}(R=r))$
+%\section{Kausaalipäättely}\label{kausaali}
+%
+%Judea Pearl esittää artikkelissaan \cite{pearl10}, että kaikessa tutkimuksessa, joka hyödyntää kausaalipäättelyä, tulisi edetä järjestelmällisesti neljässä vaiheessa:
+%
+%\begin{enumerate}
+%
+%\item Määrittely: Määritetään tavoitesuuruus Q funktiona Q($\M$), joka voidaan laskea kaikille malleille $\M$.
+%\item Oletuksien esitys: Esitä kausaaliset oletukset luonnollisella kielellä ja ilmaise niiden rakenteellinen osa verkkona.
+%\item Identifioituvuus: Osoita, onko tavoitesuuruus määritettävissä (ilmaistavissa estimoitavina parametreina).
+%\item Estimointi: Estimoi tavoitesuuruutta, jos se on identifioituva tai approksimoi sitä jos se ei ole. Tarkista mallin mahdolliset (tilastolliset) oletukset ja implikaatiot ja muuta mallia, jos oletukset osoittautuvat paikkaansa pitämättömiksi.
+%
+%\end{enumerate}
+%
+%\noindent Tutkielmani tavoitteena on esittää algoritmi, jolla voimme paremmin ennustaa riskiä populaatiotasolla, kun muutamme myönteisten päätösten osuutta ja kun käytössä on valintaharhasta kärsivää aineistoa. Todennäköisyyslausekkein ilmaistuna haluamme siis selvittää vapautusprosentin muutoksen vaikutusta epätoivottavan tapahtuman $Y=0$ todennäköisyyteen, mikä voidaan kirjoittaa muotoon
+%
+%\begin{equation} \label{q_m}
+%\pr(Y=0 | \text{do}(R=r)).
+%\end{equation} 
+%
+%\noindent Huomataan, että lauseke \ref{q_m} ei riipu mistään mallista $\M$, joten se täyttää Pearlin tavoitesuuruuden Q määritelmän mukaiset ehdot. 
+%
+%Kausaalipäättelyssä mallit määritellään usein yksinkertaisina suunnattuina verkkoina. Mallin määrittämästä verkosta voidaan suoraan lukea kausaaliset riippuvuussuhteet ja malliin kuuluvat muuttujat. Jos mallissa on solmut $A$ ja $B$ ja jos solmu $B$ on solmun $A$ jälkeläinen, niin muuttujalla $A$ on mallin mukaan jonkinlainen kausaalinen vaikutus muuttujaan $B$. Jos verkossa muuttujien välillä ei ole jälkeläisyyssuhdetta, niin ne ovat toisistaan riipumattomat. Kausaalisen vaikutuksen funktionaalista muotoa ei usein määritellä.
+%
+%\subsection{Merkinnät ja keskeiset lauseet}\label{kausaalimerk_laus}
+%
+%Kausaalipäättelyssä käytettävät merkinnät noudattelevat pitkälle tavallisia todennäköisyyslaskennan merkintöjä. Kun selvitetään muuttujan $X$ vaikutusta muuttujaan $Y$ ja tehdään interventio asettamalla muuttuja $X$ arvoon $x_0$, sitä merkitään $\pr(Y| \text{do} (X=x_0))$.
+%
+%Käydään seuraavaksi läpi kausaalilaskennan kannalta keskeisimmät lauseet. Lauseiden todistukset sivuutetaan, mutta ne on löydettävissä Pearlin artikkelin lähteistä \cite{pearl10}. Määritelmät \ref{d_sep} ja \ref{takaovi} \textbf{JNE}.
+%
+%\begin{maar}[d-separoituvuus \cite{pearl10}]\label{d_sep}
+%
+%Joukko $\s$ katkaisee (blocks) polun $p$, jos vähintään toinen seuraavista ehdoista on voimassa:
 %
-%\STATE Määritä $f(x) = \pr(X=x)$ testiaineistosta.
-%\STATE Ennusta vastetta $Y$ selittävillä muuttujilla $X$ käyttäen harjoitusaineiston havaintoja, joilla $T=1$.
-%\STATE  Määritä harjoitusaineiston jokaiselle havainnolle $P(Y=0|X=x)$ käyttäen yllä olevaa mallia.
-%\STATE Järjestä havainnot nousevaan järjestykeen edellisen kohdan todennäköisyyksien mukaan.
-%\STATE Alusta muuttuja \texttt{summa} = 0.
-%\FORALL{Jokaiselle parametriavaruuden pisteelle}
-%	\STATE $p_x \leftarrow P(X=x)$
-%	\STATE  $\mathcal{D_x} \leftarrow \{\mathcal{D} | X = x\}$
-%	\STATE  Assign first $r\cdot 100\%$ observations from $\mathcal{D_x}$ to $\mathcal{D}_{rx}$
-%	\STATE  $p_t \leftarrow \dfrac{|\{\mathcal{D}_{rx}|T=1\}|}{|\mathcal{D}_{rx}|}$
-%	\STATE  $\mathcal{D}_{tx} \leftarrow \{\mathcal{D}_x | T = 1\}$
-%	\STATE  $p_y \leftarrow \dfrac{|\{\mathcal{D}_{tx}|Y=0\}|}{|\mathcal{D}_{tx}|}$
-%	\STATE  Lisää muuttujaan \texttt{summa} tulo $p_y \cdot p_t \cdot p_x$
-%\ENDFOR
-%\RETURN \texttt{summa}
-%\end{algorithmic}
-%\end{algorithm}
+%\begin{enumerate}[(a)]
+%\item Polku $p$ sisältää vähintään yhden solmun, joka on jonkin polun kulkusuuntaisen kaaren lähtösolmu ja kuuluu joukkoon $\s$. (arrow-emitting)
+%\item Polku $p$ sisältää vähintään yhden käänteisen haarukkasolmun (collision node), joka ei kuulu joukkoon $\s$ ja jolla ei ole jälkeläisiä joukossa $\s$.
+%\end{enumerate}
+%
+%\noindent Jos joukko $\s$ katkaisee kaikki polut muuttujasta $X$ muuttujaan $Y$, sanotaan joukon $\s$ d-separoivan muuttujat $X$ ja $Y$. Tällöin $X$ ja $Y$ ovat riippumattomia ehdolla $\s$, eli $X \independent Y | \s$.
+%
+%\end{maar}
+%
+%\begin{maar}[Takaovikriteeri (\emph{back-door criterion}) \cite{pearl10}] \label{takaovi}
+%
+%Oletetaan, että halutaan selvittää muuttujan X kausaalista vaikutusta muuttujaan Y. Joukko $\s$ on \emph{riittävä} vaikutuksen selvittämiseen (sufficient for adjustment), kun seuraavat ehdot ovat voimassa: 
+%
+%\begin{enumerate}[(1)]
+%\item Yksikään joukon $\s$ alkioista ei ole solmun X jälkeläinen.
+%\item Joukon $\s$ alkiot katkaisevat kaikki määritelmän \ref{d_sep} mukaiset kiertoreitit solmusta X solmuun Y. Kiertoreittejä ovat polut, jotka päättyvät muuttujaan $X$ osoittavaan nuoleen.
+%\end{enumerate}
+%
+%\end{maar}
+%
+%
+%\subsection{Malli}\label{kausaalimalli}
+%
+%Malli sisältää viisi muuttujaa, jotka on esitelty lyhyesti taulukossa \ref{syntmjat}. Muuttujalla $R$ kuvataan päätöksentekijän hyväksymisprosenttia, eli sitä prosentuaalista osuutta henkilöistä, joilla on pienin vaara epätoivottavaan tulokseen ja joille siten voidaan antaa myönteinen päätös. $X$ ilmentää henkilön henkilökohtaisia ominaisuuksia, jotka ovat sekä päätöksentekijän että mallin havaittavissa. Muuttuja $X$ voi olla esimerkiksi jonkinlainen rekisteritieto, kuten ikä tai sukupuoli. Muuttuja $Z$ on muuttuja, jonka tuomari tai muu asiantuntija voi havaita, mutta joka on mallilta piilotettu. Muuttujan $Z$ voidaan ajatella esimerkiksi oikeuskäsittelyjen tapauksessa kuvaavan epäillyn kääytöstä oikeussalissa. Tulosmuuttuja $Y$ ja päätösmuuttuja $T$ ovat kaksiarvoisia ja niiden määrittelyt on esitelty kuvassa \ref{valikoitumisharha}: myönteistä päätöstä merkitään $t=1$, kielteistä $t=0$. Vastaavasti myönteinen tulos määritellään muuttujan $y$ arvoksi 1, kielteinen arvoksi 0.
+%
+%Mallin määrittelevä graafi on estetty kuviossa \ref{final_model} ilman virhemuuttujia. Graafista voidaan suoraan lukea oletukset: oletetaan, että $Z \independent X, R$ mutta laajennetaan Lakkarajun oletuksia sallimalla muuttujan X vaikutus muuttujaan R \cite{lakkaraju17}. Mallin oletetuilla kausaalisilla vaikutuksilla on lisäksi selkeästi ilmaistavat realisaatiot: kuinka osuuden $R$ muuttaminen vaikuttaa päätökseen ja edelleen päätös tulokseen ja niin edelleen.
+%
+%\begin{table} %[H]
+%\centering
+%\begin{tabular}{rl}
+%\hline \hline 
+%Muuttuja & Kuvaus \\
+%\hline
+% R & Myönteisten päätösten osuus prosentteina $r \in [0, 1]$ \\
+% X & Kirjatut muuttujat, havaittavissa kaikille \\
+% Z & Kirjaamattomat muuttujat, vain päättäjän havaitsemat\\
+% Y & Tulosmuuttuja, $y \in \{0, 1\}$\\
+% T & Päätösmuuttuja, $t \in \{0, 1\}$\\
+%\hline \hline 
+%\end{tabular}
+%\caption{Mallin muuttujien selitteet}
+%\label{syntmjat}
+%\end{table}
+%
+%\begin{figure}% [H]
+% \centering
+% \begin{subfigure}[b]{0.4\textwidth}
+% \includegraphics[width=\textwidth]{final_model}
+% \caption{Malli ilman interventiota.}
+% \label{final_model}
+% \end{subfigure} 
+% ~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
+% %(or a blank line to force the subfigure onto a new line)
+% \begin{subfigure}[b]{0.5\textwidth}
+% \includegraphics[width=\textwidth]{intervention_model}
+% \caption{Malli, johon interventio on merkitty.}
+% \label{intervention_model}
+% \end{subfigure}
+% ~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
+% %(or a blank line to force the subfigure onto a new line)
+% \caption{Kausaalimallit graafeina.}\label{mallikuvat}
+%\end{figure}
+%
+%Johdetaan muuttujan $R$ kausaalivaikutus muuttujaan $Y$ yli kaikkien ositteiden X. Huomataan, että osuuden $R$ kausaalinen vaikutus voidaan ilmaista suoraan lausekkeella \ref{q_m}, sillä $\pr(Y=0|\text{do}(R=0))=0$ ja siten edelleen
+%\begin{equation*}
+% \pr(Y=0|\text{do}(R=r))-\pr(Y=0|\text{do}(R=0)) \\
+%% =\: \pr(Y=0|\text{do}(R=r))-0 \\
+% =\: \pr(Y=0|\text{do}(R=r)).
+%\end{equation*}
+%
+%Osoitetaan seuraavaksi, että X on riittävä vaikutusten korjaamiseen määritelmän \ref{takaovi} mukaisesti, kun selvitetään muuttujan R kausaalista vaikutusta muuttujaan Y. Mallista voidaan suoraan lukea, että takaovikriteerin ensimmäinen ehto on voimassa: X ei ole muuttujan R jälkeläinen. Polut, jotka muuttujan X pitää katkaista ollakseen riittävä vaikutusten korjaamiseen ovat $R \leftarrow X \rightarrow Y$, $R \leftarrow X \rightarrow T \rightarrow Y$ ja $R \leftarrow X \rightarrow T \leftarrow Z \rightarrow Y$. Muuttuja X täyttää kuitenkin määritelmän \ref{d_sep} (a)-kohdan ehdon ja siten d-separoi muuttujat R ja Y. Tällöin X on riittävä vaikutusten korjaamiseen ja voidaan hyödyntää Pearlin kaavaa 25 \cite{pearl10}:
+%
+%\begin{subequations} \label{derivation}
+%\begin{align} 
+% \pr&(Y=0|\text{do}(R=r)) = \sum_x \pr(Y=0| R=r, X=x) \pr(X=x) \label{derivation1} \\
+% &= \sum_x \left( \sum_t \pr(Y=0, T=t| R=r, X=x) \right) \pr(X=x) \label{derivation2} \\
+% &= \sum_x \left( \sum_t \pr(Y=0| T=t, R=r, X=x)\pr(T=t| R=r, X=x) \right) \pr(X=x) \label{derivation3} \\
+% &= \sum_x \pr(Y=0| T=1, R=r, X=x) \pr(T=1| R=r, X=x) \pr(X=x) \label{derivation4} \\
+% &= \sum_x \pr(Y=0| T=1, X=x) \pr(T=1| R=r, X=x) \pr(X=x) \label{derivation5}
+%\end{align}
+%\end{subequations}
+%
+%Yllä oleva lauseke on yhtäpitävä myös jatkuville muuttujan $x$ arvoille, kun korvaamme summaukset integraalilla parametriavaruuden yli: $$\pr(Y=0|\text{do}(R=r)) = \int_x \pr(Y=0| T=1, X=x) \pr(T=1| R=r, X=x) \pr(X=x).$$
+%
+%\subsection{algo}
+%
+%
+%Pearlin mukaan: 
+%
+%$$P(Y=0|do(R=r), X=x)=P(Y=0|R=r, X=x)=P(Y=0|R=r, X=x, T=1)P(T=1|R=r, X=x)$$
+%
+%Mallit vaikutukset laskettiin Pythonilla versio 3.6. Syötteett sklinear mallliin , joka fitattiin testi dataan ja sitten integroitiin eri leniencyn tasoilla muuttujan X parametriavaruuden eli reaaliakselin ylitse.
 
 %%%%%%%%%
 %%%%%%%%%
@@ -597,59 +620,84 @@ Mallit  vaikutukset laskettiin Pythonilla versio 3.6. Syötteett sklinear mallli
 
 \chapter{Tulokset}\label{tulokset}
 
-- se pääkuvaaja vertailuineen
 
-- beta ztan vaikutus?
 
-- erilaiset mallit ja koko käyrä aina 1 asti -> kuinka meillä parempi 
+Kappaleessa \ref{metodit} selostettuja menetelmiä sovellettiin synteettiseen aineistoon ja tulokset on esitetty kuvassa \ref{tuloskuva}. Kuvista nähdään, että ehdotettu menetelmä pystyy selkeästi arvioimaan ennustemallin todellista suorituskykyä paremmin kuin supistusalgoritmi. Kuvasta \ref{tuloskuva_erotukset} havaitaan lisäksi, kuinka uuden menetelmän arvio virheprosentista vastaa lähes täysin todellista virheprosenttia kaikilla hyväksymisprosenteilla.
+
+Uuden menetelmän tarkkuuden paraneminen liittyy todennäköisesti siihen, että malli tarkastelee koko aineistoa ja pystyy siten tekemään tarkempia arvioita jo pienemmästä määrästä havaintoja. Suurempi määrä havaintoja näkyy myös keskivirhepalkin pienuutena.
 
-- voidaanko antaa estimaateille mitään luottusvälejä tjsp?
+Liitteen X kuvassa Y näkyy myösn, kuinka esittämämme kontrafaktuaalieihin pohjautuvan menetelmän tarkkuus on lähes rriipumaton latentin muuttujan vaikutuksesta,, eli muuttujan $\beta_z$ kertoimesta. Kun beta Z kasvaa viiteen tai kolmeen lakkarajun menetelmä lakee. Liitteessä eesitetään lisäksi lninteimmän hyväksymisprosentin noston vaikutus. Vaikka lakkarajun mentelmän  tarkkuus kasvaa, se estimoi silti edelleen huonommin (MAE X vs Y).
 
-\begin{figure}[H]
+\begin{figure}% [H]
 \centering
-\includegraphics[width = 0.8\textwidth]{without_unobservables}
-\caption{Tulokset kuvana}
+\begin{subfigure}[b]{0.475\textwidth}
+\includegraphics[width=\textwidth]{sl_thesis_all}
+\caption{Virheprosentti hyväksymisprosentin funktiona, pystyviivat kuvaavat keskivirhettä. \\ ~}
+\label{tuloskuva}
+\end{subfigure} 
+~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
+%(or a blank line to force the subfigure onto a new line)
+\begin{subfigure}[b]{0.475\textwidth}
+\includegraphics[width=\textwidth]{sl_thesis_all_err}
+\caption{Ero todelliseen virheprosenttiin hyväksymisprosentin funktiona, pystyviivat kuvaavat keskivirhettä.}
+\label{tuloskuva_erotukset}
+\end{subfigure}
+~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
+%(or a blank line to force the subfigure onto a new line)
+\caption{Uuden menetelmän vertailu supistusalgoritmiin. Kuvista havaitaan, kuinka uusi kontrafaktuaaleihin pohjautuva menetelmä (punainen viiva) ennustaa virheprosentin tarkemmin kuin supistusalgoritmi (sininen). Kuvasta nähdään lisäksi, kuinka esitetty menetelmä pystyy ennustamaan todellisen virheprosentin jokaiselle hyväksymisprosentille riippumatta armeliaimman päättäjän myönteisten päätösten määrästä. Havaittujen tulosten perusteella laskettu arvio (vaaleanpunainen viiva) on selkeästi liian pieni ja johtaisi väärään käsitykseen mallin hyvästä suorituskyvystä.}
 \label{tuloskuva}
 \end{figure}
 
+
+
 %%%%%%%%%
 %%%%%%%%%
 %%%%%%%%%
 
 \chapter{Johtopäätökset}\label{diskussio}
 
-- Jatkosuunnitelmat: tutkitaan beta zetan vaikutusta tuloksiin, kuinka hyvin estimoituu. Sovelletaan oikeaan data settiiin. Mielenkiintoiseksi on osoittautunut propublica julkaisun artikkelissa machine bias käyttämä COMPAS-aineisto. 
+Tässä tutkielmassa esitettiin uusi menetelmä, \emph{kontrafaktuaalinen imputointi}, jonka avulla pystyttiin arvioimaan ennustemallin $\B$ tarkkuutta valikoidusti luokitellussa aineistossa paremmin kuin aikaisemmin kirjallisuudessa esitetyllä supistusalgoritmilla. Menetelmä imputoi puuttuvat tulokset käyttäen kausaalista rakennemallia, kontrafaktuaaleja ja hierarkkista Bayes-mallia.
 
-- Ongelmat / muut huomiot: Tällä aikataululla en ole tehnyt mallin validointeja: onko kausaaliset pathwayt reasonable. Malli itsessään on suhteellisen yksinkertainen joten (KÄSIENHEILUTTELU) on jokseenkin luultavaa, että sinällään mallin spesifionnissa tuskin on mitään virheitä. Voitaisiin ehkä tietenkin koostaa jokseenkin hienosyisempi malli (erilaiset rikoshistoria yms erikseeen) ja jotain. Jvat muuttujat? P-uloitteinen parametriavaruus???
+Tutkielmassa esitettyä työtä voidaan laajentaa monilta osin soveltumaan lukuisiin eri sovellusaloihin. Vastemuuttuja voi olla kategorinen tai jatkuva ja kausaalimallia voidaan laajentaa koskemaan mielivaltaisen vaikeita tilanteita. Lisätutkimuksia voidaan edelleen kohdistaa latentin muuttujan vaikutuksen $\beta_z$ korostumiseen ja epälineaarisiin yhteyksiin selittävien muuttujien $X$ ja $Z$ sekä selitettävän muuttujan $Y$ välillä. Lisäksi menetelmän toimiminen pitää vielä varmentaa jollain todellisella aineistolla.
 
-- Mallin validointi epäeettistä, koska vaatisi huonoja päätöksiä > meillä kyllä synteettinen?
+Esitettyä menetelmää voidaan soveltaa aloilla, joilla saatavilla oleva aineisto on valikoidusti luokiteltua, päätöksien teossa käytetään kirjaamatonta tietoa ja halutaan selvittää ihmispäättäjien korvaamista tai tukemista malleilla. Esimerkiksi jos vakuutusyhtiöt haluavat korvata korvauskäsittelijät ennustemalleilla, jotka ennustavat vakuutuksesta saatavaa voittoa, esitetyllä menetelmällä voitaisiin verrata mallin suorituskykyä käsittelijöiden tekemiin päätöksiin. Toisaalta jos oikeuslaitokset haluavat tuoda ennustavat algoritmit mukaan vakuuskäsittelyihin, voitaisiin mallin suorituskykyä arvioida päästämättä vaarallisia henkilöitä vapaaksi.
 
-- Implikaatiot: parempia malleja???
-
-%\begin{verbatim} 
-%# R-koodi, tulos sama
-%library(igraph)
-%library(causaleffect)
-%# simplify = FALSE to allow multiple edges
-%g <- graph.formula(X -+ R, X -+ D, X -+ Y, R -+ D , D -+ Y, D -+ Y, Y -+ D, simplify = FALSE)
-%# Here the bidirected edge between X and Z is set to be unobserved in graph g
-%# This is denoted by giving them a description attribute with the value "U"# The edges in question are the fourth and the fifth edge
-%g <- set.edge.attribute(graph = g, name = "description", index = c(6,7), value = "U")
-%
-%res <- causal.effect("Y", "R", G = g)
-%\end{verbatim}
 
 %%%%%%%%%
 
-%\nocite{*}
+\nocite{*}
 
 \bibliographystyle{babplain}
 \renewcommand{\bibname}{Lähteet}
 \bibliography{viitteet} 
 
-%\begin{appendices}
-%\chapter{Abstract in English?}
-%The contents...
-%\end{appendices}
+\begin{appendices}
+
+\chapter{Lisäkuvaajat}
+
+\section{Latentin muuttujan vaikutus}
+
+\begin{figure}% [H]
+\centering
+\begin{subfigure}[b]{0.475\textwidth}
+\includegraphics[width=\textwidth]{sl_thesis_bz3__all}
+\caption{Virheprosentti hyväksymisprosentin funktiona, pystyviivat kuvaavat keskivirhettä. \\ ~}
+\label{tuloskuva_2}
+\end{subfigure} 
+~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
+%(or a blank line to force the subfigure onto a new line)
+\begin{subfigure}[b]{0.475\textwidth}
+\includegraphics[width=\textwidth]{sl_thesis_bz3__all_err}
+\caption{Ero todelliseen virheprosenttiin hyväksymisprosentin funktiona, pystyviivat kuvaavat keskivirhettä.}
+\label{tuloskuva_erotukset_2}
+\end{subfigure}
+~ %add desired spacing between images, e. g. ~, \quad, \qquad, \hfill etc. 
+%(or a blank line to force the subfigure onto a new line)
+\caption{Uuden menetelmän vertailu supistusalgoritmiin, kun latentin muuttujan kerron $\beta_z=3$. Kuvista havaitaan, kuinka uusi kontrafaktuaaleihin pohjautuva menetelmä (punainen viiva) ennustaa virheprosentin edelleen tarkemmin kuin supistusalgoritmi (sininen). Ero on marginaalinen kappaleessa YY esitettyyn.}
+\label{tuloskuva_2}
+\end{figure}
+
+
+\end{appendices}
 
-\end{document}
+\end{document}
\ No newline at end of file
diff --git a/analysis_and_scripts/code_linear_dependency.stan b/analysis_and_scripts/code_linear_dependency.stan
index e177162..a85bded 100644
--- a/analysis_and_scripts/code_linear_dependency.stan
+++ b/analysis_and_scripts/code_linear_dependency.stan
@@ -3,6 +3,7 @@ data {
   int<lower=0> N_obs;  // Number of "observed observations" (with T = 1)
   int<lower=0> N_cens; // Number of "censored observations" (with T = 0)
   int<lower=0> M; // Number of judges
+  real<lower=0> sigma_tau; // Prior for the variance parameters.
   int<lower=1, upper=M> jj_obs[N_obs];   // judge_ID array
   int<lower=1, upper=M> jj_cens[N_cens]; // judge_ID array
   int<lower=0, upper=1> dec_obs[N_obs];   // Decisions for the observed observations
@@ -18,8 +19,11 @@ parameters {
   vector[N_cens] Z_cens;
   
   // Intercepts
-  real alpha_T[M];
-  real alpha_Y;
+  vector<lower=0>[M] sigma_T;
+  real<lower=0> sigma_Y;
+
+  vector[M] alpha_T_raw;
+  real alpha_Y_raw;
 
   // Temporary variables to compute the coefficients
   vector[D] a_XT;
@@ -41,11 +45,19 @@ transformed parameters {
   vector[D] beta_XY;
   real<lower=0> beta_ZT; // Presume latent variable has a positive coefficient.
   real<lower=0> beta_ZY;
+  
+  // Intercepts
+  vector[M] alpha_T;
+  real alpha_Y;
 
   beta_XT = a_XT / sqrt(tau_XT);
   beta_XY = a_XY / sqrt(tau_XY);
   beta_ZT = a_ZT / sqrt(tau_ZT);
   beta_ZY = a_ZY / sqrt(tau_ZY);
+  
+  alpha_T = sigma_T .* alpha_T_raw;
+  alpha_Y = sigma_Y * alpha_Y_raw;
+
 }
 
 model {
@@ -54,13 +66,16 @@ model {
   Z_cens ~ normal(0, 1);
   
   // Intercepts
-  alpha_T ~ normal(0, 5);
-  alpha_Y ~ normal(0, 5);
+  sigma_T ~ normal(0, sigma_tau);
+  sigma_Y ~ normal(0, sigma_tau);
+  
+  alpha_T_raw ~ normal(0, 1);
+  alpha_Y_raw ~ normal(0, 1);
   
   // According to 
   // https://github.com/stan-dev/stan/wiki/Prior-Choice-Recommendations
   // section "Prior for the regression coefficients in logistic regression
-  // (non-sparse case)" a good prior is Student's with parameters 3>nu>7, 
+  // (non-sparse case)" a good prior is Student's with parameters 3 < nu < 7, 
   // 0 and 1.
   
   // Also, according to
@@ -74,11 +89,11 @@ model {
   a_ZT ~ normal(0, 1);
   a_ZY ~ normal(0, 1);
 
-  // nu = 5 -> nu/2 = 2.5
-  tau_XT ~ gamma(2.5, 2.5);
-  tau_XY ~ gamma(2.5, 2.5);
-  tau_ZT ~ gamma(2.5, 2.5);
-  tau_ZY ~ gamma(2.5, 2.5);
+  // nu = 6 -> nu/2 = 3
+  tau_XT ~ gamma(3, 3);
+  tau_XY ~ gamma(3, 3);
+  tau_ZT ~ gamma(3, 3);
+  tau_ZY ~ gamma(3, 3);
   
   // Compute the regressions for the observed observations
   for(i in 1:N_obs){
diff --git a/analysis_and_scripts/stan_modelling_empirical.py b/analysis_and_scripts/stan_modelling_empirical.py
index 9468f14..5423a56 100644
--- a/analysis_and_scripts/stan_modelling_empirical.py
+++ b/analysis_and_scripts/stan_modelling_empirical.py
@@ -19,11 +19,13 @@
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
-import scipy.special as ssp
+import numpy.random as npr
 from sklearn.linear_model import LogisticRegression
 from sklearn.ensemble import RandomForestClassifier
-import pystan
 import gc
+import psutil
+import os
+from cmdstanpy import Model
 
 plt.switch_backend('agg')
 
@@ -32,6 +34,9 @@ plt.rcParams.update({'figure.figsize': (10, 6)})
 
 import sys
 
+# Seed for reproducibility
+npr.seed(123)
+
 # figure storage name
 save_name = sys.argv[1] + "sl_compas"
 
@@ -55,25 +60,6 @@ print("Number of groups:", group_amount)
 
 print("Prior for the variances:", sigma_tau)
 
-def inv_logit(x):
-    return 1.0 / (1.0 + np.exp(-1.0 * x))
-
-
-def logit(x):
-    return np.log(x) - np.log(1.0 - x)
-
-
-def inverse_cumulative(x, mu, sigma):
-    '''Compute the inverse of the cumulative distribution of logit-normal
-    distribution at x with parameters mu and sigma (mean and st.dev.).'''
-
-    return inv_logit(ssp.erfinv(2 * x - 1) * np.sqrt(2 * sigma**2) - mu)
-
-def standardError(p, n):
-    denominator = p * (1 - p)
-    
-    return np.sqrt(denominator / n)
-
 ##########################
 
 # ## Evaluator modules
@@ -320,7 +306,7 @@ nJudges_M = 10
 judge_ID = pd.qcut(np.arange(len(compas_shuffled)), nJudges_M, labels=False)
 
 # Assign fixed leniencies from 0.1 to 0.9
-judge_leniency = np.array([0.1, 0.3, 0.5, 0.7, 0.9, 0.1, 0.3, 0.5, 0.7, 0.9])
+judge_leniency = np.array([0.1, 0.3, 0.5, 0.7, 0.9]*2)
 
 judge_leniency = judge_leniency[judge_ID]
 
@@ -398,7 +384,7 @@ def drawDiagnostics(title, save_name, f_rates, titles):
 
     plt.show()
 
-nIter = 1
+nIter = 10
 
 failure_rates = np.zeros((8, 4))
 failure_stds = np.zeros((8, 4))
@@ -408,12 +394,20 @@ f_rate_label = np.zeros((nIter, 8))
 f_rate_cont = np.zeros((nIter, 8))
 f_rate_cf = np.zeros((nIter, 8))
 
+# Compile stan model
+sm = Model(stan_file=stan_code_file_name)
+sm.compile()
 
 for i in range(nIter):
+    
+    ids = np.arange(5)
+    selected = ids + npr.choice([0, 5], 5)
+        
+    test_labeled = compas_labeled[compas_labeled.judge_ID.isin(selected)]
+    train = compas_labeled[~compas_labeled.judge_ID.isin(selected)]
 
-    # Split data by the judges
-    train = compas_labeled[compas_labeled.judge_ID <=4]
-    test_labeled = compas_labeled[compas_labeled.judge_ID >4]
+    # Renew IDs
+    test_labeled.loc[:, 'judge_ID'] = test_labeled.judge_ID % 5
     
     # Assign same observations to unlabeled data
     test_unlabeled = compas_unlabeled.iloc[test_labeled.index.values]
@@ -436,12 +430,12 @@ for i in range(nIter):
     observed = test_labeled['decision_T'] == 1
     
     # Assign data to the model
-    dat = dict(D=10,
-               N_obs=np.sum(observed),
-               N_cens=np.sum(~observed),
-               K=group_amount,
+    dat = dict(D=int(10),
+               N_obs=int(np.sum(observed)),
+               N_cens=int(np.sum(~observed)),
+               K=int(group_amount),
                sigma_tau=sigma_tau,
-               M=len(set(compas_labeled['judge_ID'])),
+               M=int(len(set(test_labeled['judge_ID']))),
                jj_obs=test_labeled.loc[observed, 'judge_ID']+1,
                jj_cens=test_labeled.loc[~observed, 'judge_ID']+1,
                kk_obs=kk_array[observed]+1,
@@ -452,43 +446,58 @@ for i in range(nIter):
                X_cens=test_labeled.loc[~observed, feature_cols.values],
                y_obs=test_labeled.loc[observed, 'result_Y'].astype(int))
     
-    sm = pystan.StanModel(file=stan_code_file_name)
-    
-    # Do the sampling
-    fit = sm.sampling(data=dat, chains=5, iter=6000, control = dict(adapt_delta=0.95))
-        
-    pars = fit.extract()
-    
-    plt.figure(figsize=(15,30))
+    # Do the sampling    
+    fit = sm.sample(data=dat, chains=4, seed=123, warmup_iters=1500, 
+                        sampling_iters=4500, adapt_delta=0.975)
+
+    # Extract predictions
+    fit_colnames = fit.column_names
 
-    fit.plot();
+    print("Colnames", fit.column_names)
 
-    plt.savefig(save_name + '_stan_convergence_diagnostic_plot_' + str(i))
+    pred_cols = [s for s in fit_colnames if 'y_est' in s]
+   
+    pars = fit.get_drawset(params=pred_cols)
+    
+    fit.get_drawset(params=pred_cols)
+
+    print("Drawset:", fit.get_drawset())    
     
-    plt.show()
     plt.close('all')
     gc.collect()
+    gc.collect()
 
-    print(fit, file=open(save_name + '_stan_fit_diagnostics_' + str(i) + '.txt', 'w'))
-
+    print(fit.diagnose(), file=open(save_name + '_stan_fit_diagnostics_' +
+          str(i) + '.txt', 'w'))
+    
     # Bayes
     
     # Format matrix, each row is a sample of the posterior
     # columns are observations
-        
-    y_imp = np.ones((pars['y_est'].shape[0], test_labeled.shape[0]))
-    
+            
+    #y_imp = np.ones((pars['y_est'].shape[0], test_labeled.shape[0]))
+    y_imp = np.ones((pars.shape[0], test_labeled.shape[0]))
+
     # Impute the unobserved with the estimated 
-    # Revers the binary coding to compute failures as sum 0 == 0 = 1
-    y_imp[:, ~observed] = 1 - pars['y_est']
-    
-    # Remove the variables to conserve memory
+    # Reverse the binary coding to compute failures as sum. 0 == 0 = 1
+    #y_imp[:, ~observed] = 1 - pars['y_est']
+    y_imp[:, ~observed] = 1 - pars
+
+    pars = None
+    fit = None
+
     del(pars)
     del(fit)
+
+    gc.collect()
+    gc.collect()
     
+    process = psutil.Process(os.getpid())
+    print("Memory use after deletion:", process.memory_info().rss)  # in bytes 
     
     # Impute the observed
     y_imp[:, observed] = 1 - test_labeled.loc[observed, 'result_Y']
+
    
     for r in range(1, 9):
         
@@ -553,6 +562,28 @@ plt.savefig(save_name + '_all')
 
 plt.show()
 
+# Plot error of the methods (contraction and counterfactual)
+# w.r.t True evaluation
+for i in range(2, failure_rates.shape[1]):
+
+    error = np.abs(failure_rates[:, 0] - failure_rates[:, i])
+    
+    plt.errorbar(x_ax,
+                 error,
+                 label=labels[i],
+                 c=colours[i],
+                 linestyle=line_styles[i],
+                 yerr=failure_stds[:, i])
+
+plt.xlabel('Acceptance rate')
+plt.ylabel('Error w.r.t. True evaluation')
+plt.legend()
+plt.grid()
+
+plt.savefig(save_name + '_all_err')
+
+plt.show()
+
 print("\nFailure rates:")
 print(np.array2string(failure_rates, formatter={'float_kind':lambda x: "%.5f" % x}))
 
diff --git a/analysis_and_scripts/stan_modelling_theoretic.py b/analysis_and_scripts/stan_modelling_theoretic.py
index 64ea087..2dd41a7 100644
--- a/analysis_and_scripts/stan_modelling_theoretic.py
+++ b/analysis_and_scripts/stan_modelling_theoretic.py
@@ -33,12 +33,17 @@ import scipy.special as ssp
 import numpy.random as npr
 from sklearn.linear_model import LogisticRegression
 from sklearn.ensemble import RandomForestClassifier
-from sklearn.model_selection import train_test_split
-import pystan
 import gc
+import psutil
+import os
+from cmdstanpy import Model
 
 plt.switch_backend('agg')
 
+
+# Seed for reproducibility
+npr.seed(123)
+
 import sys
 
 # figure storage name
@@ -62,6 +67,7 @@ stan_code_file_name = sys.argv[6]
 # Variance prior
 sigma_tau = float(sys.argv[7])
 
+
 # Settings
 
 plt.rcParams.update({'font.size': 16})
@@ -241,6 +247,220 @@ def humanDeciderLakkaraju(df,
 
     return df_labeled, df
 
+def thesisDeciderBatch(df,
+                  featureX_col,
+                  featureZ_col=None,
+                  nJudges_M=14,
+                  beta_X=1,
+                  beta_Z=1,
+                  add_epsilon=True,
+                  max_leniency_09=False):
+    '''Decider module | Non-independent batch decisions.
+
+    14 or 18 deciders depending on the max leniency. 
+
+    Fixed leniencies of .1, .2, ..., .7 or .9. Two per level'''
+
+    if max_leniency_09:
+        
+        nJudges_M = 18
+        
+        # Compute the number of subjects allocated for each judge.
+        nSubjects_N = int(df.shape[0] / nJudges_M)
+    
+        # Assign judge IDs as running numbering from 0 to nJudges_M - 1
+        df = df.assign(judgeID_J=np.repeat(range(0, nJudges_M), nSubjects_N))
+    
+        # Acceptance rates as specified above
+        acceptance_rates = np.array([.1, .2, .3, .4, .5, .6, .7, .8, .9] * 2)
+    
+    else:
+
+        # Compute the number of subjects allocated for each judge.
+        nSubjects_N = int(df.shape[0] / nJudges_M)
+    
+        # Assign judge IDs as running numbering from 0 to nJudges_M - 1
+        df = df.assign(judgeID_J=np.repeat(range(0, nJudges_M), nSubjects_N))
+    
+        # Acceptance rates as specified above
+        acceptance_rates = np.array([.1, .2, .3, .4, .5, .6, .7] * 2)
+        
+    # Replicate the rates so they can be attached to the corresponding judge ID.
+    df = df.assign(acceptanceRate_R=np.repeat(acceptance_rates, nSubjects_N))
+
+    if add_epsilon:
+        epsilon = np.sqrt(0.1) * npr.normal(size=df.shape[0])
+    else:
+        epsilon = 0
+
+    if featureZ_col is None:
+        probabilities_T = inverseLogit(beta_X * df[featureX_col] + epsilon)
+    else:
+        probabilities_T = inverseLogit(beta_X * df[featureX_col] +
+                                    beta_Z * df[featureZ_col] + epsilon)
+
+    df = df.assign(probabilities_T=probabilities_T)
+
+    # Sort by judges then probabilities in decreasing order
+    # Most dangerous for each judge are at the top.
+    df.sort_values(by=["judgeID_J", "probabilities_T"],
+                   ascending=False,
+                   inplace=True)
+
+    # Iterate over the data. Subject will be given a negative decision
+    # if they are in the top (1-r)*100% of the individuals the judge will judge.
+    # I.e. if their within-judge-index is under 1 - acceptance threshold times
+    # the number of subjects assigned to each judge they will receive a
+    # negative decision.
+    df.reset_index(drop=True, inplace=True)
+
+    df['decision_T'] = np.where((df.index.values % nSubjects_N) <
+                                ((1 - df['acceptanceRate_R']) * nSubjects_N),
+                                0, 1)
+
+    df_labeled = df.copy()
+
+    # Hide unobserved
+    df_labeled.loc[df.decision_T == 0, 'result_Y'] = np.nan
+
+    return df_labeled, df
+
+def thesisDeciderIndependent(df,
+                             featureX_col,
+                             featureZ_col=None,
+                             nJudges_M=14,
+                             beta_X=1,
+                             beta_Z=1,
+                             add_epsilon=True):
+    '''Decider module | Independent decisions.
+
+    14 deciders receiving 500 subjects each. 
+
+    Fixed leniencies of .1, .2, ..., .7. Two per level'''
+
+    # Compute the number of subjects allocated for each judge.
+    nSubjects_N = int(df.shape[0] / nJudges_M)
+
+    # Assign judge IDs as running numbering from 0 to nJudges_M - 1
+    df = df.assign(judgeID_J=np.repeat(range(0, nJudges_M), nSubjects_N))
+
+    # Acceptance rates as specified above
+    acceptance_rates = np.array([.1, .2, .3, .4, .5, .6, .7] * 2)
+
+    # Replicate the rates so they can be attached to the corresponding judge ID.
+    df = df.assign(acceptanceRate_R=np.repeat(acceptance_rates, nSubjects_N))
+
+    if add_epsilon:
+        epsilon = np.sqrt(0.1) * npr.normal(size=df.shape[0])
+    else:
+        epsilon = 0
+    
+    if featureZ_col is None:
+        probabilities_T = inverseLogit(beta_X * df[featureX_col] + epsilon)
+
+        # Compute the bounds straight from the inverse cumulative.
+        # Assuming X is N(0, 1) so Var(bX*X)=bX**2*Var(X)=bX**2.
+        df = df.assign(bounds=inverseCumulative(
+            x=df.acceptanceRate_R, mu=0, sigma=np.sqrt(beta_X**2)))
+    else:
+        probabilities_T = inverseLogit(beta_X * df[featureX_col] +
+                                    beta_Z * df[featureZ_col] + epsilon)
+
+        # Compute the bounds straight from the inverse cumulative.
+        # Assuming X and Z are i.i.d standard Gaussians with variance 1.
+        # Thus Var(bx*X+bZ*Z)= bX**2*Var(X)+bZ**2*Var(Z).
+        df = df.assign(bounds=inverseCumulative(
+            x=df.acceptanceRate_R, mu=0, sigma=np.sqrt(beta_X**2 + beta_Z**2)))
+
+    df = df.assign(probabilities_T=probabilities_T)
+
+    # Assign negative decision if the predicted probability (probabilities_T) is
+    # over the judge's threshold (bounds).
+    df = df.assign(decision_T=np.where(df.probabilities_T >= df.bounds, 0, 1))
+    
+    # Calculate the observed acceptance rates.
+    acceptance_rates = df.groupby('judgeID_J').mean().decision_T.values
+
+    # Replicate the rates so they can be attached to the corresponding judge ID.
+    df.acceptanceRate_R = np.repeat(acceptance_rates, nSubjects_N)
+
+    df_labeled = df.copy()
+
+    df_labeled.loc[df.decision_T == 0, 'result_Y'] = np.nan
+
+    return df_labeled, df
+
+def thesisDeciderRandom(df, nJudges_M=14, use_acceptance_rates=False):
+    '''Doesn't use any information about X and Z to make decisions.
+    
+    If use_acceptance_rates is False (default) then all decisions are positive
+    with probability 0.5. If True, probabilities will be sampled from 
+    U(0.1, 0.9) and rounded to tenth decimal place.'''
+
+
+    # Compute the number of subjects allocated for each judge.
+    nSubjects_N = int(df.shape[0] / nJudges_M)
+
+    # Assign judge IDs as running numbering from 0 to nJudges_M - 1
+    df = df.assign(judgeID_J=np.repeat(range(0, nJudges_M), nSubjects_N))
+
+    if use_acceptance_rates:
+        # Use fixed acceptance rates
+        acceptance_rates = np.array([.1, .2, .3, .4, .5, .6, .7] * 2)
+    else:
+        # No real leniency here -> set to 0.5.
+        acceptance_rates = np.ones(nJudges_M) * 0.5
+
+    # Replicate the rates so they can be attached to the corresponding judge ID.
+    df = df.assign(acceptanceRate_R=np.repeat(acceptance_rates, nSubjects_N))
+
+    df = df.assign(
+        decision_T=npr.binomial(n=1, p=df.acceptanceRate_R, size=df.shape[0]))
+
+    df_labeled = df.copy()
+
+    df_labeled.loc[df.decision_T == 0, 'result_Y'] = np.nan
+
+    return df_labeled, df
+
+def thesisDeciderBiased(df,
+                        featureX_col,
+                        featureZ_col=None,
+                        nJudges_M=14,
+                        beta_X=1,
+                        beta_Z=1,
+                        add_epsilon=True):
+    '''
+    Biased decider: If X > 1, then X <- X * 0.75. People with high X, 
+    get more positive decisions as they should. And if -2 < X -1, then 
+    X <- X + 0.5. People with X in [-2, 1], get less positive decisions 
+    as they should.
+    
+    '''
+
+    # If X > 1, then X <- X * 0.75. People with high X, get more positive
+    # decisions as they should
+    df = df.assign(biased_X=np.where(df[featureX_col] > 1, df[featureX_col] *
+                                     0.75, df[featureX_col]))
+
+    # If -2 < X -1, then X <- X + 0.5. People with X in [-2, 1], get less
+    # positive decisions as they should
+    df.biased_X = np.where((df.biased_X > -2) & (df.biased_X < -1) == 1,
+                           df.biased_X + 0.5, df.biased_X)
+
+    # Assert that every judge will have the same number of subjects.
+    assert df.shape[0] % nJudges_M == 0, "Can't assign subjets evenly!"
+
+    # Use quantile decider, but judge by the biased X.
+    df_labeled, df = thesisDeciderIndependent(df,
+                                             featureX_col='biased_X',
+                                             featureZ_col=featureZ_col,
+                                             nJudges_M=nJudges_M,
+                                             beta_X=beta_X,
+                                             beta_Z=beta_Z,
+                                             add_epsilon=add_epsilon)
+
+    return df_labeled, df
 
 def bernoulliDecider(df,
                     featureX_col,
@@ -794,7 +1014,18 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
     for i in range(nIter):
 
         # Split data
-        train, test_labeled = train_test_split(df_labeled, test_size=0.5)
+        #train, test_labeled = train_test_split(df_labeled, test_size=0.5)
+        
+        # Split data using judge IDs.
+        
+        ids = np.arange(7)
+        selected = ids + npr.choice([0, 7], 7)
+        
+        test_labeled = df_labeled[df_labeled.judgeID_J.isin(selected)]
+        train = df_labeled[~df_labeled.judgeID_J.isin(selected)]
+        
+        # Renew IDs
+        test_labeled.loc[:, 'judgeID_J'] = test_labeled.judgeID_J % 7
         
         # Assign same observations to unlabeled dat
         test_unlabeled = df_unlabeled.iloc[test_labeled.index.values]
@@ -830,12 +1061,12 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
         # Change this assignment if you want to use predictions as input to the
         # model.
         ###############################
-        dat = dict(D=1,
-                   N_obs=np.sum(observed),
-                   N_cens=np.sum(~observed),
-                   K=group_amount,
+        dat = dict(D=int(1),
+                   N_obs=int(np.sum(observed)),
+                   N_cens=int(np.sum(~observed)),
+                   K=int(group_amount),
                    sigma_tau=sigma_tau,
-                   M=len(set(df_unlabeled['judgeID_J'])),
+                   M=int(len(set(test_labeled['judgeID_J']))),
                    jj_obs=test_labeled.loc[observed, 'judgeID_J']+1,
                    jj_cens=test_labeled.loc[~observed, 'judgeID_J']+1,
                    kk_obs=kk_array[observed]+1,
@@ -847,40 +1078,70 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
                    y_obs=test_labeled.loc[observed, 'result_Y'].astype(int))
 
         # Do the sampling - Change this if you wish to use other methods.
-        fit = sm.sampling(data=dat, chains=5, iter=5000, control = dict(adapt_delta=0.9))
-                
-        pars = fit.extract()
+        # See also Stan website https://mc-stan.org for information on
+        # the prerequisites for reproducing the results.
+        #fit = sm.sampling(data=dat, chains=5, iter=6000, 
+        #                  control = dict(adapt_delta=0.99), verbose=True,
+        #                  seed=123)
+
+        # CMDstan sampling
+
+        fit = sm.sample(data=dat, chains=4, seed=123, warmup_iters=1500, 
+                        sampling_iters=4500, adapt_delta=0.975)
+
+        # Extract predictions
+        fit_colnames = fit.column_names
+
+        print("Colnames", fit.column_names)
+
+        pred_cols = [s for s in fit_colnames if 'y_est' in s]
+       
+        pars = fit.get_drawset(params=pred_cols)
         
+        fit.get_drawset(params=pred_cols)
+
+        print("Drawset:", fit.get_drawset())
+
+        process = psutil.Process(os.getpid())
+        print("Memory use after fit:", process.memory_info().rss)  # in bytes
         
         
-        plt.figure(figsize=(15,30))
-    
-        fit.plot();
-    
-        plt.savefig(save_name + '_stan_convergence_diagnostic_plot_' + str(i))
-        
-        plt.show()
         plt.close('all')
         gc.collect()
+        gc.collect()
     
-        print(fit, file=open(save_name + '_stan_fit_diagnostics_' + str(i) + '.txt', 'w'))
+        print(fit.diagnose(), file=open(save_name + '_stan_fit_diagnostics_' +
+              str(i) + '.txt', 'w'))
 
         # Bayes
         
         # Format matrix, each row is a sample of the posterior
         # columns are observations
                 
-        y_imp = np.ones((pars['y_est'].shape[0], test_labeled.shape[0]))
-        
+        #y_imp = np.ones((pars['y_est'].shape[0], test_labeled.shape[0]))
+        y_imp = np.ones((pars.shape[0], test_labeled.shape[0]))
+
         # Impute the unobserved with the estimated 
         # Reverse the binary coding to compute failures as sum. 0 == 0 = 1
-        y_imp[:, ~observed] = 1 - pars['y_est']
-        
+        #y_imp[:, ~observed] = 1 - pars['y_est']
+        y_imp[:, ~observed] = 1 - pars
+
         # Remove the variables to conserve memory
+        print("Memory use before deletion:", process.memory_info().rss)  # in bytes 
+        print("Size of pars before delete:", sys.getsizeof(pars))
+        print("Size of fit before delete:", sys.getsizeof(fit))
+
+        pars = None
+        fit = None
+
         del(pars)
         del(fit)
 
-	gc.collect()
+        gc.collect()
+        gc.collect()
+        
+        process = psutil.Process(os.getpid())
+        print("Memory use after deletion:", process.memory_info().rss)  # in bytes 
         
         # Impute the observed
         y_imp[:, observed] = 1 - test_labeled.loc[observed, 'result_Y']
@@ -916,10 +1177,10 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
     failure_rates[:, 2] = np.mean(f_rate_cont, axis=0)
     failure_rates[:, 3] = np.mean(f_rate_cf, axis=0)
 
-    failure_stds[:, 0] = np.std(f_rate_true, axis=0)
-    failure_stds[:, 1] = np.std(f_rate_label, axis=0)
-    failure_stds[:, 2] = np.std(f_rate_cont, axis=0)
-    failure_stds[:, 3] = np.std(f_rate_cf, axis=0)
+    failure_stds[:, 0] = np.std(f_rate_true, axis=0, ddof=1)
+    failure_stds[:, 1] = np.std(f_rate_label, axis=0, ddof=1)
+    failure_stds[:, 2] = np.std(f_rate_cont, axis=0, ddof=1)
+    failure_stds[:, 3] = np.std(f_rate_cf, axis=0, ddof=1)
 
     x_ax = np.arange(0.1, 0.9, 0.1)
 
@@ -930,6 +1191,7 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
     
     line_styles = ['--', ':', '-.', '-']
 
+    # General plot: Failure rate vs. Acceptance rate
     for i in range(failure_rates.shape[1]):
         plt.errorbar(x_ax,
                      failure_rates[:, i],
@@ -938,7 +1200,6 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
                      linestyle=line_styles[i],
                      yerr=failure_stds[:, i])
 
-    #plt.title('Failure rate vs. Acceptance rate')
     plt.xlabel('Acceptance rate')
     plt.ylabel('Failure rate')
     plt.legend()
@@ -947,6 +1208,39 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
     plt.savefig(save_name + '_all')
     
     plt.show()
+    plt.close('all')
+    gc.collect()
+    gc.collect()
+
+    # Plot error of the methods (contraction and counterfactual)
+    # w.r.t True evaluation
+    for i in range(2, failure_rates.shape[1]):
+    
+        error = np.abs(failure_rates[:, 0] - failure_rates[:, i])
+        
+        plt.errorbar(x_ax,
+                     error,
+                     label=labels[i],
+                     c=colours[i],
+                     linestyle=line_styles[i],
+                     yerr=failure_stds[:, i])
+
+    plt.xlabel('Acceptance rate')
+    plt.ylabel('Error w.r.t. True evaluation')
+    plt.legend()
+    plt.grid()
+    
+    plt.savefig(save_name + '_all_err')
+    
+    plt.show()
+
+    plt.close('all')
+    gc.collect()
+    gc.collect()
+
+    print("\Single runs:")
+    print(np.array2string(f_rate_true, f_rate_label, f_rate_cont, f_rate_cf,
+                          formatter={'float_kind':lambda x: "%.7f" % x}))
 
     print("\nFailure rates:")
     print(np.array2string(failure_rates, formatter={'float_kind':lambda x: "%.5f" % x}))
@@ -967,271 +1261,145 @@ def perfComp(dgModule, deciderModule, title, save_name, model_type=None,
                 titles=labels)
 
 # Compile stan model
-sm = pystan.StanModel(file=stan_code_file_name)
+sm = Model(stan_file=stan_code_file_name)
+sm.compile()
 
-if which == 1:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Decision-maker in the data and model: random and random")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: randomDecider(x, nJudges_M=M_sim, use_acceptance_rates=True)
+process = psutil.Process(os.getpid())
+print("Memory use before analysis:", process.memory_info())  # in bytes 
 
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="fully_random", 
-        fit_with_Z=False
-    )
+if which == 0:
+    print("\nWith unobservables (Bernoullian outcome + batch decisions)")
+    print("\nFixed leniency levels")
     
-plt.close('all')
-gc.collect()
+    dg = lambda : bernoulliDGWithUnobservables(N_total=7000)
 
-if which == 2:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Decision-maker in the data and model: random and y ~ x")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: randomDecider(x, nJudges_M=M_sim, use_acceptance_rates=True)
+    decider = lambda x: thesisDeciderBatch(
+        x, featureX_col="X", featureZ_col='Z', beta_X=1, beta_Z=1)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Result from Bernoulli and batch decisions",
+        figure_path + "sl_dependent",
         model_type="lr", 
-        fit_with_Z=False
+        fit_with_Z=False, nIter=1
     )
 
-if which == 3:
+if which == 1:
     print("\nWith unobservables (Bernoullian outcome + independent decisions)")
+    print("\nFixed leniency levels")
     
-    print("Decision-maker in the data and model: random and y ~ x + z")
+    print("\nDecision-maker in the data and model: y ~ x + z and y ~ x")
 
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
+    dg = lambda: bernoulliDGWithUnobservables(N_total=7000)
 
-    decider = lambda x: randomDecider(x, nJudges_M=M_sim, use_acceptance_rates=True)
+    decider = lambda x: thesisDeciderIndependent(
+        x, featureX_col="X", featureZ_col='Z', beta_X=1, beta_Z=1)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Result from Bernoulli and independent decisions",
+        figure_path + "sl_independent",
         model_type="lr", 
-        fit_with_Z=True
-    )
-
-if which == 4:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Decision-maker in the data and model: y ~ x and random")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col=None, nJudges_M=M_sim, beta_X=1, beta_Z=1)
-
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="fully_random", 
         fit_with_Z=False
     )
-
-if which == 5:
+    
+if which == 2:
     print("\nWith unobservables (Bernoullian outcome + independent decisions)")
     
-    print("Decision-maker in the data and model: y ~ x and y ~ x")
+    print("Decision-maker in the data and model: random and y ~ x")
 
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
+    dg = lambda: bernoulliDGWithUnobservables(N_total=7000)
 
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col=None, nJudges_M=M_sim, beta_X=1, beta_Z=1)
+    decider = lambda x: thesisDeciderRandom(x, nJudges_M=M_sim, use_acceptance_rates=True)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Bernoulli + random decisions, with unobservables",
+        figure_path + "sl_bernoulli_random_decisions",
         model_type="lr", 
         fit_with_Z=False
     )
     
-if which == 6:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
+if which == 3:
+    print("\nWith unobservables (Bernoullian outcome + batch decisions)")
+    print("\nFixed leniency levels until 0.9")
     
-    print("Decision-maker in the data and model: y ~ x and y ~ x + z")
+    dg = lambda : bernoulliDGWithUnobservables(N_total=9000)
 
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col=None, nJudges_M=M_sim, beta_X=1, beta_Z=1)
+    decider = lambda x: thesisDeciderBatch(
+        x, featureX_col="X", featureZ_col='Z', beta_X=1, beta_Z=1,
+        max_leniency_09=True)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Result from Bernoulli and batch decisions",
+        figure_path + "sl_dependent_r_max_09",
         model_type="lr", 
-        fit_with_Z=True
-    )
-    
-if which == 7:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Decision-maker in the data and model: y ~ x + z and random")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col='Z', nJudges_M=M_sim, beta_X=1, beta_Z=1)
-
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="fully_random", 
         fit_with_Z=False
     )
 
-if which == 8:
+if which == 4:
     print("\nWith unobservables (Bernoullian outcome + independent decisions)")
+    print("\nFixed leniency levels")
     
-    print("Decision-maker in the data and model: y ~ x + z and y ~ x")
+    print("\nDecision-maker in the data and model: y ~ x + z and y ~ x")
 
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
+    dg = lambda: bernoulliDGWithUnobservables(N_total=7000)
 
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col='Z', nJudges_M=M_sim, beta_X=1, beta_Z=1)
+    decider = lambda x: thesisDeciderBiased(
+            x, featureX_col='X', featureZ_col='Z', beta_X=1, beta_Z=1)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Result from Bernoulli and biased decisions",
+        figure_path + "sl_biased",
         model_type="lr", 
         fit_with_Z=False
     )
     
-if which == 9:
+if which == 5:
     print("\nWith unobservables (Bernoullian outcome + independent decisions)")
+    print("\nFixed leniency levels")
     
-    print("Decision-maker in the data and model: y ~ x + z and y ~ x + z")
+    print("\nDecision-maker in the data and model: y ~ x + z and y ~ x")
+    print("\nBeta_z = 3")
 
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
+    dg = lambda: bernoulliDGWithUnobservables(N_total=7000, beta_Z=3)
 
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col='Z', nJudges_M=M_sim, beta_X=1, beta_Z=1)
+    decider = lambda x: thesisDeciderIndependent(
+        x, featureX_col="X", featureZ_col='Z', beta_X=1, beta_Z=3)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Result from Bernoulli and independent decisions",
+        figure_path + "sl_independent_beta_z_3",
         model_type="lr", 
-        fit_with_Z=True
-    )
-    
-if which == 10:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Decision-maker in the data and model: biased and random")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: biasDecider(
-        x, featureX_col="X", featureZ_col='Z', nJudges_M=M_sim, beta_X=1, beta_Z=1)
-
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="fully_random", 
         fit_with_Z=False
     )
 
-if which == 11:
+if which == 6:
     print("\nWith unobservables (Bernoullian outcome + independent decisions)")
+    print("\nFixed leniency levels")
     
-    print("Decision-maker in the data and model: biased and y ~ x")
+    print("\nDecision-maker in the data and model: y ~ x + z and y ~ x")
+    print("\nBeta_z = 5")
 
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
+    dg = lambda: bernoulliDGWithUnobservables(N_total=7000, beta_Z=5)
 
-    decider = lambda x: biasDecider(
-        x, featureX_col="X", featureZ_col='Z', nJudges_M=M_sim, beta_X=1, beta_Z=1)
+    decider = lambda x: thesisDeciderIndependent(
+        x, featureX_col="X", featureZ_col='Z', beta_X=1, beta_Z=5)
 
     perfComp(
         dg, lambda x: decider(x),
         "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
+        "Result from Bernoulli and independent decisions",
+        figure_path + "sl_independent_beta_z_5",
         model_type="lr", 
         fit_with_Z=False
     )
-
-if which == 12:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Decision-maker in the data and model: biased and y ~ x + z")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: biasDecider(
-        x, featureX_col="X", featureZ_col='Z', nJudges_M=M_sim, beta_X=1, beta_Z=1)
-
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="lr", 
-        fit_with_Z=True
-    )
-    
-if which == 13:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Fewer subjects per decision-maker, from 500 to 100. Now N_total =", N_sim / 5)
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=int(N_sim / 5))
-
-    decider = lambda x: quantileDecider(
-        x, featureX_col="X", featureZ_col=None, nJudges_M=M_sim, beta_X=1, beta_Z=1)
-
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="lr", 
-        fit_with_Z=True
-    )
-    
-if which == 14:
-    print("\nWith unobservables (Bernoullian outcome + independent decisions)")
-    
-    print("Now R ~ Uniform(0.1, 0.4)")
-
-    dg = lambda: bernoulliDGWithUnobservables(N_total=N_sim)
-
-    decider = lambda x: quantileDecider(x, featureX_col="X", featureZ_col=None, 
-                                        nJudges_M=M_sim, beta_X=1, beta_Z=1,
-                                        leniency_upper_limit=0.4)
-
-    perfComp(
-        dg, lambda x: decider(x),
-        "Fluctuation of failure rate estimates across iterations\n" +
-        "Bernoulli + independent decisions, without unobservables",
-        figure_path + "sl_bernoulli_independent_without_Z",
-        model_type="lr", 
-        fit_with_Z=True
-    )
diff --git a/figures/sl_thesis_all.png b/figures/sl_thesis_all.png
new file mode 100644
index 0000000000000000000000000000000000000000..db658d1f570fbd7b7d2722d14f1b72eeb82af1ee
GIT binary patch
literal 40059
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

literal 0
HcmV?d00001

diff --git a/figures/sl_thesis_all_err.png b/figures/sl_thesis_all_err.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fdb91b6deb372335eb45414b8f3e9ace243f263
GIT binary patch
literal 29568
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%0D!;0KQ<sf20%PFV2Id2
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

literal 0
HcmV?d00001

diff --git a/figures/sl_thesis_bZ3__all.png b/figures/sl_thesis_bZ3__all.png
new file mode 100644
index 0000000000000000000000000000000000000000..fab0e86c3a8ed6d7d221ac46cefb7a97e2ec9f94
GIT binary patch
literal 44599
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
VjvTNYtHXaQ|FYU4$$s1Z{{sE)F@pdA

literal 0
HcmV?d00001

diff --git a/figures/sl_thesis_bZ3__all_err.png b/figures/sl_thesis_bZ3__all_err.png
new file mode 100644
index 0000000000000000000000000000000000000000..da630885792a02b597893db9f28e5878941546ca
GIT binary patch
literal 30993
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

literal 0
HcmV?d00001

diff --git a/viitteet.bib b/viitteet.bib
index b51b30e..62a4dae 100644
--- a/viitteet.bib
+++ b/viitteet.bib
@@ -8,14 +8,14 @@
  location = {Halifax, NS, Canada},
  pages = {275--284},
  numpages = {10},
- url = {http://doi.acm.org.libproxy.helsinki.fi/10.1145/3097983.3098066},
+ url = {http://doi.acm.org/10.1145/3097983.3098066},
  doi = {10.1145/3097983.3098066},
  acmid = {3098066},
  publisher = {ACM},
  address = {New York, NY, USA},
  keywords = {evaluating machine learning algorithms, selective labels, unmeasured confounders, unobservables},
  language = {finnish}
-} 
+}
 
 @Article{pearl10,
    Author="Judea Pearl",
@@ -150,7 +150,7 @@
   language={finnish}
 } 
 
-@booklet{tira,
+@booklet{kivinen18,
   author   = "Jyrki Kivinen",
   title     = "Tietorakenteet ja algoritmit",
   year      = "2018",
@@ -168,5 +168,43 @@
  journal={Journal of Machine Learning Research},
  volume={12},
  pages={2825--2830},
- year={2011}
-}
\ No newline at end of file
+ year={2011},
+ language={finnish}
+}
+
+@article{willmott05,
+  title={Advantages of the mean absolute error (MAE) over the root mean square error (RMSE) in assessing average model performance},
+  author={Willmott, Cort J and Matsuura, Kenji},
+  journal={Climate research},
+  volume={30},
+  number={1},
+  pages={79--82},
+  year={2005},
+  language={finnish}
+}
+
+@article{stan,
+   author = {Bob Carpenter and Andrew Gelman and Matthew Hoffman and Daniel Lee and Ben Goodrich and Michael Betancourt and Marcus Brubaker and Jiqiang Guo and Peter Li and Allen Riddell},
+   title = {Stan: A Probabilistic Programming Language},
+   journal = {Journal of Statistical Software, Articles},
+   volume = {76},
+   number = {1},
+   year = {2017},
+   keywords = {probabilistic programming; Bayesian inference; algorithmic differentiation; Stan},
+   abstract = {Stan is a probabilistic programming language for specifying statistical models. A Stan program imperatively defines a log probability function over parameters conditioned on specified data and constants. As of version 2.14.0, Stan provides full Bayesian inference for continuous-variable models through Markov chain Monte Carlo methods such as the No-U-Turn sampler, an adaptive form of Hamiltonian Monte Carlo sampling. Penalized maximum likelihood estimates are calculated using optimization methods such as the limited memory Broyden-Fletcher-Goldfarb-Shanno algorithm. Stan is also a platform for computing log densities and their gradients and Hessians, which can be used in alternative algorithms such as variational Bayes, expectation propagation, and marginal inference using approximate integration. To this end, Stan is set up so that the densities, gradients, and Hessians, along with intermediate quantities of the algorithm such as acceptance probabilities, are easily accessible. Stan can be called from the command line using the cmdstan package, through R using the rstan package, and through Python using the pystan package. All three interfaces support sampling and optimization-based inference with diagnostics and posterior analysis. rstan and pystan also provide access to log probabilities, gradients, Hessians, parameter transforms, and specialized plotting.},
+   issn = {1548-7660},
+   pages = {1--32},
+   doi = {10.18637/jss.v076.i01},
+   url = {https://www.jstatsoft.org/v076/i01},
+   language={finnish}
+}
+
+@manual{compas, 
+  title={Practitioner’s Guide to COMPAS Core}, 
+  url={https://assets.documentcloud.org/documents/2840784/Practitioner-s-Guide-to-COMPAS-Core.pdf}, 
+  organization	= {Northpointe},
+  year={2015}, 
+  month={maaliskuu},
+  note = {viitattu 4.10.2019},
+  language={finnish}
+} 
\ No newline at end of file
-- 
GitLab