Created
July 11, 2016 15:43
-
-
Save arnaudgodin/8382e3cdb2b1bb8743bd24e77500c9fe to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #Étude sur l'Enquête nationale auprès des ménages de 2011: Indices de Gini et Courbes de Lorenz | |
| #Par Arnaud Godin | |
| #Travail présenté à Vincent Boucher | |
| #Été 2016 | |
| #Version R | |
| ################################################################################################### | |
| library(foreign) | |
| enm<-read.csv("enm-99M0002-F-2011-hierarchique_F1.csv", stringsAsFactors=FALSE) | |
| #On génère les différentes variables nécessaires pour étudier les inégalités de revenu par l'indice de Gini et la courbe de Lorenz | |
| #Revenu de marché: | |
| revmarche<-enm$MRKINC[enm$MRKINC!=9999999 & enm$MRKINC!=8888888, drop=TRUE] | |
| #Revenu après impôts: | |
| revimpot<-enm$TOTINC_AT[enm$TOTINC_AT!=999999 & enm$TOTINC_AT!=888888, drop=TRUE] | |
| #Revenu total avant impôt: | |
| revtotal<-enm$TOTINC[enm$TOTINC!=9999999 & enm$TOTINC!=8888888, drop=TRUE] | |
| #Revenu disponible: | |
| revdisp<-enm$EFDIMBM[enm$EFDIMBM!=999999 & enm$EFDIMBM!=888888, drop=TRUE] | |
| #On définit une variable de poids plus facilement manipulable: | |
| poid<-enm$WEIGHT | |
| #Il faut installer le package permettant de réaliser les traitements sur les inégalités | |
| #Reldist permet de calculer les indices de Gini pondérés ou non | |
| #install.packages("reldist") | |
| library(reldist) | |
| #On calcule d'abord les indices de Gini sans qu'il n'y ait de pondération pour la population | |
| revenu<-list(revmarche, revtotal, revimpot, revdisp) | |
| Gini<-vapply(revenu,gini,numeric(1)) | |
| #On se penche ensuite du côté de indices de Gini pondérés pour la population, pas les familles économiques | |
| Gini_Pondere<-vapply(revenu, gini, weights=(1/poid), numeric(1)) | |
| #On assigne des noms pour la matrice des résultats | |
| Revenus<-c("Revenu de marché", "Revenu total", "Revenu après impôts", "Revenu disponible") | |
| typerevenus<-data.frame(Gini, Gini_Pondere, row.names=Revenus) | |
| tableaufinal<-format(typerevenus, digits=4, justifiy="right") | |
| repeat{ | |
| presentation_gini<-readline(prompt="Quels indices de Gini voudriez-vous voir (m, t, i, d, tous, aucun)?:") | |
| if (presentation_gini=="m"){ | |
| print(tableaufinal["Revenu de marché",]) | |
| } else if (presentation_gini=="t"){ | |
| print(tableaufinal["Revenu total",]) | |
| } else if (presentation_gini=="i"){ | |
| print(tableaufinal["Revenu après impôts",]) | |
| } else if (presentation_gini=="d"){ | |
| print(tableaufinal["Revenu disponible",]) | |
| } else if (presentation_gini=="tous") { | |
| print(tableaufinal) | |
| } else if (presentation_gini=="aucun"){ | |
| print("Parfait, passons aux courbes de Lorenz") | |
| } else { | |
| print("Invalide, il faut choisir entre 'Marche', 'Total', 'Disponible', 'tous' ou 'aucun'") | |
| } | |
| if (presentation_gini=="aucun"){ | |
| break | |
| } | |
| } | |
| ################################################################################################## | |
| #On se penche maintenant du côté de la famille économique pour considérer les économies d'échelles | |
| fam<-enm$EF_ID #Les identifiants des familles économiques | |
| #Revenu de marché des familles économiques: | |
| revmarche1<-enm$MRKINC[enm$MRKINC!=9999999 & enm$MRKINC!=8888888 & enm$EF_RP!=3, drop=TRUE] | |
| famrep1<-fam[enm$MRKINC!=9999999 & enm$MRKINC!=8888888 & enm$EF_RP!=3, drop=TRUE] | |
| revmarchefam<-tapply(revmarche1, famrep1, FUN=sum) | |
| #Revenu après impôts des familles économiques: | |
| revimpot1<-enm$TOTINC_AT[enm$TOTINC_AT!=999999 & enm$TOTINC_AT!=888888 & enm$EF_RP!=3, drop=TRUE] | |
| famrep2<-fam[enm$TOTINC_AT!=999999 & enm$TOTINC_AT!=888888 & enm$EF_RP!=3, drop=TRUE] | |
| revimpotfam<-tapply(revimpot1, famrep2, FUN=sum) | |
| #Revenu total avant impôts des familles économiques: | |
| revtotal1<-enm$TOTINC[enm$TOTINC!=9999999 & enm$TOTINC!=8888888 & enm$EF_RP!=3, drop=TRUE] | |
| famrep3<-fam[enm$TOTINC!=9999999 & enm$TOTINC!=8888888 & enm$EF_RP!=3, drop=TRUE] | |
| revtotalfam<-tapply(revtotal1, famrep3, FUN=sum) | |
| #Revenu disponible des familles économiques: | |
| revdisp1<-enm$EFDIMBM[enm$EFDIMBM!=999999 & enm$EFDIMBM!=888888 & enm$EF_RP!=3, drop=TRUE] | |
| famrep4<-fam[enm$EFDIMBM!=999999 & enm$EFDIMBM!=888888 & enm$EF_RP!=3, drop=TRUE] | |
| revdispfam<-tapply(revdisp1, famrep4, FUN=sum) | |
| #famrep4 correspond à la véritable taille des familles économiques, car pour les autres types de revenus | |
| # ils n'y avait pas d'objet pour certains membres de famille et donc ils ont été retirés du calcul du revenu | |
| # total de la famille. Par contre, sous le revenu disponible, ces individus obtenait un certain revenu et apparaissaient. | |
| # Après vérification, c'est bien cette taille de famille qu'il importe d'utiliser dans les calculs | |
| ##################################################################################################### | |
| #IL FAUT TROUVER UNE MANIÈRE DE CALCULER LE POIDS DE CHAQUE FAMILLE ÉCONOMIQUE | |
| T<-factor(famrep4) #Ici, je fais sortir les identifiants des familles économiques | |
| f<-as.numeric(levels(T)) #Je créé un vecteur numérique plus facilement manipulable de ces identifiants | |
| taillef<-function(x){ | |
| sqrt(sum(famrep4==x)) | |
| } | |
| #Cette fonction indique que si l'identifiant de famrep4 équivaut à la valeur x (eg. famrep4=21), alors elle doit | |
| #faire la somme de tous les identifiants égaux à cette valeur et donner la racine carrée de cette somme. | |
| taille<-vapply(f, taillef, numeric(1)) | |
| #Ici, pour chaque valeur x du vecteur f, on applique la fonction taillef et on retourne un vecteur numérique | |
| #(eg. si f[1]=21, alors on fait taillef(21) et on place le résultat dans taille à la position taille[1]). On | |
| #obtient le vecteur de la racine carrée de la taille de toutes la familles économiques étudiées. | |
| revenu1<-list(revmarchefam, revtotalfam, revimpotfam, revdispfam) | |
| #On fait une liste avec les différents types de revenus | |
| super<-function(s){ | |
| s/taille | |
| } | |
| #La fonction ci-haut permet de diviser chaque revenu par la taille du ménage appropriée. Ainsi si s=revmarchefam | |
| #alors revmarchefam[1] est divisé par taille[1]. Cela permet donc d'évaluer les économies d'échelle au sein d'une famille | |
| #économique. | |
| revenu2<-lapply(revenu1, super) | |
| #Ce nouvel objet contient les quatre distributions de revenus des familles économiques (Une liste de vecteurs) | |
| ###################################################################################################### | |
| #On calcule maintenant les indices au niveau de la famille économique | |
| Gini1<-vapply(revenu2, gini, numeric(1)) | |
| #On se penche ensuite du côté de indices de Gini pondérés pour les familles économiques | |
| #C'est ici que l'indice de gini ne fonctionne plus avec les familles | |
| Gini_Pondere1<-vapply(revenu2, gini, weights=(1/poid), numeric(1)) | |
| #On assigne les différents indices de Gini à des vecteurs pour ensuite les faire entrer dans une matrice | |
| Revenus1<-c("Revenu de marché familles économiques", "Revenu total familles économiques", "Revenu après impôt familles économiques", "Revenu disponible familles économiques") | |
| typerevenus1<-data.frame(Gini1, Gini_Pondere1, row.names=Revenus1) | |
| tableaufinal1<-format(typerevenus1, digits=4, justifiy="right") | |
| print(tableaufinal1) | |
| repeat{ | |
| presentation_gini_famille<-readline(prompt="Quels indices de Gini pour les familles économiques voudriez-vous voir (m, t, i, d, tous, aucun)?:") | |
| if (presentation_gini=="m"){ | |
| print(tableaufinal1["Revenu de marché familles économiques",]) | |
| } else if (presentation_gini=="t"){ | |
| print(tableaufinal1["Revenu total familles économiques",]) | |
| } else if (presentation_gini=="i"){ | |
| print(tableaufinal1["Revenu après impôt familles économiques",]) | |
| } else if (presentation_gini=="d"){ | |
| print(tableaufinal1["Revenu disponible familles économiques",]) | |
| } else if (presentation_gini=="tous") { | |
| print(tableaufinal1) | |
| } else if (presentation_gini=="aucun"){ | |
| print("Parfait, passons aux courbes de Lorenz") | |
| } else { | |
| print("Invalide, il faut choisir entre 'Marche', 'Total', 'Disponible', 'tous' ou 'aucun'") | |
| } | |
| if (presentation_gini=="aucun"){ | |
| break | |
| } | |
| } | |
| ########################################################################################################## | |
| #Maintenant, c'est les courbes de Lorenz qui nous intéressent |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment