Jun 012016
 

In the meantime showing a circular diagram has become popular. here is the avg of 5 series: HadCRUT4.4, GISS, NOAA, JMA and BEST.

round_16_04

The 12th month that this average is a record month. It is going down a bit after the El Nino has stopped, but not by much. This is what can be expected from the history of the El Nino’s: this is the average decrease.

We can also estimate what the rest of the year will do. EXtrenmes are more likely in the period from November to April, so we are entering the relative  more stable period from May to October. The deviation from the mean becomes less:  irt goes down from 0.12 in February to 0.7 in August. Also the auto-correlation becomes stronger.

If we put these facts in a forecast model we find that it is quite likely that we will have another couple of record months until October. The whole (average)  of 2016 is likely to end 0.2 degrees above 2015.

Apr 252016
 

Ik leverde commentaar op een verouderde grafiek op de site van Crok. Hier de update van die grafiek

lc_plot

De lijn is een ( op een wat speciale manier berekende) maat voor de temperatuurstijging in de periode van het aangegeven jaartal tot  “heden”, in het geval van de gebruikte grafiek  was dat 2012/8.  Zoals je ziet leek die stijging even stil te vallen, maar dat zeggen is natuurlijk een gevalletje van extreem kersenplukken.  Als analyse-methode is de gebruikte methode waardeloos, want de punten die in het verleden gezet worden zijn ook afhankelijk van het heden.

Ik rekende het opnieuw uit, nu tot en met maart 2016. Je ziet nu dat die punten uit het verleden van plaats veranderen, en de staart, of eigenlijk de kop, van de grafiek is totaal van karakter veranderd en stijgt nu snel. Dat komt natuurlijk doordat de globale temperatuur stijgt maar zegt verder evenmin iets als de eerste versie over hoe serieus dat is: immers de wijze van berekenen deugt niet en conclusies kun je er niet uit trekken.

Iets serieuzer moeten we de volgende grafiek nemen: hoe snel het nu opwarmt.  Zo’n tien maanden al is de globale temperatuur warmer dan ooit en de  snelheid waarmee nu afstand wordt genomen van de toch al warmste jaren 2010-2015 is schrikbarend.

round_normal

 

Wil iemand nog met droge ogen beweren dat het over vier jaar zeker niet warmer zal zijn dan in 2015?

Nov 262015
 

db-4N.a.v. wat recente uitspraken nog maar eens naar de maandgemiddelden van de temperaturen in De Bilt gekeken. Ja: gemiddelden van de gemiddelde dagtemperatuur. Het meest opvallende is dat ergens in de jaren 70-80 er een omslag is; zo schelen de gemiddelden voor en na 1980 meer dan een graad . Maart, april en november springen er het meeste uit.

 

Alle overzichten per maand:

db-0db-1db-2db-3

Nov 222015
 

circles-okt-2015Elke maand is het weer raak: warmer dan ooit. zie het diagram rechts.

 

Dat 2015 het warmste jaar ooit wordt is voor 99.99% zeker, Het gat tussen 2015 en vorige jaren is al bijna onoverbrugbaar groot.  Bovendien kunnen we, op de termijn van een paar maanden,  de globale temperatuur best een beetje voorspellen. Daartoe moeten we eerst naar onderstaande figuur kijken, waarin ik het gemiddelde van de globale temperatuur over 4 reeksen (Hadcrut, GISS, JMA en NOAA) heb genomen – met gemiddeld nul voor de periode 1986-2006. Daar tegenaan plotten we de invloed van de broeikasgassen (die zorgen voor de opwaartse trend in de temperatuur) en van de bekende natuurlijke variabelen (de variaties in sterkte van de zon, vulkanisch dempen van het zonlicht, en het belangrijkste: de variaties in de oppervlakte warmte van de oceanen – met El Nino als verreweg de belangrjkste).

 

okt-trend

 

Die variaties zijn gemiddeld neutraal, maar kunnen in een korte periode tamelijk groot zijn. In 1992 zien we duidelijk de sporen van een grote vulkaan-uitbarsting (de Pinatubo, in zomer 1991) , en in 1998 een enorme piek bij een grote El Nino, en in 2010 een iets kleinere. Vanaf  2014/ 2015 is de natuurlijke variatie weer positief,  met een nieuwe El Nino op komst.  Deze heeft een lange aanloop, ongebruikelijk lang.

De onderstaande twee grafieken geven de omvang van de invloed van de (bekende) variaties.  Die invlieden zijn gestapeld: eerst alleen de zon, dan zon+vulkanen, in de volgende graiek komt ENSO er bij en vervolgens de rest.

