Convert image in greyscale to other color levels

A very quick and conveniet way to convert greyscale images to other color values is by using the “+level-colors” operator in ImageMagic. As a simple example, imagine the image below has to be converted from greyscale (black/white) to blue/yellow.

quetelet(Note: The person in the picture is Adolphe Quetelet: astronomer, statistician and sociologist. One of the very first PhD graduates of Ghent University)

The conversion can be done with the simple command below:

convert quetelet.jpg +level-colors darkblue,yellow quetelet2.png

And gives the following result:q

Advertenties

Cut flv video/movie and convert to mp4 without quality loss using ffmpeg

This is what worked for me:

Extract part of flash video without quality loss:

ffmpeg -ss 330 -t 21 -i coolvid.flv -qscale 0 coolvidpt.flv
  • -ss 330 :: start at second 330
  • -t 21 :: extract 21 seconds
  • -qscale 0 :: best possible quality

Convert flash file to mp4 without quality loss:

ffmpeg -i coolvidpt.flv -strict -2 -qscale 0 coolvidpt.mp4
  • -strict -2 :: because an experimental codec is used
  • -qscale 0 :: best possible quality

Van desinfografiek tot infografiek: Over- of ondervertegenwoordiging van politieke partijen in De Zevende Dag

Een tweetal weken geleden las ik de volgende tweet die me nogal intrigeerde:

De tweet gaat over hoe vaak de verschillende Vlaamse politieke partijen in de uitzendingen van De Zevende Dag aan bod komen. De zogenaamde infografiek die aan de tweet gelinkt werd is de volgende:

infografiekDe reden dat deze grafiek me zo intrigeerde was niet de politieke boodschap die erachter schuil gaat, maar wel de ongelooflijke complexiteit van de infografiek zelf.

De grafiek geeft een soort heatmap weer die aangeeft welke politieke partijen over- of ondergerepresenteerd zijn ten opzichte van andere partijen rekening houdend met hun verkiezingsscore voor de kamer in 2010. Echter, de veelheid aan getallen, tekst en formules maken dat het niet evident is om de boodschap snel op te pikken. Wat mij betreft is dit eerder een desinfografiek…

Eigenlijk is de hele infografiek gebaseerd op slechts een beperkt aantal datapunten. Ten eerste: voor elke politieke partij de verkiezingsscore voor de kamer in 2010. Ten tweede: voor elke partij hoe vaak ze te gast waren in De Zevende Dag tussen 1 september en 27 oktober 2013 (MO: deze data haalde ik uit de infografiek van @hoegin).

CD&V Groen LDD N-VA Open Vld PVDA SP.A VB
Verkiezingen 17.6% 7.1% 3.7% 28.2% 14% 1.3% 15% 12.6%
7dag 18 8 1 9 13 0 13 6

De auteur van de tweet gaat ervan uit dat het aantal optredens van politieke partijen in De Zevende Dag in verhouding zou moeten staan tot hun verkiezingsscore. Als dit niet het geval is, dan ziet de auteur dit als over- of ondervertegenwoordiging van die partijen (merk op dat deze visie niet perse de mijne is).

Wat zijn de grootste problemen met de infografiek?

  1. De oorspronkelijke data bevat 2 datapunten voor elk van de 8 partijen, maar via een ingewikkelde fomule worden van die 16 datapunten maar liefst 8×8=64 datapunten gemaakt.
  2. Het groene en rode deel van de infografiek bevat eigenlijk dezelfde informatie (het groene deel is het de inverse van het rode deel). Het presenteren van zowel de groene als de rode data zorgt dus enkel voor verwarring en niet voor extra inzicht.
  3. De gebruikte formule berekent eigenlijk de ratio van twee ratio’s. Dit bemoeilijkt de interpretatie van de cijfergegevens enorm.
  4. De grenzen van de kleurencodes in de legende zijn arbitrair.

Een veel sterkere visuele voorstelling van deze data is de volgende:

7dedagDeze grafiek geeft op een veel eenvoudigere manier de boodschap weer die de tweet wilde meegeven. Namelijk dat sommige partijen over- of ondervertegenwoordigd zijn in De Zevende Dag ten opzichte van hun stemmenaatal voor de kamer in 2010. Bijvoorbeeld, Groen kwam 66% meer aan bod dan dat men op basis van hun stemmenaantal zou verwachten.

De grafiek maakt in één oogopslag duidelijk welke partijen over- en ondervertegenwoordigd zijn en in welke mate bepaalde partijen over- of ondervertegenwoordigd zijn. Geen veelheid aan cijfergegevens, complexe formules of ingewikkelde kleurlegendes die de aandacht van de boodschap afleiden.

Belangrijk hierbij te vermelden is dat dat de steekproef hier relatief klein is (N=68 tv-optredens gemeten over een periode van minder dan 2 maanden). Hierdoor is het niet abnormaal dat (zeker voor de kleine partijen) er een extreme over- of ondervertegenwoordiging waargenomen wordt (bvb. PVDA). Om de betrouwbaarheid van het patroon dat in de grafiek naar boven komt te verhogen, zouden gegevens over een langere periode verzameld moeten worden.

Waarom professoren een giscorrectie willen en studenten niet

Deze week was er heel wat te doen rond giscorrectie. Giscorrectie is een manier om punten te geven bij multiple choice examens. Kort gezegd komt het erop neer dat studenten punten krijgen voor correcte antwoorden, maar ook punten verliezen bij foutieve antwoorden.

UGent professor onderwijskunde Martin Valcke legde deze week in het Radio 1 programma Hautekiet uit waarom giscorrectie niet goed werkt. Dit werd opgepikt door andere media en sommige kranten (i.e. De Morgen) maakten daar dan van dat “eerlijke studenten jarenlang benadeeld werden” door het systeem. Vandaag is dan weer te lezen in De Standaard dat de onderwijsraad van de UGent de aanbeveling doet het systeem af te schaffen.

In deze blogpost wil ik kort aantonen waarom er zoiets als giscorrectie bestaat en waarom veel studenten er niet van houden. Verder beschrijf ik ook een aantal voorgestelde alternatieven.

Waarom giscorrectie?

Laten we het voorbeeld van een meerkeuze examen nemen met 20 vragen die telkens 4 antwoordmogelijkheden hebben. Voor elke vraag is er slechts 1 antwoord correct.

Het probleem met dit soort examens is dat wie voor elke vraag zou gokken (hiermee wordt bedoeld dat de student geen enkel idee heeft welke antwoordmogelijkheid correct is) toch telkens een kans van 1/4 heeft om juist te antwoorden. Stel dat met elke vraag 1 punt te verdienen is (dus maximaal kan men 20/20 halen), dan ziet de kans voor elke mogelijke uitkomst er als volgt uit.

plot1Een gokkende student heeft dus ongeveer 20% kans om 5/20 te halen voor een examen waar hij of zij helemaal niets van kende. De kans om te slagen (10 of meer op 20) ligt iets hoger dan 1%.

Wanneer een student 5 vragen zeker weet en de overige 15 vragen gaat gokken (bvb, wanneer de student slechts 1/4 van de cursus blokt), dan ziet de kansverdeling er als volgt uit:

plot2Merk op dat de student in dit geval al meer dan 30% kans heeft om te slagen en ongeveer 60% kans heeft om minstens een delibereerbaar resultaat te halen (8 of meer op 20).

Professoren willen natuurlijk niet dat studenten kunnen slagen zonder dat ze de leerstof voldoende beheersen en het systeem van giscorrectie probeert daar iets aan te doen.

Hoe werkt giscorrectie?

Bij giscorrectie krijgt men 1 punt voor een correct antwoord, maar verliest men een aantal punten bij een foutief antwoord. Hoeveel punten men verliest is afhankelijk van het aantal keuzemogelijkheden. Bij 4 keuzemogelijkheden zal men 1/(4-1)=1/3 punten verliezen. Bij 5 keuzemogelijkheden zal dit 1/4 zijn, enzovoort. Op deze manier is de verwachte uitkomst van een gok steeds 0.

Wat heeft dit voor gevolg voor de gokkende student? De kansen op elke mogelijke examenscore zijn weergegeven in onderstaande grafiek:

plot3Onmiddellijk wordt duidelijk dat de kans om te slagen voor deze gokkende student enorm verkleind is. Nu heeft hij of zij meer dan 60% kans om gewoon 0 te krijgen voor dat examen. De kans om ten minste een delibereerbaar resultaat (8 of meer op 20) te halen wanneer hij of zij 5 vragen weet en de rest gokt is gedaald van meer dan 60% tot minder dan 15% (m.o. dit is niet af te lezen op bovenstaande grafiek).

Waarom vinden velen giscorrectie ‘moeilijk’?

Bij een meerkeuze examen zonder giscorrectie is het advies voor de studenten eenvoudig: weet je het antwoord, geef dan het correcte antwoord; wanneer ze het antwoord niet weten dan moeten ze gokken. Immers, er is steeds een kans van 1/4 (bij 4 keuzemogelijkheden) om toch het correcte antwoord aan te duiden.

Bij giscorrectie ligt dit anders. Hier hangt het advies voor de studenten af van het aantal antwoordmogelijkheden waartussen ze nog twijfelen. Hoe meer antwoordmogelijkheden de student kan elimineren, hoe meer het loont om te gokken tussen de overgebleven antwoordmogelijkheden. Bijvoorbeeld:

Als een student echt niet weet welk van de 4 antwoordmogelijkheden correct is, dan heeft gokken geen zin. Immers, in dat geval is er 25% kans om correct te antwoorden (en 1 punt te krijgen), maar er is 75% kans om een verkeerd antwoord te kiezen (en 1/3 punt te verliezen). De verwachte uitkomst bij gokken is 0 (d.w.z, indien je altijd zou gokken in deze situatie, is de verwachte score 0):

(0.25 \times 1) + (0.75 \times -1/3) = 0

Als een student 1 antwoordmogelijkheid met zekerheid kan elimineren, dan veranderen de zaken. De kans om correct te gokken en 1 punt te krijgen wordt nu 1/3, terwijl de kans om verkeerd te gokken en 1/3 punt te verliezen nu 2/3 is geworden. De verwachte uitkomst in deze situatie is dan 0.11 (d.w.z., indien je altijd zou gokken in deze situatie, is de verwachte score per vraag ongeveer 0.11):

(0.33 \times 1) + (0.66 \times -1/3) = 0.11

Als een student 2 antwoordmogelijkheden met zekerheid kan elimineren, dan is er nog meer reden om te gokken tussen de overblijvende opties. De verwachte waarde wordt dan immers 0.34 (d.w.z., indien je altijd zou gokken in deze situatie, is de verwachte score per vraag ongeveer 0.34):

(0.5 \times 1) + (0.5 \times -1/3) = 0.34

Het goede aan giscorrectie is dus dat hoe beter een student de vraag kan oplossen (door antwoordmogelijkheden te elimineren), hoe hoger de verwachte punten hij of zij zal krijgen. Het probleem is dat veel studenten moeilijkheden hebben met bovenstaande berekeningen. Al kunnen die berekeningen eigenlijk samengevat worden als: “gok tussen de overblijvende mogelijkheden zodra je 1 optie kan elimineren”.

Controverse bij giscorrectie

Prof. dr. Martin Valcke heeft het in Schamper over de nadelen van giscorrectie. Het al dan niet bereid zijn tot gissen wordt niet enkel ingegeven door bovenstaande berekeningen, maar eveneens door persoonlijkheidskenmerken. Het meest bekende voorbeeld is wellicht dat jongens sneller gokken dan meisjes. Een andere argument tegen giscorrectie is dat het extra stress geeft aan de studenten die andere evaluatievormen niet of minder veroorzaken. Veel heeft te maken met loss-aversion, namelijk het veel meer vermijden van mogelijke verliezen eerder dan het nastreven van mogelijke winsten.

Alternatieven voor giscorrectie

In een recent artikel in Schamper worden een aantal alternatieven besproken. Eén daarvan is simpelweg meer vragen stellen met meer antwoordmogelijkheden. In de eerste grafiek van deze post werd de kansverdeling gegeven bij 20 meerkeuzevragen met 4 antwoordmogelijkheden. Hieronder zie je wat de kansverdeling is bij 80 meerkeuzevragen met 4 antwoordmogelijkheden.

plot5Op deze grafiek is te zien dat studenten die op alle vragen gokten nog steeds meest kans hebben om ongeveer 5/20 te halen, maar nu is de spreiding rond deze verwachtte uitkomst wel veel kleiner geworden. Simpelweg toevoegen van vragen zorgt er dus (onder invloed van de wet van de grote aantallen) dat het resultaat van gokkers dichter bij 5/20 (i.e. de verwachte waarde) gaat liggen.

Wanneer we het aantal antwoordmogelijkheden gaan uitbreiden ziet de kansverdeling er nog anders uit. Hier het voorbeeld van 20 vragen met telkens 8 (i.p.v. 4) antwoordmogelijkheden waarbij 1 correct is.

plot6In dit geval wordt de verwachte waarde wel kleiner (e.g. de meest voorkomende score van de gokkers is gedaald van 5/20 naar 2/20), maar is er nog steeds een vrij grote spreiding over de scores van de gokkers.

Het combineren van veel vragen met veel antwoordmogelijkheden geeft dan onderstaande kansverdeling (gebaseerd op 80 examenvragen met elk 8 mogelijke antwoorden waarvan er slechts 1 correct is).

plot7Op bovenstaande grafiek zie je dat het combineren van veel vragen met veel antwoordmogelijkheden leidt tot een lage verwachte waarde met een kleine spreiding errond. De vraag blijft echter of deze aanpak praktisch haalbaar is. Vaak is het voor examinatoren niet evident om meerdere plausible antwoordmogelijkheden te geven zonder te vervallen in dubbelzinnige antwoordmogelijkheden als “niet meer dan 4 van de andere antwoordmogelijkheden zijn foutief”.

Een ander (en wat mij betreft te verkiezen) alternatief is de studenten te laten starten met een negatief puntenaantal. Deze methode wordt ook wel standard setting genoemd. Hoe sterk negatief de startpunten moeten zijn, hangt af van het aantal vragen en het aantal antwoordmogelijkheden. Bij 20 vragen met telkens 4 antwoordmogelijkheden zou dit -5 zijn (namelijk, -20/4). Studenten krijgen dan 20/(20-4)=1.25 punt voor elk correct antwoord en 0 punten voor elk verkeerd antwoord. Dit leidt tot onderstaande kansverdeling.

plot4Merk op dat deze identiek is aan de kansverdeling bij de giscorrectie. Merk ook op dat in dit geval de studenten eveneens ‘verplicht’ worden om te gokken. Alleen hoeft men hier niet beredeneerd te gokken, want men kan er alleen bij winnen.

(toevoeging 17/10/2013)
Merk eveneens op dat het bij standard setting nodig is om 12 van de 20 vragen correct te beantwoorden om te slagen (en dus 10/20 te halen). Dit komt omdat de methode ervan uitgaat dat elke student gokt op alle vragen die hij of zij niet weet en hiervoor dus gecorrigeerd moet worden.

Wie 10 van de 20 vragen kent en de rest gokt heeft met deze methode ongeveer 76% kans om minstens 10/20 te halen. Wie 11 van de 20 vragen correct invult en de rest gokt heeft ongeveer 93% kans om minstens te slagen. Wie tenslotte 12 van de 20 vragen correct beantwoordt en de rest gokt is zeker om minstens 10/20 te halen.

Conclusie

  • Het is normaal dat er een correctie gebeurt bij meerkeuzevragen. Immers, zonder deze correctie kunnen studenten die de leerstof onvoldoende beheersen te gemakkelijk slagen.
  • Giscorrectie is wel eerlijk, maar vereist een zekere basiskennis over het nemen van beslissingen onder onzekerheid, zonder zich te laten beïnvloeden door loss-aversion. Niet alle studenten kunnen hier even goed mee overweg.
  • Het idee dat giscorrectie studenten “verplicht om te gokken” is niet correct. Men kan wel betere punten halen door beredeneerd te gokken.
  • Een student die niet wil gokken bij een examen met giscorrectie zal slagen indien hij of zij minstens de helft van de vragen correct kan beantwoorden.
  • Bij de alternatieven voor giscorrectie wordt gokken mogelijk nog veel meer gestimuleerd dan bij giscorrectie. Men heeft immers geen punten te verliezen bij een verkeerde gok.
  • Standard setting heeft als voordeel dat het eenvoudig uit te leggen is en tegelijk ervoor zorgt dat wie de leerstof onvoldoende beheerst weinig kans op slagen heeft.
  • Standard setting heeft als nadeel dat studenten meer dan de helft van de vragen correct moeten beantwoorden om minstens de helft van de punten te behalen.
  • Voor wie de leestof goed beheerst is er geen verschil tussen al dan niet giscorrectie. Het belang van ‘al dan niet giscorrectie’ wordt groter naarmate de student de leerstof minder goed kent en dus meer twijfelt.

Manually mount SD card in Linux

Before mounting the SD card, make sure you have a ‘free’ directory where you want to mount the SD card. If you do not have such a mountpoint, you should create one. For example:

mkdir ~/mymountpoint

Plug in your SD card to the SD card reader of your pc or laptop and issue the following comand:

lsblk -f

Copy the UUID (e.g., 6fcc-a123) of the device that refers to your SD card.

Now you can mount your SD card with the following command:

sudo mount -U 6fcc-a123 ~/mymountpoint

Beforce disconnecting your SD card, you should unmount it:

sudo umount ~/mymountpoint

Natuurlijke variantie en studentenaantallen

Deze post komt er naar aanleiding van het jaarlijks terugkerend fenomeen van het (over)analyseren van de inschrijvingsaantallen in de verschillende richtingen van de verschillende universiteiten en hogescholen van ons land. In de traditionele media verschijnen jaarlijks artikels met titels als: “Economie studeren steeds populairder“, of “Opleiding leerkracht opnieuw populair” of “Vlaamse student valt voor chemie“.

Wat ik in deze post graag duidelijk wil maken is dat veel van die conclusies voorbarig zijn en vaak weinig zinvol zijn. Als mens hebben we de neiging om (vaak onterecht) overal oorzakelijke verbanden te willen zien. Winnaar ‘nobelprijs economie’ Kahneman (in Thinking Fast and Slow) verwoordt het als volgt:

“We are far too willing to reject the belief that much of what we see in life is random.”

Als voorbeeld neem ik de voorlopige studentenaantallen Psychologie & Pedagogie aan de UGent omdat die het onderwerp van discussie waren op twitter (die ondertussen deels weer verwijderd is, dus geen linkje). Via de website van de UGent kon men tot dit weekend grafieken opvragen (nu zijn ze enkel nog beschikbaar voor personeel). Een voorbeel van zo’n grafiek hieronder:

dat_withOp de horizontale as zien we de dagen sinds de start van de inschrijvingen, op de vertikale as zien we het cummulatieve aantal studenten ingeschreven aan de faculteit Psychologie en Pedagogie. Sommigen besluiten hieruit dat de opleidingen aan die facutleit aan populariteit ingeboet hebben in vergelijking met het jaar daarvoor (en geven hiervoor allerhande redenen aan, b.v. ‘de economische crisis’).

Vraag is: kunnen we dit wel besluiten op basis van deze data?

Om deze vraag te beantwoorden heb ik de data gemodelleerd alsof ze afkomstig was van een Poisson process. Dit is hetzelfde model dat gebruikt werd om de effecten van de speedy-pass in Walibi mee te evalueren. Een Poisson process wordt gekenmerkt door een parameter die, in dit geval, weergeeft hoeveel studenten zich gemiddeld komen inschrijven op 1 dag (aan de faculteit in kwestie). Dit is de ‘rate’ parameter.

Als we die parameter nu gaan schatten op onze data en die blijkt ‘significant’ hoger te zijn voor 2012 dan voor 2013, dan zouden we kunnen besluiten dat de evolutie van de inschrijvingen dit jaar lager ligt dan het jaar voordien. Maar is dit ook wat we vinden?

hyptestHierboven zien we het resultaat van een Bayesiaanse hypothesetest. De gele histogram geeft de posterior verdeling van het verschil 2012-2013 weer. De meeste massa (kans) komt op positieve waarden te liggen (d.w.z. dat studenten in 2012 inderdaad in grotere getale kwamen opdagen dan in 2013). Echter, de vertikale blauwe strepen geven de Bayesiaanse betrouwbaarheidsintervallen weer en die geven aan dat we niet met grote zekerheid kunnen zeggen dat 2013 verschillend is van 2012 (het getal 0 ligt in het interval). Er is zelfs bijna 7% kans dat de rate in 2013 eigenlijk hoger is dan die in 2012.

Deze simpele (waarschijnlijk té simpele, maar goed genoeg om mijn centrale punt mee duidelijk te maken) analyse geeft aan dat helemaal niet kunnen besluiten dat men minder storm loopt voor de opleidingen psychologie of pedagogie. De verschillen die we waarnemen zijn waarschijnlijk natuurlijke variantie, toevallige fluctuaties waarvoor geen verklaringen te geven zijn.

Onderstaande grafiek, ten slotte, geeft dit ook weer. De groene ‘band’ is het resultaat van 1000 gesimuleerde inschrijvingscurves met dezelfde ‘rate’ als de curve van 2012. Ze verschillen dus alleen wat betreft de natuurlijke variantie.

sim2Onmiddellijk is duidelijk dat curves soms wat hoger of lager kunnen uitvallen, zonder dat daar oorzaken voor te geven zijn. Als we de gesimuleerde curves (groen) gaan vergelijken met de inschrijvingscurve voor dit jaar, dan zien we dat ze meestal mooi binnen de te verwachten natuurlijke variantie van de curve van vorig jaar blijft. We kunnen dus best nog even wachten met het verklaren van de verschuivinen in de inschrijvingen en vooral proberen het signaal niet te verwarren met de ruis.

Edit: De prior die ik gebruikte voor de rate parameter is Uniform(0,200).

Linux: resize picture with given maximum filesize using command line

If you have to resize a picture so that its file size does not exceed a given limit, you can use the following simple command line statement (using a program from the ImageMagick suite):

convert picture1.png -define jpeg:extent=4mb picture1.jpg

Explanation:

  • convert → use the program ‘convert’ (part of ImageMagick)
  • define → add specific global settings used to control coders and image processing operations
  • jpeg:extent=4mb → The JPEG encoder will search for the highest compression quality level that results in an output file that does not exceed the value.

Convert every file in directory to different format in linux (eg pdf to eps with pdftops)

Below a simple bash statement that will convert every file in the current directory. As an example, every pdf file in the current directory will be converted to the eps format using pdftops.

find ./ -maxdepth 1 -name "*.pdf" -exec pdftops -eps {} \;

Explanation:
find → use the program ‘find’
./ → start looking in the current directory
maxdepth 1 → do not look in subdirectories
name "*.pdf" → look for files with extension “.pdf”
exec → for every such file, do the following:
pdftops → use the program ‘pdftops’
eps → use the option ‘eps’
{} → substitute every match of the ‘find’ command here
\; → end of command

Reactie op “Enkele bedenkingen bij de recente ‘De Standaard/VRT/TNS’ peiling”

Recent ontstond op Twitter een (constructieve) discussie over of nu wel of niet besloten kan worden dat de score van de NVA bij de huidige peiling (mei ’13) significant lager ligt dan die bij de vorige peiling (sept. ’12). Het begon met onderstaande tweets:

Lees de volledige twitter conversatie hier. Een uitgebreide reactie kwam er op de blog van @IstvanHajnal in de vorm van twee blogposts (hier en hier).

De hamvraag in deze hele discussie is of de waargenomen daling van de score van de NVA in de peiling van mei ’13 vs september ’12 “significant” is of niet. Meerbepaald, moeten we in de analyse ook rekening houden met de onzekerheid van het vergelijkingspunt (i.e. peiling sept ’12) of niet?

Mijn antwoord op deze vraag/stelling is zonder twijfel: ja! Als een overtuigde aanhanger van Bayesiaanse statistiek wil ik hieronder graag demonstreren hoe een Bayesiaanse analyse op deze data in z’n werk gaat.

Merk op dat er slechts heel weinig precieze gegevens gedeeld worden over de ‘De Standaard/VRT/TNS’ peiling. Onderstaande analyse gaat uit van een perfect gerandomiseerde steekproef uit de populatie van alle stemgerechtigden. Naar alle waarschijnlijkheid is hieraan in de peiling(en) niet voldaan en betekent dit dat we een onderschatting maken van de onzekerheid rond de resultaten. Daarenboven heb ik geen gegevens over de steekproefgrootte van de peiling in sept ’12, maar ga ik net als @IstvanHajnal (in de tweede blogpost) uit van een steekproef van 1000.

Roeien met de riemen die er zijn…

Het probleem waarmee we te maken hebben is het vergelijken van twee niet-gekende proporties. De eerste niet-gekende proportie is de potentiële score van NVA in september ’12. Deze proportie gaan we proberen te schatten met de informatie uit de peiling van september ’12. De tweede niet-gekende proportie is de potentiële score van NVA in mei ’13 en deze proportie gaan we proberen te schatten met de informatie uit de peiling van mei ’13.

Een Bayesiaans statisticus probeert dit probleem op te lossen aan de hand van de regel van Bayes. Die regel geeft weer hoe we onze mening moeten herzien in het licht van (nieuwe) data:

p(mening|data)=\frac{p(data|mening)\times p(mening)}{p(data)}

Of in meer formele termen:

posterior=\frac{likelihood \times prior}{marginal likelihood}

Het eerste dat we bepalen is onze “prior” ofte “onze-mening-vooraleer-we-naar-de (nieuwe)-data-keken”. In dit geval gaat dit over de score van de NVA in september ’12. Hieronder twee voorbeelden van mogelijke “prior” meningen.

prior1prior2

De eerste (linkse) “prior” mening geeft weer dat we alle mogelijke percentages even waarschijnlijk vinden als score voor de NVA. Echter, een meer realistische prior zou de andere (rechtse) prior kunnen zijn waarbij we meer geloof hechten aan waarden rond de 30% en weinig geloven in waarden boven 50%.

Om de zaken eenvoudig te houden werk ik hier verder met de linkse prior. Deze prior wordt heel vaak gebruikt omdat hiermee de invloed van de prior minimaal gehouden wordt en de uitkomst volledig door de data bepaald wordt. Mede hierdoor is deze prior vaak acceptabel voor zowel Bayesiaanse als klassieke statistici.

De volgende stap is het bepalen van de likelihoodfunctie. Voor dit probleem zullen we gebruik maken van de Bernoulli likelihood waarbij we 1000 observaties hebben waarvan 363 NVA stemmers en 673 niet-NVA stemmers. Onze posterior kunnen we dan berekenen door de regel van Bayes hierboven toe te passen (om niet te technisch te worden laat ik de precieze berekeningen hier achterwege).

post1Na het in overweging nemen van de data in de peiling van september ’12 geeft bovenstaande “posterior” weer wat we weten over de niet-gekende proportie NVA-stemmers. We zien dat de kans erg groot is dat de niet-gekende proportie ergens tussen 30% en 40% moet zijn.

Vervolgens doen we dezelfde stappen voor de peiling van mei ’13. We gebruiken hier opnieuw de ‘vlakke prior’ die we hierboven ook gebruikten. De de tweede peiling spreekt over een steekproef van 1084 respondenten waarvan 348 NVA-stemmers. Via Bayes theorema kunnen we dan opnieuw de posterior gaan berekenen. Hieronder zie je de posteriors van de peiling van september ’12 en mei ’13 op dezelfde grafiek geplaatst (merk op dat de schaal van de X-as anders is dan hierboven).

