Kategoriarkiv: R

Visualisering av vädret i Stockholm

Ett nytt år har inletts. Min förhoppning är att 2017 ska visa sig vara ett produktivt år. Jag har även tänkt börja använda statistikprogrammet R i högre grad än tidigare. Det finns ett flertal skäl till det beslutet, men framför allt finns en växande rörelse kring programmet och inom den skapas en stadigt ökande mängd av nya, spännande funktioner.

Det bästa sättet att komma in i ett nytt statistikspråk är att använda det praktiskt. Så jag bestämde mig därför att försöka ta fram en variant av Edward Tuftes klassiska visualisering i NY Times av vädret under årets olika dagar. Det är en graf som har blivit känd genom Tuftes inflytelserika bok Visual Display of Quantitative Information

Grafen har två delar. I den övre delen redovisas temperaturen för årets alla 365 dagar i vad som vid första anblick ser ut som tre linjer av olika tjocklek, men som egentligen är tre typer av staplar som ligger mycket tätt:

  1. Staplar som visar intervallet från den lägsta till den högsta temperaturen för respektive dag det aktuella året (staplarna i den lila färgen).
  2. Staplar som visar intervallet från den lägsta till den högsta temperaturen för respektive dag historiskt sett (de ljusa staplarna).
  3. Staplar som visar intervallet från den genomsnittligt lägsta temperaturen historiskt sett till den genomsnittlig högsta temperaturen historiskt sett.

Dessutom finns kumulativ nederbörd per månad redovisat i grafens nederkant.

Jag upptäckte att Brad Boehmke redan hade skrivit kod i R för att ta fram en sådan graf. Den skiljer sig något från NY Times graf, framför allt genom att han inte hade tillgång till högsta och lägsta temperatur för respektive dygn, utan endast dygnsmedeltemperaturen. I hans grafen blir därmed det aktuella årets temperatur över dagar illustrerat som en linje. Dessutom hade han inte tillgång till nederbörd, så den delen av den ursprungliga grafen finns inte med. Men jag tycker ändå att hans resultat blev bra, se själva:

Så jag har utgått från den koden, men jag har ändrat den en del. Bland annat fick jag inte hans numrering av dagar att fungera och jag förstod inte varför han ritade samma graf för varje historiskt år. Dessutom valde Boehmke att låta intervallet avseende normala år representeras av konfidensintervallet för det historiska medelvärdet. Detta då han som sagt inte hade tillgång till varje dygns högsta och lägsta temperatur. Jag tycker inte att det är helt lyckat val då det visar osäkerheten i en skattning av ett historiskt medelvärde snarare än ett intervall som innefattar normala värden.

Man skulle i stället kunna låta intervallet motsvara två standardavvikelser i datamaterialet (dvs. inte dela med roten ur n) i förhållande till medelvärdet. Men jag föredrar att låta intervallet ”normala temperaturer” avse de mittersta 50 procenten av tidigare års medeltemperaturer. Med andra ord: om man sorterar alla tidigare års medeltemperaturer för en viss dag från den lägsta till den högsta temperaturen så blir de procent av dagarna som ligger i mitten de dagar som betecknas ”normala”. Staplarna i grafen blir därmed en variant av ett lådagram (eller boxplot på engelska), där den mörkare färgen blir själva lådan.

En rolig utveckling av Tuftes graf är att Boehmke har markerat de dagar som det aktuella året har rekordhög eller rekordlåg medeltemperatur. Det tillför något nytt och jag därför behållit den delen.

Jag har valt att illustrera medeltemperaturen i Stockholm 2016. Data har jag hämtat från SMHI. Där har jag hämtat historisk data från och med 1961. Och den resulterande grafen för vädret i Stockholm 2016 blev så här (klicka på grafen för att förstora):

Inte så långt från originalet, eller hur? Möjligen skulle man kunna ändra proportionerna för att få grafen mer avlång som i Tuftes version, men jag gillar den nuvarande utformningen. Jag har även som ett experiment skapat en ny blogg där jag kommer att lägga ut mer kring statistik och kodande. Det är en blogg som jag skapat direkt i statistikprogrammet R med hjälp av paketet Blogdown. Där har jag lagt ut koden för att skapa den här grafen, se det här inlägget, om ni vill utveckla den ytterligare.

Hos SMHI finns än äldre data och det finns även uppgifter om högsta och lägsta temperatur respektive dygn och om nederbörd, så det går att göra en graf som än mer liknar originalet, men det får bli en senare uppgift.

Lär dig R i R!

För den som vill lära sig statistikprogrammet R finns många vägar att vandra, bland annat finns många gratis nätkurser via Coursera som lär ut R. Nu finns dock en ytterligare en väg: genom R!

I R kan man installera så kallade paket som tillför funktionalitet till programmet. Ett sådant paket är Swirl. Om man installerar det och sedan laddar det kan man genom R lära sig använda R. Läs mer om hur du går till väga här.

Piketty och PikettieR

Hypen kring Thomas Piketty och hans bok Kapitalet i det 21:a århundradet kan inte ha undgått många. Tyvärr missade jag hans framträdandet i Almedalen. Men för oss som gjorde det finns ett antal sätt att ta del av hans tankar (förutom att läsa boken), exempelvis finns på YouTube hans föreläsning för London School of Economics i juni i år.

Det har varit en hel del diskussioner kring de analyser som han har gjort. Piketty har själv lagt ut underlag till analyserna på sin webbplats, vilket är föredömligt. Fast av någon outgrundlig anledning har han analyserat sina datamaterial i Excel. Det är lite stökigt att få ordning på data för att kunna analysera dem på ett vettigt sätt. Fast nu har Jeff Leek och de andra bakom den utmärkta bloggen Simply Statistics dragit igång ett projekt för att flytta materialet till R.

De vill dock ha hjälp för att slutföra det arbetet (läs mer här om hur du kan bidra). Det som hittills är bearbetat finns på GitHub. Förhoppningsvis kommer en del intressanta analyser från detta arbete. Själv förstår jag dock inte varför de inte valde att kalla projektet PikettieR.

QQ-plots med Pisa-resultat

Sommaren är en utmärkt tid för att experimentera lite med data, metoder och program. Bland allt har jag tänkt använda statistikprogrammet R lite mer än jag brukar (vanligtvis använder jag Stata eller SAS – se min översikt av statistikprogram här).

Den här bloggposten är en kombination av ovanstående. En intressant form av grafer är så kallade QQ-plots, eller quantile-quantile plots. De är ett alternativ till histogram om man vill studera fördelningar. Exempelvis kan de användas för att se om datamaterialet är normalfördelat (genom att jämföra en faktisk fördelning med en teoretisk). Eller som i det fall jag tänker titta på här, för att jämföra två olika fördelningar: hur väl pojkar och flickor presterar i Pisa-undersökningen 2012.

I nedanstående QQ-plots jämförs för ett antal länder hur bra flickor och pojkar presterade när det gäller läsförståelse och matematik i Pisa 2012. För respektive kön har eleverna delats in i likstora 100 grupper efter hur väl de presterade, från de sämsta till de sämsta. I diagrammet är flickornas resultat på y-axeln och pojkarnas på x-axeln. Den första punkten i diagrammet (nere till vänster) är alltså resultaten för den percentil som presterade sämst (de sämsta 1 procenten).

Som framgår av diagrammen är flickor bättre på läsförståelse i alla länderna som presenteras här. Skillnaden är rätt stor i Sverige och framför allt i Finland. När det gäller matematik är skillnaderna mindre. I Sverige är de sämsta tjejerna bättre än de sämsta killarna, men de bästa killarna är bättre än de bästa tjejerna. I övriga länder är könsskillnaderna lite större.

Exemplet och koden är hämtad från bloggen SmarterPoland, det är bara att kopiera och ändra för den som vill ta fram andra resultat. Om ni vill lära er mer om QQ-plots rekommenderas klassikern Visualizing Data av William S. Cleveland från 1993.

[slideshow_deploy id=’2826′]

Nya webbkurser i statistik och dataanalys

Jag har tidigare tipsat om olika webbkurser, eller MOOCs om vi använda oss av buzzwords, och tänkte göra det igen. Visserligen har jag inte själv kollat på dem så noga, men vid första anblick verkar följande tre kurser från Udacity intressanta:

Statistics: The science of decisions. En grundläggande kurs i statistik. Gratis!

Introduction to data science. Dataanalys och programmering i Python. Det är en kostnad för att få del av hela kursen, men det mesta verkar ligga ute gratis.

Exploratory data analysis. Dataanalys och programmering i R. Även här är det en kostnad för att få del av hela kursen, men det mesta verkar ligga ute gratis.

Än fler spännande kurser från Udacity går att hitta här.