L’autre jour, l’INED avait fait beaucoup de bruit en publiant une étude
expliquant que le pic des naissance classiquement observé en mai
semblait avoir disparu (ici ou là).
On va essayer de vérifier ce point, à partir de toutes les naissances
observées en France entre 1968 et 2005. Ca sera le billet sexe de l’été...
- Le nombre quotidien de naissances en France
La série brute ressemble à ça,

On
pourrait à la rigueur extraire les cycles directement sur cette série,
mais ça ne serait pas forcément convainquant (même si visuellement on
retrouve ce qui était évoqué),

mais la première chose que l’on observe est que la différence entre le nombre de naissances le week end (en
rouge) et en semaine (en
bleu) s’est fortement creusée dans les années 80-90.

On peut regarder le ratio du nombre de naissance le week end, par rapport aux jours de la semaine précédant le week end,

et on peut alors "
corriger" ou "
lisser" la série, de manière à maintenir la moyenne hebdomadaire, mais en transférant quelques naissances de la semaine au week end.

Sur cette série lissée, on peut extraire une tendance de long terme.

C’est sur le "
bruit"
autour de cette tendance que l’on peut essayer d’étudier un éventuel
cycle annuel. Notons que l’on retrouve les tendances sur la série brute

- Série corrigée de la tendance de long terme
La série suivante permet de voir l’évolution du "cycle" (série brute à laquelle on retranche la tendance observée ci-dessus) à la fin des années 60 (en
rouge), des années 70 (en
orange), des années 80 (en
jaune), voire des années 90 (en presque
blanc),

Sur les années 68-78, on a la tendance suivante

alors que pour les années 95-2005, cela donne

Au final, les deux tendances sont les suivantes, avec en
rouge les années 70 et en
bleu les années 2000.

Effectivement,
le pic classiquement observé au mois de mai semble avoir disparu, et la
série aujourd’hui semble beaucoup plus lisse. Et comme l’INED, on note
qu’il y a effectivement un mini-pic au mois de septembre.
- Des naissances au comportement sexuel
Tout
comme l’INED, on peut relier ça à l’activité sexuelle des français, que
l’on peut visualiser sur le graphique ci-dessous (en décalant tout
simplement de 9 mois),

Bref,
l’activité sexuelle semblait s’intensifier pendant les vacances
scolaires, en particulier début août (mais aussi plus généralement
pendant les vacances scolaires, que ce soit Pâques, les vacances d’été,
ou les vacances de Noël d’ailleurs). Ou peut être pourrait-on conclure
à la rigueur que l’été, on sort moins couvert.... car on observe les
comportements sexuels associés à une naissance 9 mois plus tard (ce qui
ne doit pas correspondre à l’unique activité sexuelle).
Les français
semblent avoir intensifié leur activité sexuelle pendant une période
plus fraîche (novembre-mars), au détriment de la période estivale. Un
effet du réchauffement climatique (il fait trop chaud pour batifoler
l’été) ? Un effet des 35 heures et des RTT (et des vacances qui sont
plus réparties dans l’année qu’avant) ?
En
fait, au lieu de penser en terme de saison, on peut penser en terme de
température (j’ai pris la température quotidienne minimale à Paris,
c’est à dire la nuit... ).

c’est à dire en zoomant

On
peut aussi chercher à étudier davantage ce qui se passait il y a 30 ans
et maintenant (comme dans la partie précédente). Il y a 30 ans (courbe
rouge) on observait un (très) fort pic estival. Ce pic a disparu aujourd’hui (courbe
bleue), avec un comportement comparable, qu’il fasse 0 ou 20 degrés dehors.

- Quid de l’impact des bourses ?
Mais la recherche de
la
variable qui pourrait expliquer cette saisonnalité ou ces pics est sans
fin. Beaucoup de monde évoque la bonne santé économique pour expliquer
les booms de natalité.... ça marche peut être à long terme, mais à
court terme ?
En fait, si on croisse l’activité sexuelle avec le niveau de la bourse, on peut presque retrouver ce genre de comportement,