post3In bovenstaande grafiek heb ik ook het “95% credible interval” weergegeven voor beide “posteriors”. Die “credible intervals” kan je als volgt interpreteren: “er is 95% kans dat de niet-gekende NVA score in dit interval ligt”. Deze interpretatie is heel intuitief en helemaal anders dan het klassieke betrouwbaarheidsinterval (zie blogpost 1 van @IstvanHajnal). Merk ook op dat beide “credible intervals” elkaar overlappen (wat niet per se betekent dat beide proporties niet van elkaar verschillen (sorry voor dubbele negatie)).

De kernvraag van deze analyse is wat de kans is dat de niet-gekende proportie NVA stemmers lager zou zijn mei ’13 dan september ’12. Dit komt neer op het berekenen van de kans dat de blauwe verdeling in bovenstaande grafiek kleiner is dan de gele. Dit probleem kunnen we relatief eenvoudig oplossen met simulatie. Hieronder het resultaat van die simulatie:

postdif1Het “credible interval” in bovenstaande histogram geeft aan dat er 95% kans is dat er in mei ’13 tussen de 0.001% en de 8.3% minder Vlamingen zijn die op NVA zouden stemmen dan dat er in september ’12 waren. De kans dat NVA er minstens 1% op achteruit gegaan is bedraagt 93.8%.

Let wel, de kans dat NVA erop vooruít gegaan is tussen september ’12 en mei ’13 bedraagt (ondanks het feit dat de peilingen iets anders laten uitschijnen) nog steeds 2.2%. In de medische wetenschappen, waar men (terecht) veel striktere eisen stelt aan statistisch bewijs, zou dit betekenen dat bijkomend onderzoek nodig is om uitsluitsel te bieden.

We kunnen dus besluiten dat de media correct bericht hebben over de daling van de NVA in de laatste peiling. De data geven inderdaad aan dat de kans erg groot is dat de NVA erop achteruit gegaan is tussen beide peilingen. Let wel (en ik herhaal omdat dit belangrijk is), deze analyse gaat uit van een perfect gerandomiseerde steekproef uit de populatie van alle stemgerechtigden. Naar alle waarschijnlijkheid is hieraan in de peiling(en) niet voldaan en betekent dit dat we een onderschatting maken van de onzekerheid rond de resultatan.

Addendum

Een belangrijk element in de twitter/blog discussie was of we al dan niet moesten rekening houden met de onzekerheid van het ijkpunt (i.e. de onzekerheid van de werkelijke proportie NVA stemmers in september ’12). Ik haalde al aan dat mijn standpunt is dat we dit zeker moeten doen. Hieronder toon ik wat gebeurt indien we dit niet zouden doen.

In bovenstaande analyse hebben we het verschil berekend tussen twee random variabelen, namelijk de niet-gekende proportie NVA-stemmers in september ’12 en de niet-gekende proportie NVA-stemmers in mei 2013. Het resultaat was de gele histogram hierboven.

Indien we ervan zouden uitgaan dat de uitkomst van de peiling in september ’12 niet onzeker is, maar daarentegen fixed (i.e. 36.3%), dan zouden we andere antwoorden formuleren op onze hamvraag. Namelijk, dan zouden we enkel de posterior van de huidige peiling gaan berekenen en dan nagaan wat de kans is dat deze posterior kleiner is dan 36.3%.

post4Bovenstaande figuur geeft dit weer. De gele oppervlakte geeft de kans weer dat de niet-gekende proportie van de recentste peiling kleiner is dan het fixed ijkpunt (0.363) en die kans is 99.8%. De kleine blauwe oppervlakte (in de rechterstaart) is dan het omgekeerde, namelijk de kans dat deze proportie groter is dan het ijkpunt (0.363) en die kan is dan logischerwijze 0.02%.

Merk op dat wanneer we de kansen op deze manier berekenen we met grotere zekerheid (99.8% hier versus 97.8% in de vorige analyse) zouden besluiten dat NVA erop achteruit gegaan is tussen beide peilingen. Door geen rekening te houden met de onzekerheid van het ijkpunt zouden we dus een overschatting gaan maken van het verschil tussen beide peilingen. Al moet het gezegd dat in dit geval dit niet tot fundamenteel verschillende conclusies zou leiden.

Install dvb-t usb dongle (rtl2832u) in xbmc on Raspberry Pi using VDR

Recently, I tried to get my Genius 1000 working on my Raspberry Pi that runs xbmc. It turned out that this is not as simple as some tutorials would make you believe. The many different drivers, backends, frontends, xbmc distro’s, xbmc addons, etc. make it difficult to set up a coherent system. This is what worked for me:

First, install raspbmc on the Raspberry Pi. This is relatively easy and many good tutorials are available (eg here). Raspbmc is preferred over openELEC because for the former it is easier to add drivers that are not supported by the kernel. This is important for the Genius 1000 dvb-t usb dongle, since its chipset (rtl2832u) is not supported by the kernel that is currently used in these distributions (kernel version 3.6.11).

Once raspbmc is installed, it is time to install a kernel module that makes it possible to use the rtl2832u chipset. Find and download the rtl2832u.ko file (eg here) and copy it to your Raspberry Pi. Unzip the file and copy the dvb-usb-rtl2832u.ko file to /lib/modules/3.6.11/kernel/drivers/media/dvb/dvb-usb/ and load the module:

$ tar -zxvf dvb-usb-rtl2832u.tar.gz
$ sudo mv dvb-usb-rtl2832u.ko /lib/modules/3.6.11/kernel/drivers/media/dvb/dvb-usb/
$ sudo depmod -a

If everything fine, running dmesg should return a line like this: dvb-usb: DK DONGLE successfully initialized and connected.

Next, we will install a backand program which communicates with a TV tuner adaptor to create a video stream. The most popular backend seems to be TvHeadend. It is supported by most xbmc distros out of the box. However, I could not get it working on my system. The problem was that after adding the muxes, no services were found. Even when I added the muxes manually (as suggested in some posts).

Fortunately, I had better luck with an alternative backend: VDR. Installing VDR on raspbmc is quite a hassle. First we have to install the necessary programs:

$ sudo apt-get update
$ sudo apt-get install pkg-config unzip git build-essential vdr vdr-dev vdr-plugin-epgsearch vdr-plugin-live vdr-plugin-streamdev-server w-scan

During this process, you will be asked for the type of dvb receiver you are using. In my case this is “terretrial” (ie dvb-t). Next, we will create a configuration file containing the broadcast information about the channels available in our geographical location. Using w_scan (read the man page to find the options for your location):

$ sudo w_scan -c BE > channels.conf
$ sudo mv channels.conf /var/lib/vdr/channels.conf
$ sudo rm /etc/vdr/channels.conf
$ sudo ln -s /var/lib/vdr/channels.conf /etc/vdr/channels.conf

Make sure, the w_scan command is run somewhere in your home directory otherwise it wil not work. Also, make sure your Raspberry Pi is connected to a powered(!) usb hub or an adaptor. If not, the rpi will not get sufficient power to perform the scan and freeze/crash while scanning. Finally, once the channels.conf file is created, move and link it to the appropriate locations (see code above).

Next, two configuration files should be adapted. First, inf the file /etc/default/vdr, change the value of enabled=0 to enabled=1. Second, adjust the file /var/lib/vdr/plugins/streamdev-server/streamdevhosts.conf so that it conforms your local network settings. In my case:

192.168.1.0/24       # any host on the local net

At this point, it is time to reboot the Raspberry Pi.

Now we can check if everything works so far. With your favorite webbrowser, go to the ip-address of your Raspberry Pi followed by “:8008”, i.e.


http://192.168.1.1:8008

If everything works as expected, you should see a loginscreen of VDR. With username “admin” and password “live” you should be able to get access and open the streams you are able to receise at your location.

Finally, we will install a program (vnsiserver) that makes communication possible between VDR and XBMC. First a directory is created where we will compile this program from source. Second, the sourcecode is downloaded to this new folder. Third step is compiling the code.

mkdir vdr
cd vdr
git clone git://github.com/opdenkamp/xbmc-pvr-addons.git
cd xbmc-pvr-addons/addons/pvr.vdr.vnsi/vdr-plugin-vnsiserver
sudo make VDRDIR=/usr/include/vdr LIBDIR=/usr/lib/vdr/plugins

We’re almost there. We just have to create a configuration file that defines who can connect to vnsiserver:

sudo mkdir /var/lib/vdr/plugins/vnsiserver
sudo vi /var/lib/vdr/plugins/vnsiserver/allowed_hosts.conf

and add the following lines:

127.0.0.1             # always accept localhost
192.168.XXX.0/24      # any host on the local net

changing “XXX” to the settings of your local network (probably a value of “1”).

The only thing left to do is restart vdr

$ sudo service vdr restart

and go to XBMC to install the vnsiserver plugin and allow Live TV (System>Settings>LiveTV>enable).

Finally, make sure you buy the Raspberry Pi mpeg codec (it costs only a few dollar/euro). Without this codec, you will not be able to get video (while the sound might work without).

Update:
I noticed that when Raspbmc updates it is necessary to copy again the kernel module dvb-usb-rtl2832u.ko to the appropriate folder and reissue depmod -a (see above).

Sources:
http://forum.stmlabs.com/showthread.php?tid=6780
http://forum.stmlabs.com/showthread.php?tid=6580