Bij de zon zie je de 11-jaars cyclus overeenkomstig met de zonnevlekken.  Bij vulkanen zie je alleen de grote verstoringen, bijv. Pinatubo die voor een tijdelijke verlaging van bijna 0.3 graden zorgt.

In de tweede grafiek is ENSO dominant (de El Nino Index). AMO en PDO zorgen samen voor slechts nog een paar rimpeltjes.

known_variations

 

Oct 012015
 

circl-sept-152015 blijft in de race voor warmste jaar ooit. De voorsprong begint groot te worden en weinig kan een nieuw record nog voorkomen.

In het vorige overzicht (laatste diagram) is per ongeluk alleen hadcrut4 afgebeeld, niet het volledige gemiddelde. Dat is bij deze hersteld.

Aug 292015
 

maand-cumulatie-juli-2015

juni-gemiddelde-20152015 is hard op weg naar een warmterecord.  In juni is de afstand tot de eerder recordjaren weer verder vergroot.

Update: en in juli even groot gebleven. let op: ik heb de plaats van de onderliggende lijnen aangepast.

Omdat de auto-correlatie in de komende drie maanden hoog is (ofwel: traditiegetrouw beweegt de globale temperatuur weinig in de zomermaanden van het Noordelijk Halfrond), is het vrijwel zeker dat het in oktober nog steeds gemiddeld het warmste jaar zal zijn sinds de temperatuurmetingen begonnen.

November en december kunnen nog wat naar beneden bijstellen, maar  het lijkt bijna onmogelijk dat dat genoeg zal zijn. Na de “mijlpaal”van de 400 ppm CO2 in de atmosfeer komt deen nieuwe mijlpaal al weer in zicht.

Het zal niet stoppen. Integendeel, ik verwacht helaas de komende jaren alleen maar een verder stijging.

 

Jul 292015
 

noaa-maand1Een jaar heeft twaalf maanden, een klok twaalf uren: wat als we een tijdreeks als de bewegingen van een wijzer van de klok afbeelden? Het zal wel geen nieuw idee zijn, maar het helpt wel de invloeden van seizoenen inzichtelijk te maken.  Andere aspecten worden natuurlijk lastiger te zien.

Met januari op 1 uur en doortellend naar december op 12 uur zetten we de globale temperaturen uit vanaf 2005 volgens de berekeningen van NOAA.  Wat mij opvalt is dat je de grilligheid van de veranderingen vooral voorkomen als het zomer is op het Zuidelijke Halfrond.  Als het hier zomer is zijn de verschillen veel beperkter.  We zien dus wellicht in dit plaatje de gevolgen terug van de grotere bewegingen van oceaanstromingen op het zuidelijke halfrond. De natuurlijke variabiliteit van de globale temperatuur lijkt groter te zijn in de periode Nov-Maart dan in de periode Maart-Nov.

Verder zien we uiteraard dat op dit ogenblik de temperatuur op weg is naar een nieuw record. De juni temperatuur is zeer ongewoon hoog (voor een juni).

Allemaal zaken die we niet zomaar in de “gewone” plot zien over dezelfde periode:

noaa-maand2

We zien hier eigenlijk alleen drie heftige sprongen(2007, 2008 en iets mindert 2010)  maar weinig anders.

noaa-maand4Terug naar de gedachte dat de variaties groter zijn in onze wintermaanden. Wellicht wordt dat duidelijker als we van alle jaren de maanden plotten waar het maximum of het minimum van de temperatuur in dat jaar werd berekend. Dat heb ik gedaan voor de hele periode van de NOAA-data – en het resultaat is opmerkelijk en duidelijk, zowel de maxima (rood,  dicht bij de buitenste ring) als de minima (blauw, dicht bij de binnenste ring)  vallen vaker in de maanden oktober tot en met maart dan in de andere maanden.

NB de puntjes zijn een beetje naast de lijn gezet, dan vloeien ze iets minder in elkaar over.


noaa-maand5Ook hier moet ik nog even een slag om de arm houden, want voor de variabiliteit moet je naar de gegevens kijken minus een lange-termijn trend, bijv.  minus de “smooth”van een langjarig gemiddelde. Dat is bijna net zo snel gemaakt als bedacht, we scheiden daardoor nu ook netjes de blauwe en rode puntjes in het volgende diagram. Duidelijker kan het eigenlijk niet: veel minder variabiliteit in de zomers van het Noordelijke Halfrond.

Techniek

Het makkelijkst maak je deze diagrammen in R met complexe getallen De  temperatuur is dan de amplitude; deze wordt voor de maand m vermenigvuldigd met e^{{-(m+2).i. \pi}/6}

 

Jun 152015
 

Een paar jaar geleden schreef ik over overlijden als het koud is.  Nu ga ik meer in op de gevolgen van hittegolven. De aanleiding is dit artikel op klimaatverandering.wordpress.nl, dat een artikel van Gasparrini e.a. (Lancet, open access) bespreekt.  Daarvoor ben ik er weer eens ingedoken. Op de site van de hoofdauteur vinden we diverse files, waaronder de gegevens van Londen (1993-2006). Nederlandse gegevens zijn er inmiddels van 1995-2013.


06-15-figuur1
06-15-figuur2
06-15-figuur3

Nederland

Zowel het verloop van de sterfgevallen per jaar als van de temperatuur is geplot met een zg. smoother van de eigenlijke meetpunten. De smoother is zodanig gekozen dat de grotere pieken zichtbaar blijven, zonder alle fluctuaties te laten zien. In de electro-techniek spreekt men dan ook wel van een low pass filter, een filter op een signaal waarmee we de hoge frequenties onderdrukken.

We zien enkele pieken in de aantallen sterfgevallen tijdens de zomer, zijn die het gevolg van een hittegolf?

In de temperatuurgrafieken zien we niet echt een overeenkomende piek, noch op het verloop van de gemiddelde temperatuur, noch bij de maxima of de minima.

06-15-figuur4
06-15-figuur5

06-15-figuur6

Londen

In de statistieken van Londen zien we een wel heel duidelijke zomers piek in het aantal sterfgevallen in een jaar. Ook in de temperatuuroverzichten is er een kleine piek te zien.


06-15-figuur7

16-06-figuur8b
Inzoomen op de zomermaanden

We zoeken de betreffende dagen op. Het blijkt te gaan om aaneengesloten periodes van (heel) warme dagen. Er vallen een paar zaken op:

  • de sterfgevallen ijlen een paar dagen na vergeleken met de start van de hittegolven;
  • wanneer de temperatuur weer daalt neemt het aantal direct af;
  • het verschil tussen gemiddeld en maximum temperatuur lijkt ook nog een rol te spelen.

Maar misschien wel het belangrijkste: de hittegolf in Londen was een paar graden warmer. Dat heeft kennelijk heftige gevolgen.

Het feit dat er een vertraging is in de gevolgen van de hitte, maakt dat een analyse waarin we direct (per dag) temperatuur en sterfgevallen vergelijken een beetje zwak. We moeten met de gevolgen van de eerdere warme dagen rekening houden. Dat is wat Gasparrini deed in zijn artikel(en). Hij heeft daarvoor een berekeningswijze ontwikkeld die in het R-pakket dlnm (Distributed Lag Non-Linear Models) ook algemeen beschikbaar is. Laten we eens kijken wat dat oplevert.



16-06-figuur9
16-06-figuur10
Uitgestelde effecten

Gasparrini heeft die berekeningswijze voor uitgestelde effecten op flink wat situaties losgelaten en daar meer keren over gepubliceerd (pdf).

Ik heb zijn berekeningen opnieuw gedaan voor Londen en de Nederlandse gegevens.

Kijken we eerst naar de afbeelding van Londen. Het onderste staafdiagram geeft de gemeten frequentie-verdeling van de gemiddelde dag-temperaturen over het jaar. Het jaargemiddelde ligt rond de 12 graden C. De bovenste grafiek geeft het relatieve risico op overlijden ten gevolge van de dagtemperatuur. Die is dus niet het laagst bij 12 graden, de gemiddelde Londenaar voelt zich het beste bij een gemiddelde dagtemperatuur van 20 graden. Is de dagtemperatuur hoger, dan loopt het relatieve risico snel op, tot wel 250% voor een gemiddelde dagtemperatuur dicht bij 30 graden.

In Nederland is het allemaal wat minder heftig, het relatieve risico loopt op tot 150%. In de hierboven eerder getoonde grafieken van de twee ergste hittegolven zien we inderdaad dat in Londen de dagsterfte snel oploopt van 125 naar 275, en in Nederland van 325 naar 450. Dat zijn risico ratio’s van 2.2 en 1.4 respectievelijk. De resterende extra risico’s in de laatste grafieken zijn dus de uitgestelde effecten.

Overwegingen

Nog wat gedachten achteraf. Het effect dat hier gemodelleerd wordt bevindt zich in een klein deel van de aanwezige data. In de laatste twee afbeeldingen zijn 95% van de voorkomende temperaturen ingebed tussen beide verticale gestreepte lijnen. Het gebied daar buiten is dus 18 dagen per jaar. Daarvan vormen de meerdaagse hittegolven weer een kleine minderheid. Zo’n sterke hittegolf als in 2003 London trof hadden we niet. Is dat toeval of structureel? Ik weet het niet. Maar die onzekerheid is niet terug te vinden in de grafieken volgens Gasparrini. Het grijze gebied (onzekerheid) van de curve is de onzekerheid van de methode, gegeven deze data. Met de zeldzaamheid van het vóórkomen van lange periodes hoge temperaturen wordt geen rekening gehouden.

Apr 172015
 

Als het aandeel van CO2 stijgt in de atmosfeer, dan neemt de temperatuur op aarde toe. Het broeikasgas-effect. Omgekeerd kan een hogere temperatuur ook zorgen voor meer CO2-uitstoot. Dat is ook zichtbaar in historische reeksen van CO2 en temperatuur over de afgelopen (pakweg) half miljoen jaren. Dat werpt de vraag op: wat is hier nu de causaliteit?

Het is een beetje een kip- en ei-vraag. Wat veroorzaakt wat? In een recente paper[1] tonen Van Nes e.a.  tamelijk overtuigend aan dat beide grootheden gekoppeld zijn in een ingewikkelde maar stevige onderlinge relatie: die van een dynamisch systeem.

Proberen we de bovenstaande observaties wiskundig te beschrijven, dan is enerzijds de toename van CO2 van de Temperatuur, en v.v. Dus: dCO2/dt = f(T, …)  en dT/dt = g(CO2, ..). Er moet uiteraard ook nog een remmende terugkoppeling zijn, anders stijgen de T en CO2 tot oneindige hoogten. Dus een dynamisch systeem met minimaal drie variabelen.  Als we zo’n systeem als modelmatig uitgangspunt nemen, hoe kunnen we dan laten zien dat T en CO2 variabelen in hetzelfde systeem zijn? Hier komt een ontdekking van de Nederlandse wiskundige Floris Takens te hulp. In 1981 [2] liet hij zien dat uit slechts één variabele de structuur van het hele systeem te reconstrueren valt.  Hier is een voorbeeld nodig, en daarvoor nemen we de (discrete versie van de) Butterfly van Lorenz. Dat is voor wiskundigen het lievelingsvoorbeeld voor dynamische systemen. Het wordt beschreven door een drietal vergelijkingen in X, Y en Z als functies van elkaar en van de tijd. [zie wikipedia]. Op de bovenste rij van deze afbeelding staat in het midden deze butterfly (alleen de X- en Y-coördinaten). Links staat het verloop van de X-coördinaat in de tijd, rechts die van Z.

5-plots

 

Als we alleen X en Z zouden kunnen observeren, dan kunnen we toch een idee krijgen van de vorm van het onderliggende systeem; voor een goed gekozen sprong S in de tijd kunnen we X(t) afzetten tegen [ X(t-S), X(t-2S), X(t-3S), ....], en dat lijkt qua vorm op het origineel. Het is een “schaduw” van het origineel in het licht van X. Hetzelfde kunnen we doen met Z.  Deze schaduwen staan op de tweede rij van dit diagram.

Op dit ogenblik is het verstandig het filmpje te bekijken, dan wordt denk ik veel duidelijker wat hierboven in woorden staat. Let vooral op de onderste twee boxen.

De punten die we in het filmpje door de X- en Z-schaduw zien bewegen, zijn dus eigenlijk projecties van één punt van het oorspronkelijke systeem. In de twee blokjes onderin bewegen ze synchroon, gaat de een langzaam, dan de andere ook, etc. Zijn X en Z waarnemingen, en zouden we willen laten zien dat ze uit hetzelfde systeem komen, dan moeten we een test verzinnen die deze synchrone beweging test. Die test heet Convergent Cross Mapping. Die is in 2012 gemaakt voor een biologisch vraagstuk en hier voor het eerst door Van Nes c.s. toegepast op het klimaat.

De test om de synchrone beweging te testen is heel basaal. Als er een kluitje punten op de X-schaduw bekeken wordt, moeten de bijbehorende punten opde Z-schaduw ook samenklonteren. Ze mogen niet alle kanten uitgewaaierd zijn, want dan is er geen synchrone beweging. En omgekeerd, nemen we een punt op Z met hun naaste buren, dan moet dat  ook weer een klontje vormen op X. En dan lopen we ook nog een stukje van het pad af met X, en moeten de punten op Z goed blijven volgen.

neighbours

Zo wordt met een slim trucje gekeken hoe goed een stukje van de baan van X in Z wordt gevolgd. Dat doen we niet één keer, maar voor elke lengte van dat stukje honderden keren. De baan kiezen we random. Als “goodness of fit” meten we de correlatie tussen de punten op Z en de projectie van X. Hoe langer het te bekijken stukje, hoe beter de correlatie zou moeten zijn. In de volgende plot staan de reeksen uit [1] voor CO2 en Temperatuur (en v.v.) geplot. De lengte van de geteste stukjes loopt van 10 tot 150 punten; d=4 is het aantal punten in de omgeving die steeds wordt bekeken en l=420 is het totaal aantal metingen in resp T en CO2 (elke 1000 jaar). Per lengte worden random 250 stukje geselecteerd, daar nemen we dan de gemiddelden van de correlaties van.

co2-temp

 

 

Elk punt op de rode of blauwe lijn is dus het gemiddelde van 250 correlaties. We zien de correlaties convergeren naar een constante waarde, en, extra mooi, de varianties nemen ook af.  Dit diagram laat duidelijk zien hoe sterk de CO2 en temperatuur onderdeel uitmaken van hetzelfde systeem.

Wordt vervolgd …

- o -

[1] Egbert H. van Nes, Marten Scheffer, Victor Brovkin, Timothy M. Lenton, Hao Ye, Ethan Deyle & George Sugihara (2015).  “Causal feedbacks in climate change”. Nature Climate Change.

[2] F. Takens (1981). “Detecting strange attractors in turbulence”. Lecture Notes in Mathematics. pp. 366–381.

Apr 172015
 

warmterecord-maart2015JMA, NOAA en GISS komen met zeer hoge temperaturen voor maart – JMA  en NOAA hebben de warmste maand ooit gemeten. We maakten een prognose van het gemiddelde van Hadcrut, NOAA, GISS en JMA. Je kunt de ontbrekende cijfers makkelijk inschatten met een linaire regressie, zeg maar zoiets als hc4=a*jma+b*giss +c*noaa.

Het gemiddelde over het eerste kwartaal van 2015 is dan 0.382 +- 0.01. Er moeten bijzondere dingen gebeuren wil 2015 niet opnieuw een record-jaar worden.

 

Mar 162015
 

co2-002Om de een of andere reden is de pers plots enthousiast over het gelijk blijven van het niveau van CO2 uitstoot in 2014 door de energie-sector. Bron is een berichtje van de EIA.

Ik zet mijn wetenschappelijk getrainde hersenhelft maar eens aan. Waar gaat het over? Is dit alle CO2-uitstoot? Waarom bleef het gelijk?

co2-001Of het om het totaal of over het aandeel van de energie-sector gaat blijft een beetje onduidelijk in het persbericht. Maar eigenlijk doet dat er ook niet zoveel toe, als we naar de cijfers achter de grafiek kijken is er weinig reden tot vreugde. In 2013 was er een sterke stijging en van 2013-2014 staat het even stil.  Dat riekt naar regression to the mean, het gegeven dat na een uitschieter altijd een minder grote stap volgt. Is het ook anders te verklaren? Ja,

  1. In 2014 was er op het Noordelijk Halfrond een warmte record. Daar woont 70% van de wereldbevolking, die hebben dus minder verstookt dan het jaar daarvoor.
  2. In 2013 waren de kolen zo goedkoop dat er meer kolen werden verstookt dan verwacht, dus daarom was er extra uitstoot aan CO2 (kolen zijn wat dat betreft het ergste)
  3. In 2014 daalden de olieprijzen, die in het laatste kwartaal zelfs bijna gehalveerd waren ten opzichte van de top in 2013. Er werd dus in 2014 meer olie verstookt voor electriciteit, en minder kolen dan in 2013.

Voor de verdeling van de totale uitstoot zie het tweede plaatje van het EIA.

 

Aug 212014
 

Beroepsbevolking: dat zijn de mensen die werk hebben of willen hebben. Het CBS telt elke maand de beroepsbevolking, werkenden en werklozen naar sexe en leeftijdsgroep. Het totaal ziet er als volgt uit:

beroep_leeftijd_2014_aug_21

Het ziet er een beetje raar uit: de onder 45-groep daalt een beetje, die boven 45 stijgt. Om een beter inzicht te krijgen maken we die veranderingen percentueel inzichtelijk:

beroep_leeftijd2_2014_aug_21

Zo, dat is een stuk duidelijker, maar het bevreemdt. De 45 plus groep is maart liefst 40% groter dan de tien jaar er voor. De jongerengroep fluctueert sterk, maar neemt wel duidelijk af.  De groep er tussen in, 25-45 daalt in absolute zin ook duidelijk, maar veel geleidelijker.

De curves die je ziet zijn seizoensgecorrigeerd.  Niet volgens de systematiek van het CBS, maar via het STL-algoritme (=“Seasonal Decomposition of Time Series by Loess”)[1].

Werkloosheid

Ik vergelijk nu de  werkloosheid met de  beroepsbevolking.  Hoe is het verloop in de jaren?

werkloos_abs_2014_aug_21

Opmerkelijk: voor de crisis neemt beroepsbevolking met 400.000 toe, maar daalt de werkloosheid. Dan stagnatie in de bovenste lijn, en zelfs het laatste jaar een daling. Dat de werkloosheid niet verder stijgt komt dus volledig door de daling in de beroepsbevolking.

Wie profiteert er van? Niet de vrouwen en niet de jongeren.

werkloos_sexe_2014_aug_21

De werkloosheid onder jongere vrouwen daalt niet (er vallen veel banen in de zorg weg). Daarnaast neemt de beroepsbevpolking onder jongeren af: ze blijven langer in opleiding. Het verschil met 10 jaar eerder in ongeveer 100.000 jongeren.

werkloos_abs_jeugd_2014_aug_21

Binnenkort volgt nog een vergelijking van beroepsbevolking en totale bevolking.

 

[1] R. B. Cleveland, W. S. Cleveland, J.E. McRae, and I. Terpenning (1990) STL: A Seasonal-Trend Decomposition Procedure Based on Loess. Journal of Official Statistics, 6, 3–73.

Aug 192014
 

clip_image002Ok, lets try to prove something: that it is not warming. The picture to the right is from the beginning of this month on WUWT. In fact they have one every month – so it must be true, isn’t it? Well not quite. Presenting data that supports a thesis is okay, but neglecting data that is not supporting it is a deadly scientific sin:- (a) there exist at least 6 independent temperature series, and RSS is the only one with a flat line (b) the data before the period shown is ignored. But that older data clearly shows that this line has a discontinuity with older averages. So it is not telling the right story. So, take a look at all the major series for the global temperature – and their combined averages. this-allthis-GSSthis-hc4this-jmathis-ncdthis-uahthis-RSS Er is dus geen stilstand, maar een flinke sprong omhoog en daarna stijgt het minder hard dan eerst. De sprong valt samen met een sterke El Nino, en de vraag waarom het daarna niet gewoon even hardverder stijgt is inderdaad een onderwerp van onderzoek. Maar dat de RSS reeks stil lijkt te staan komt toch vooral doordat er  gegevens gebruikt worden van een satelliet met mogelijke meetfouten.

Opmerkelijk is juist dat de maandgemiddelden van de laatste 18 jaar zo hoog zijn. De gestippelde horizontale lijnen in de grafieken zijn de medianen van die 18 jaar, dus de helft van de maandgemiddelden van die 18  liggen boven die lijn.  In de gecombineerde gemiddelden zijn er nog maar twee eerdere maanden die uitkomen boven die mediaan – een (unieke) plotselinge stijging dus.

Aug 112014
 

In Elsevier spreekt Richard Tol: ‘Opwarming van de aarde is geen catastrofe’.

‘E.: Is het zo dat de temperatuur al achttien jaar niet stijgt? Tol: ‘Ja, in september kan ik tegen eerstejaarsstudenten zeggen dat de aarde sinds hun geboorte niets warmer is geworden’.

Dit komt uit de trukendoos van de klimaat-ontkenner, het is nl. niet waar. De wetenschapper had immers moeten zeggen: ja, de laatste jaren lijkt dat zo, maar het is (nog) geen significante stilstand. Er zijn veel manieren om er naar te kijken en de meesten laten nog steeds een stijging zien. Hij had bijvoorbeeld het volgende plaatje kunnen laten zien:vantol004

Hier zien we dat er wel degelijk een (forse) stijging is, zelfs in lijn met de voorspellingen. Dat er toch verschillende interpretaties zijn komt door de plotselinge en flinke verhogingen van de temperatuur rond 1997. Alleen als je dat feit meeneemt zie je die verhoging.

Voor mij is echter het meest opmerkelijk in deze grafiek is dat álle waarden die boven 0.15 liggen (op 3 outliers na)  alleen in de periode ná 1996 optreden. Die 0.15 is ongeveer de mediaan voor de periode na 1996.

Nee, hij trekt het ook nog in het belachelijke en vertelt straks de studenten iets dat zeker niet waar is.  Maar zo’n wereldtemperatuur is een erg abstract gegeven, zijn studenten merken de temperatuur in Nederland en Engeland, en ook op zo’n beperkter gebied is de opwarming heel concreet merkbaar. Zo duren in Nederland de warme perioden significant langer, en de koude niet. Zie deze grafiek:

langere-perioden-001

Deze grafiek is samengesteld uit de gemiddelde dagwaarden van de temperatuur op het weerstation in de Bilt.  We kijken hoe lang vorstperiodes (gemiddelde dagwaarde onder nul) hebben geduurd (met een uitschieter in 1947-48), en hoe lang warme periodes duren (tenminste 17 graden). Die grens heb ik gekozen om ongeveer evenveel warme als koude periodes te vinden, voor de rest zit er niets achter. Daarnaast is de trend uitgerekend. De trendlijnen zijn voor de duidelijkheid uitvergroot. De trend van de warme perioden is zeer significant.

Andere indicatoren

Ook de zeespiegel stijgt – zelf s in Nederland. In de volgende grafiek is de situatie in IJmuiden geplot. Het gaat iets harder (10%) dan de globale stijging, omdat bij ons er ook nog een bodemdaling is.

vantol002

Het lange-termijn probleem is duidelijk, maar Tol lijkt het korte-termijn probleem niet te kennen: dat de rivieren hun water niet meer kwijt kunnen.

Dan zijn er nog veranderingen die zich niet direct naast de deur afspelen maar wel indirect grote gevolgen kunnen hebben: verdwijnen van ijs op de polen, verdwijnen van gletschers en de toename van methaan uit permafrost en ijszee. Zie onder meer deze site.

Slotopmerkingen

Laten we maar niet vergeten dat Tol gewoon een econoom en helemaal geen deskundige op het gebied van klimaatverandering is. Hij schrijft niet “over” maar “n.a.v.” klimaatverandering.  Wie z’n uitgangspunten niet goed heeft, schrijft dan natuurlijk ook wel eens heel slechte stukken. Dan kan hij wel zeggen dat hij “de beste econoom” van Nederland is (op een obscuur lijstje), maar hij krijgt regelmatig zeer serieuze kritiek (zoals bij Andrew Gelman over een paper die zelfs na twee correcties nog forse fouten bevat).

Jul 302014
 

We halen even snel de (laatste) bijstands- en werkloosheidsgegevens uit de CBS open data om dit plaatje te kunnen maken. w&b_2014_jul_30 De gegevensverwerking is als volgt:

source("open_feed_api_CBS.R")
source("../library/pretty.plot.R")

ww<-open_feed_api_CBS("37506wwm", new=FALSE) # uitkeringen werkloosheidswet
bs<-open_feed_api_CBS("37789ksz", new=FALSE) # uitkeringen bijstandswet
maand_bs<-bs[substr(bs$Perioden,5,6) == "MM",]

ww.m<-ww[ww$Geslacht=="0"
 & ww$Leeftijd=="0"
 & substr(ww$Perioden,5,6) == "MM"
 , c(24, 5)]
ww.ts<-ts(ww.m[,2]/1000, start=1998, freq=12)
ts.end<- end(ww.ts)[1] + (end(ww.ts)[2]-1)/12
bs.ts <- ts(maand_bs[,12], start=1998,freq=12)
bs.ts <- window(bs.ts, end=end(ww.ts))
all.ts<-ww.ts+bs.ts

De maand-, jaar- en kwartaalcoderingen zitten bij het CBS meestal allemaal door elkaar in één kolom. Hier wil ik de maandcodering hebben, met “MM” in positie 5 en 6 van het Perioden-veld. We nemen beide geslachten en alle leeftijden. De data zet ik in tijdreeksen. Als je er enige handigheid in hebt gekregen werkt het makkelijker dan de dataframes. Voor de plotjes zet ik de tijdreeksen weer om in een dataframe. Even het plaatje maken in een eigen thema:

pretty.plot(ts_to_df(bs.ts)
            , type="v"
            , kleur=4
            , lwd=2
            , ylim=c(150,900)
            , xlim=c(1998,ts.end)
            , xat = seq(1998,2014,2)
            , yat=c(200,400,600,800)
            , main=paste0("WW en bijstand vanaf 1998\nt/m ", tail(ww.m$Perioden_C,1))
            , source="Bron: Cbs Open Data Portal 2014"
            , ylab="duizenden"
            # , kab=1
            )
pretty.plot(ts_to_df(bs.ts), type="l", kleur=4, lwd=2, add=TRUE)
pretty.plot(ts_to_df(all.ts), type="v", kleur=3, lwd=2, add=TRUE)
pretty.plot(ts_to_df(all.ts), type="l", kleur=3, lwd=2, add=TRUE)
pretty.legend(kleur=c(3,4), lwd=3, 
              c("WW + bijstand (* 1000) ", "Bijstand (* 1000)")
)
Jul 302014
 

Shows how to use the CBS open data interface in R.

Note 22-01-2015: zie het commentaar over een probleem met jsonlite en de workaround.  De code, met updates, staat inmiddels permanent op mijn github: https://github.com/MrOoijer/R-work/tree/master/openCBS

CBS biedt sinds kort een open data interface naar “al” zijn data. Het protocol is gebaseerd op Versie 3 van odata.org.

CBS kent twee toegangen: een voor applicaties, en een voor bulk bevragingen. Het gekke is dat deze ingangen default een verschillend formaat gebruiken om het antwoord terug te geven. De applicaties-ingang geeft JSON terug, de bulk-ingang gebruikt op ATOM gebaseerd XML. Op het eerste gezicht heel erg helaas, want deze ATOM is (nagemeten!)  zo’n 700% inefficiënter qua ruimte. Voorts is het is ook vreselijk lastig te verwerken als je geen goede parser hebt. Die is er wel voor algemeen gebruik van XML binnen R, maar ik heb geen kant-en klare oplossing voor ATOM gevonden, en om die nu zelf te schrijven, nee….

De JSON-interface weigert dienst bij meer dan 10.000 records, de ATOM-interface geeft er maximaal 10.000 tegelijk, maar je kunt om meer vragen. Gelukkig echter kun je met een extra argument achter de url de default ATOM omzetten naar JSON en werkt het daarna precies hetzelfde. Het staat nergens op de CBS-site genoemd – het heeft me dus wel een paar dagen proberen gekost voordat ik de hier onder getoonde simpele oplossing had. Het R-pakket “jsonlite” doet al het vertaalwerk voor ons.

CBS-tabellen worden  normaal gesproken niet vaker dan eens per maand ververst, en dus gebruik ik normaal gesproken eens per maand een nieuwe kopie. De “gewone” call van

data_table= open_api_CBS(CBS_table_name)

haalt dus bij voorkeur de die maand al gecachte versie op. Een nieuwe versie wordt geforceerd opgehaald door new=TRUE toe te voegen.  In de code zelf wordt eerst een lijst met interface-URL’s opgehaald, dan (evt. herhaald) de TypedDataSet, en vervolgens worden van de gecodeerde kolommen versies toegevoegd waarin de codering is vervangen door de betekenis. De data types van de TypedDataSet sluiten goed aan bij de data.frames van R. Er is geen conversie nodig. Er zijn nog wel wat overblijvende eigenaardigheden weg te werken, maar die behandel ik een volgende keer.

Code:

library(jsonlite)
library(RCurl)
##
## call CBS feed or get cached table
##
##
open_feed_api_CBS  =  function(table_name, new=FALSE, progress=FALSE){
        #
        api_base = "http://opendata.cbs.nl/ODataFeed/odata/"
        my_cache="./CBSdata/"
        file_name=paste0(my_cache, table_name,sprintf("_%s.dat", format(Sys.time(), "%Y_%b")))
        force_json= "?$format=json"
        #
        if (new == TRUE || ! file.exists(file_name)){
                api_url = paste0(api_base,table_name, force_json)
                my_data  =  getURL(api_url)
                my_json  = fromJSON(my_data)
                api_table  = my_json$value
                table_url  =  api_table$url[api_table$name=="TypedDataSet"]
                url= paste0(table_url, force_json)
                first=TRUE; iter=1
                while (TRUE){
                        # read api interface
                        my_data  =  getURL(url)
                        my_json  = fromJSON(my_data)
                        if( length(my_json$value) == 0) break
                        if( first == FALSE) {data_table =  rbind(data_table, my_json$value)}
                        if( first == TRUE) {
                                data_table  =  my_json$value
                                first= FALSE
                        }
                        if (length(my_json) < 3) break
                        url=my_json[[3]]
                        if ( progress == TRUE){
                                cat(sprintf("\r..%d\r", iter)) ### shows progress during testing 
                                iter=iter+1
                        }
                }        
                # replace coded fields key with titles
                # ... but use new column name
                #
                for (i in 5:dim(api_table)[1]){
                        Naam= api_table$name[i]
                        Naam2= paste0(Naam, "_C")
                        url= paste0(api_table$url[i], force_json)
                        my_data  =  getURL(url)
                        my_json  = fromJSON(my_data)
                        key_data  =  my_json$value
                        for(k in 1:dim(key_data)[1]){
                                data_table[data_table[, Naam] == key_data$Key[k], Naam2] = key_data$Title[k]
                        }
                }
                write.table(data_table, file=file_name, row.names=FALSE)
                return(data_table)
        }
        return(read.table(file_name, header=TRUE, stringsAsFactors = FALSE))
}