une
bourse en très forte hausse semble provoquer un (léger) pic de natalité
9 mois plus tard, alors qu’un effondrement de la bourse se traduit
plutôt par une chute (légère certes) 9 mois plus tard...
Commentaires
Bonjour,
Est ce du a une évolution des modes d'organisation du travail dans les maternités (on peut déclencher les accouchements maintenant) ou aux comportements individuels qui changent ?
Juste un petit commentaire sur la forme : ce qui améliorerait encore plus le billet ce serait de livrer le code R des graphiques (en cliquant dessus par exemple) et la source des données comme ça on pourrait le refaire à la maison avec d'autres couleurs et avec d'autre données. Et on utiliserait un petit peu R.
REPONSE: non, je n'ai pas plus d'informations.... je cherche à récupérer des données sur les naissances, mais les procédures sont assez différentes de celles que j'ai l'habitude de voir... on me demande les conclusions de l'étude avant de me donner les données... C'est troublant ! Sinon le code R arrivera bientôt, tout le monde me le demande... même si je crois qu'on y gagne en clarté pour les non-initiés (en reste-t-il qui passent encore sur le blog ?)...
Très intéressant comme d'habitude ! J'ai deux pistes d'explications pour l'impact de la Bourse, à supposer que la corrélation ne soit pas un pur hasard, qui partent toutes deux du fait que lorsqu'il fait beau, le marché est un peu plus optimiste en moyenne (apparemment c'est un biais documenté), du coup on peut supposer soit :
-Que lorsque il fait plus chaud l'activité sexuelle augmente et donc également les naissances 9 mois après (du coup est-ce que la différence entre les années 1970 et les années 2000 ne peut pas s'expliquer presque entièrement par la baisse des grossesses non désirées ?). Par ailleurs la chaleur fait également monter la Bourse, sans qu'il y ait causalité de la Bourse sur l'activité sexuelle. Variante : c'est parce qu'il fait plus chaud que l'activité sexuelle des traders augmente, et par contrecoup la Bourse aussi.
-Que lorsqu'il fait plus chaud la Bourse augmente (pour une raison inconnue). L'agent représentatif, pendant naïvement que les marchés sont efficients, en déduit que sa richesse permanente a augmenté, ce qui lui donne l'opportunité de faire plus d'enfants que prévu. D'où une augmentation rationnelle des conceptions après les hausses boursières, notamment lorsqu'elles sont dues à la chaleur estivale.
REPONSE: merci Jean-Edouard,
en fait j'ai essayé de prendre des pincettes, car ce que j'observe ce sont des naissances.... limiter l'activité sexuelle à celle qui aboutissent à une naissance quelques mois plus tard est - me semble-t-il - réducteur.... Mais bon, c'est l'été, on a le droit de chercher la distraction avant la rigueur !
Pour des raisons de confidentialité, ou pour éviter de retrouver mes graphs dans un papier de recherche sans mon nom dessus, j'ai bruité la série. La série n'est donc pas la vraie série des naissances en France, mais comme on cherche des tendances, les graphs sont proches des vrais,
> naissance=read.table("http://perso.univ-rennes1.fr/arthur.charpentier/base-naissance.txt")
> naissance$date=as.Date(naissance$date)
> plot(base$date,base$nbre)
On peut rajouter les tendances pour les jours de semaine, et les week-end,.
> t2=as.POSIXlt(naissance$date)
> jour=t2$wday
> X=naissance$date
> Y=naissance$nbre
> J=jour
> df=data.frame(X,Y,J)
> library(splines)
> regs=lm(Y~bs(X,df=20),data=df[jour%in%c(0,6),])
> Yp=predict(regs,newdata=df)
Message d'avis :
In bs(X, degree = 3L, knots = c(44.2222222222222, 814.444444444444, :
some 'x' values beyond boundary knots may cause ill-conditioned bases
> lines(X,Yp,col="red",lwd=3)
> regs=lm(Y~bs(X,df=20),data=df[jour%in%1:5,])
> Yp=predict(regs,newdata=df)
Message d'avis :
In bs(X, degree = 3L, knots = c(39.7777777777777, 810.555555555555, :
some 'x' values beyond boundary knots may cause ill-conditioned bases
> lines(X,Yp,col="blue",lwd=3)
Pour corriger de l'effet week-end, on peut faire un truc de la forme suivante,
> t2=as.POSIXlt(t) ## ‘wday’ 0-6 day of the week, starting on Sunday.
> jour=t2$wday
> jour=jour[1:(1982*7)]
> nbre2=jour
> for(i in 1:1982){
+ taux=sum(nbre[6:7+7*(i-1)])/sum(nbre[1:5+7*(i-1)])/2*5
+ nbre2[1:5+7*(i-1)]=nbre[1:5+7*(i-1)]*taux
+ nbre2[6:7+7*(i-1)]=nbre[6:7+7*(i-1)]
+ nbre2[1:7+7*(i-1)]=
+ mean(nbre[1:7+7*(i-1)])/mean(nbre2[1:7+7*(i-1)])*nbre2[1:7+7*(i-1)]
+ }
> plot(t[1:length(nbre2)],nbre2)
> X=t[1:length(nbre2)]
> Y=nbre2
> library(splines)
> reg=lm(Y~bs(X,df=20))
> Yp=predict(reg)
> lines(X,Yp,col="red",lwd=3)
Et pour visualiser uniquement le ratio semaine/week-end, on a
> nbretaux=jour
> for(i in 1:1982){
+ taux=sum(nbre[6:7+7*(i-1)])/sum(nbre[1:5+7*(i-1)])/2*5
+ nbretaux[1:7+7*(i-1)]=taux
+ }
> plot(t[1:length(nbre2)],nbretaux)
> X=t[1:length(nbre2)]
> Y=nbretaux
> library(splines)
> reg=lm(Y~bs(X,df=20))
> Yp=predict(reg)
> lines(X,Yp,col="red",lwd=3)
Pour visualiser la tendance globale dans l'année, sur les années les plus anciennes,
> X=t[1:length(nbre2)]
> Y=nbre2
> reg=lm(Y~bs(X,df=20))
> Yp=predict(reg)
> jouran=t2$yday+1
> plot(jouran[1:length(nbre2)],Y-Yp,col="grey",xlab="",ylab="")
> abline(v=cumsum(c(0,31,28,31,30,31,30,31,31,30,31,30,31)),lty=2)
> points(jouran[1:(365*10)],(Y-Yp)[1:(365*10)],col="black")
> Z=(Y-Yp)[1:(365*10)]
> XZ=jouran[1:(365*10)]
> df=data.frame(Z,XZ)
> reg=lm(Z~bs(XZ,df=20))
> dfm=data.frame(XZ=1:365)
> Zp=predict(reg,newdata=dfm)
> lines(1:365,Zp,col="red",lwd=2)
> a=c(0,31,28,31,30,31,30,31,31,30,31,30,31)
> a=cumsum(a[-13])+a[-1]/2
> text(a,400,c("JANV","FEVR","MARS","AVR","MAI","JUIN",
+ "JUIL","AOUT","SEPT","OCT","NOV","DEC"),cex=.8)
On si on veut se restreindre aux années les plus récentes,
> plot(jouran[1:length(nbre2)],Y-Yp,col="grey",xlab="",ylab="")
> abline(v=cumsum(c(0,31,28,31,30,31,30,31,31,30,31,30,31)),lty=2)
> points(jouran[10230+1:(365*10)],(Y-Yp)[10230+1:(365*10)],col="black")
> Z=(Y-Yp)[10230+1:(365*10)]
> XZ=jouran[10230+1:(365*10)]
> df=data.frame(Z,XZ)
> reg=lm(Z~bs(XZ,df=20))
> dfm=data.frame(XZ=1:365)
> Zp2=predict(reg,newdata=dfm)
> lines(1:365,Zp2,col="blue",lwd=2)
> a=c(0,31,28,31,30,31,30,31,31,30,31,30,31)
> a=cumsum(a[-13])+a[-1]/2
> text(a,400,c("JANV","FEVR","MARS","AVR","MAI","JUIN",
+ "JUIL","AOUT","SEPT","OCT","NOV","DEC"),cex=.8)
On peut alors visualiser les deux courbes ensemble,
> plot(jouran[1:length(nbre2)],Y-Yp,col="grey",xlab="",ylab="")
> abline(v=cumsum(c(0,31,28,31,30,31,30,31,31,30,31,30,31)),lty=2)
> lines(1:365,Zp2,col="blue",lwd=2)
> lines(1:365,Zp,col="red",lwd=2)
> a=c(0,31,28,31,30,31,30,31,31,30,31,30,31)
> a=cumsum(a[-13])+a[-1]/2
> text(a,400,c("JANV","FEVR","MARS","AVR","MAI","JUIN",
+ "JUIL","AOUT","SEPT","OCT","NOV","DEC"),cex=.8)
Pour les amateurs de couleurs, c'est tout simplement
> plot(jouran[1:length(nbre2)],Y-Yp,col="grey",xlab="",ylab="")
> annee=t2$year[1:length(nbre2)]
> diff=max(annee)-min(annee)
> annee2=annee-min(annee)+1
> couleur=heat.colors(diff+1)
> plot(jouran[1:length(nbre2)],Y-Yp,col=couleur[annee2],xlab="",ylab="")
> abline(v=cumsum(c(0,31,28,31,30,31,30,31,31,30,31,30,31)),lty=2)
> a=c(0,31,28,31,30,31,30,31,31,30,31,30,31)
> a=cumsum(a[-13])+a[-1]/2
> text(a,400,c("JANV","FEVR","MARS","AVR","MAI","JUIN",
+ "JUIL","AOUT","SEPT","OCT","NOV","DEC"),cex=.8)
Pour croiser avec la température, on a la base suivante
> D=read.table("http://perso.univ-rennes1.fr/arthur.charpentier/temperature-min-paris.txt")
> X=D$V1/10
> temps=(1:length(X))/365.25+1900
mais on peut aussi récupérer l'indice CAC 40
+ header=FALSE,sep=";",na.strings = "NA",dec=",")
Bref, revenons à nos températures, comme on a des belles dates, en format de date, on peut fusionner les données sur la base de la date,
> date=as.Date("04/01/1967","%m/%d/%Y")
> t=date+0:(length(Y)-1)
> baseN=data.frame(date=t,nbre=Y-Yp)
> date=as.Date("01/01/1900","%m/%d/%Y")
> t=date+0:(length(X)-1)
> baseT=data.frame(date=t,temp=X)
> base=merge(baseN,baseT)
> Diff=Y-Yp
> t3=as.POSIXlt(t)
> plot(base$temp,base$nbre,col="grey")
et après, c'est toujours pareil, on fait une régression nonlinéaire (et nonparamétrique)
> reg=lm(nbre~bs(temp,df=20),data=base)
> dfm=data.frame(temp=seq(-15,30,by=.1))
> Z=predict(reg,newdata=dfm)
Message d'avis :
In bs(temp, degree = 3L, knots = c(-0.6, 1.3, 2.7, 3.9, 4.9, 5.9, :
some 'x' values beyond boundary knots may cause ill-conditioned bases
> lines(dfm$temp,Z,col="purple",lwd=3)
Voilà un peu le code tapé rapidement a l'aéroport, en attendant mon avion.... Ca manque de rigueur pour être publié dans une revue académique, mais les tendances doivent être assez robustes (sauf au bord).