PC & Mobile

Utilisation d’outils inverses avec les données d’enquête Pew Research Center dans R

Utilisation d’outils inverses avec les données d’enquête Pew Research Center dans R


(Illustration de Selena Qian / Centre de recherche Pew)

L'année dernière, j'ai écrit un article de blog d'introduction sur la manière d'accéder aux données d'enquête de Pew Research Center et de les analyser avec R, un logiciel gratuit et à code source ouvert pour l'analyse statistique. Cet article a montré comment effectuer des tâches à l’aide du programme d’enquête.

le sondage Ce package est idéal si vous analysez des données d’enquête et que vous avez besoin d’estimations de la variance tenant compte de plans d’échantillons complexes, tels que des échantillons en grappes ou une stratification. Cependant, la première étape de toute analyse de données consiste souvent à explorer les données avec des résumés simples mais puissants, tels que des tableaux croisés et des graphiques. Cela nécessite généralement un recodage important des variables ainsi que le nettoyage des données et d'autres tâches de manipulation qui peuvent être difficiles et contre-intuitives. Heureusement, quelque chose appelé «Tidyverse» est là pour vous aider.

Dans cet article, je montrerai comment utiliser tidyverse des outils pour effectuer des analyses exploratoires des données d’enquête du Pew Research Center. (Cependant, ces outils peuvent être utilisés avec des données de n'importe quelle source.)

Qu'est-ce que le «tidyverse»?

R dispose d’une large communauté d’utilisateurs, dont beaucoup mettent librement leur propre code à la disposition d’autres utilisateurs sous forme de packages qui implémentent des types d’analyses spécialisés ou permettent d’autres tâches de programmation.

Les packages R sont généralement hébergés sur le réseau CRAN (Comprehensive R Archive Network), mais sont également disponibles sur d’autres référentiels de code principalement ouverts, tels que github, gitlab ou bioconducteurs. L’un des avantages de R est que tout le monde peut créer un package et contribuer au développement du logiciel. Mais avec autant de packages (il y en avait 14 366 sur CRAN au 12 juin 2019), il existe souvent de nombreuses manières différentes de relever le même défi. Cela peut entraîner des incohérences souvent source de confusion, ce qui rend plus difficile la tâche des nouveaux utilisateurs ou de ceux qui cherchent à développer leurs compétences en R.

Entrer le tidyverse, une collection de packages R conçus pour la science des données, qui partagent une philosophie de conception cohérente et produisent un code qui peut être plus facilement compris et partagé. le tidyverse compte une communauté grandissante d'utilisateurs, de contributeurs et de développeurs qui souhaitent aider les utilisateurs de R à accéder à ces outils gratuits à source ouverte et à les apprendre. Le livre R for Data Science de Hadley Wickham et Garrett Grolemund décrit de nombreux éléments clés de la façon d'utiliser ces outils pour faire de la science des données en R et peut être consulté gratuitement en ligne.

Paquets

Pour ce poste, nous aurons besoin de la tidyverse et des paquets de refuge. le havre package est la solution de tidyverse pour importer et exporter des données à partir de plusieurs formats, y compris SPSS (le format dans lequel la plupart des jeux de données du Centre sont actuellement publiés), SAS et Stata.

Les seules fonctions de la havre paquet que nous utiliserons ici sont read_sav () et as_factor (). Toutes les autres fonctions référencées dans ce post proviennent de paquets comme Dplyr, forcer ou ggplot2, qui sont chargés automatiquement avec le paquet tidyverse.

Si vous ne possédez pas déjà ces packages, vous devrez les installer pour pouvoir exécuter le code contenu dans ce message. Même si vous avoir déjà installés, vous pouvez les mettre à jour en exécutant le code ci-dessous:

install.packages ("tidyverse")
install.packages ("haven")

Ensuite, chargez les paquets avec le bibliothèque() une fonction:

bibliothèque (tidyverse) 
# charge tous les paquets "principaux" de Tidyverse comme
#dplyr, tidyr, forcats et ggplot2
bibliothèque (refuge)

Les pipes

L’une des caractéristiques les plus intéressantes de Tidyverse est qu’il est plus important de rendre le code plus facile à lire et à comprendre. Un outil clé pour améliorer la lisibilité du code tidyverse est le tuyau, un ensemble de trois caractères qui ressemble à ceci: %>%. Placer un tuyau à la droite d'un objet (tel que données%>%) dit à R de prendre l'objet à sa gauche et de l'envoyer à sa droite. Cela vous permet de chaîner plusieurs commandes sans vous perdre dans une tempête de grêle de parenthèses.

Utilisons un jeu de données de culture pop pour illustrer ce point. le guerres des étoiles Le jeu de données fourni avec le paquet tidyverse contient des informations sur les personnages des films, disponibles via l'API Star Wars. Supposons que nous voulions filtrer le jeu de données en fonction de tous les caractères pour lesquels une hauteur est connue, organiser le jeu de données par ordre décroissant de hauteur, puis changer la variable de hauteur de centimètres en pouces.

Voici le code pour le faire sans utiliser de tuyaux:

mute (arrange (filtre (starwars,! is.na (hauteur)), desc (hauteur)), hauteur = 0.393701 * hauteur)

Et voici le code avec le tuyau:

starwars%>% 
filtre (! is.na (hauteur))%>%
arrange (desc (hauteur))%>%
muter (hauteur = 0.393701 * hauteur)

En ce qui concerne R, ces deux codes font exactement la même chose. Mais en utilisant une série de tuyaux, il est beaucoup plus facile pour les humains de lire et de comprendre exactement ce qui se passe et dans quel ordre. Le code ci-dessus peut être facilement lu comme une série d’étapes: créez le jeu de données starwars, filtrez-le dans les cas où la hauteur n’est pas manquante, organisez les cas restants par ordre décroissant, puis modifiez la variable hauteur en pouces.

La lisibilité facilite le partage de votre code avec d'autres personnes. Même si vous ne partagez jamais votre code avec qui que ce soit, cette approche vous permettra de comprendre votre propre code plus facilement si vous avez besoin de le revoir des semaines, des mois voire des années plus tard, lorsque les détails ne sont plus d'actualité. . (Cela peut également aider votre équipe à éviter des dettes techniques.)

Au-delà de la lisibilité, les pipes facilitent la maintenance de votre code. Il est facile de supprimer une étape, d’insérer une nouvelle étape ou de modifier l’ordre lorsque toutes les commandes se trouvent dans une série séquentielle de canaux plutôt que de manière imbriquée.

Chargement des données dans R

Passons à la vitesse supérieure et reportons notre attention sur l’utilisation de tidyverse des outils pour analyser les données d’enquête du Pew Research Center. Vous pouvez télécharger les ensembles de données du Centre via ce lien et en savoir plus sur le type de données que nous publions et sur la manière d’y accéder.

Pour les besoins de ce document d’information, nous utiliserons les données de notre enquête politique d’avril 2017. Nous allons parcourir comment utiliser tidyverse des outils permettant de calculer des estimations d’enquête pondérées (en particulier l’approbation du président Donald Trump), ventilées par d’autres variables de notre ensemble de données (éducation, race / ethnie et génération).

La première étape consiste à charger le jeu de données dans votre environnement R. Presque tous les jeux de données pouvant être téléchargés à partir du Centre sont stockés sous forme de fichiers .sav (SPSS). Le paquet refuge peut importer des jeux de données créés par SPSS et un certain nombre de programmes tels que Stata et SAS.

Certaines fonctionnalités des jeux de données SPSS nécessitent un traitement spécial lors du chargement de données dans R. Les fichiers SPSS contiennent souvent des variables avec des étiquettes de caractères et des codes numériques qui ne sont pas nécessairement séquentielles (par exemple, pour l'ID du parti, 1 = républicain, 2 = démocrate, 9 = Refusé). SPSS permet également aux variables d'avoir plusieurs valeurs manquantes définies par l'utilisateur. Ce type de métadonnées variables est utile, mais il ne correspond pas aux types de données standard de R.

le havre Le package gère ces différences en important des variables dans un format personnalisé appelé "étiqueté" et en laissant à l'utilisateur le choix des codes numériques ou des étiquettes de valeur avec lesquels il souhaite travailler dans R.

Nous allons importer les données en utilisant read_sav () une fonction. Nous allons mettre user_na = TRUE pour vous assurer que les réponses telles que "Ne sait pas" ou "Refus" ne sont pas automatiquement converties en valeurs manquantes. Dans ce cas, nous souhaitons également convertir toute étiqueté variables en facteurs afin que nous puissions travailler avec des étiquettes de valeur au lieu des codes numériques (par exemple "républicain" au lieu de "1"). Nous faisons cela par piping (%>%) l'ensemble du jeu de données sur as_factor () fonction qui convertit les variables libellées dans l'ensemble de données en facteurs.

Apr17 <- read_sav ("Apr17 public.sav", 
user_na = TRUE)%>%
as_factor ()

Ajout de variables avec subir une mutation

La première question (q1) sur l’enquête d’avril 2017, a demandé si les répondants approuvaient jusqu’à présent les performances de Trump en tant que président. La prochaine question (q1a) a demandé aux répondants dans quelle mesure ils approuvaient ou désapprouvaient ("Très fortement", "Pas si fort", "Ne sait pas / Refus (VOL.)"). Nous voulons utiliser ces deux variables pour créer une nouvelle variable qui combine q1 et q1a. Ce type de recodage est extrêmement courant lorsque vous travaillez avec des données d’enquête, mais cela peut s'avérer une tâche étonnamment difficile lorsque vous utilisez uniquement des fonctions de base R. le Dplyr package, qui est chargé automatiquement dans le cadre du tidyverse package, inclut un certain nombre d’outils qui facilitent beaucoup ce type de tâches de traitement de données.

Le plus général d'entre eux est la fonction mutate (), qui ajoute de nouvelles variables à un cadre de données ou modifie des variables existantes. Nous allons utiliser subir une mutation() dans le code ci-dessous pour créer une variable appelée trump_approval. Le recodage réel est effectué avec la fonction case_when (), qui évalue une série de conditions et renvoie la valeur associée à la première qui s'applique.

17 avril % 
mutate (trump_approval = case_when (

q1 == "Approuve" & q1a == "Très fortement" ~ "Approuve fortement",
q1 == "Approuve" & q1a! = "Très fortement" ~ "N'approuve pas trop",
q1 == "désapprouve" & q1a == "très fortement" ~ "fortement désapprouve",
q1 == "Désapprouve" & q1a! = "Très fortement" ~ "Pas fortement désapprouvé",
q1 == "Ne sait pas / Refuse (VOL.)" |
q1a == "Ne sait pas / Refus (VOL.)" ~ "Refusé"
) #cette parenthèse ferme l'appel à
#case_when et l'envoie à
#fct_relevel avec%>%
%>%
fct_relevel ("Approuve fortement",
"N'approuve pas fortement",
"Pas fortement désapprouver",
"Désapprouve fortement",
"Refusé"
) #cette parenthèse ferme notre appel à fct_relevel
) #cette parenthèse ferme notre appel à muter

Nous fournissons une série de formules au case_when () une fonction. Chaque formule est une déclaration «si-alors», où le côté gauche (tout à gauche de ~) décrit une condition logique et le côté droit fournit la valeur à renvoyer si cette condition est vraie. Pour rappel, vous pouvez taper? Case_when () pour accéder à la page d’aide (cela fonctionne pour toutes les fonctions de R, pas seulement case_when ()).

La première ligne de l'appel à case_when () est: q1 == "Approuver" & q1a == "Très fortement" ~ "Fortement approuver". Cela peut être interprété comme signifiant que le répondant a dit "approuver" q1 et a répondu "très fortement" à q1a, nous allons donc les coder comme "Fortement approuver" dans notre nouveau trump_approval variable. Nous utilisons cinq clauses différentes pour créer ces nouvelles catégories et ajoutons la variable trump_approval à notre jeu de données.

Parce que case_when () retourne les variables de caractères lorsqu'il est utilisé de cette façon, la dernière étape consiste à diriger la variable vers fct_relevel () à partir du forcer paquet. Cela convertit trump_approval à un facteur et ordonne les catégories de "Approuve fortement" à "Refusé".

Nous pouvons exécuter le table commande sur notre nouvelle variable pour vérifier que tout a fonctionné comme prévu.

table (avr17 $ trump_approval, avr17 $ q1)
##
## Approuver Désapprouver Ne sais pas /
## Refusé (VOL.)
## Fortement approuver 476 0 0
## Pas du tout approuvé 130 0 0
## Pas fortement en désaccord 0 143 0
## Désapprouve vivement 0 676 0
## Refusé 0 0 76

Après avoir créé notre nouvelle trump_approval variable, nous aimerions voir comment elle se décompose en fonction de quelques caractéristiques démographiques différentes: le niveau de formation (Educ2 dans le jeu de données Apr17), race / ethnicty (racethn) et génération (gen5).

Mais Educ2 comporte neuf catégories, dont certaines ne comptent pas beaucoup de répondants. Nous voulons donc les réduire en moins de catégories avec un plus grand nombre de répondants. Nous pouvons le faire avec le forcer une fonction fct_collapse (). Nous utilisons subir une mutation() encore pour faire de nouvelles variables.

Voyons d’abord les options de réponse de educ2 pour voir les catégories que nous devons effondrer. Depuis que nous avons utilisé as_factor () quand on lit l'ensemble de données dans, Educ2 est un facteur variable. Donc, nous pouvons voir les options de réponse en utilisant le niveaux() une fonction.

niveaux (Apr17 $ educ2)
## [1] "Moins que le secondaire (1 re à 8 e année ou aucune scolarité formelle)"                                
## [2] "Études secondaires incomplètes (9 e à 11 e année ou 12 e année sans diplôme)"
## [3] "Diplôme d'études secondaires (12e année avec diplôme ou certificat GED)"
## [4] "Un collège sans diplôme (y compris un collège communautaire)"
## [5] "Deux années d'associé d'un collège ou d'une université"
## [6] "Diplôme universitaire ou baccalauréat de quatre ans (par exemple, BS, BA, AB)"
## [7] "Quelques études supérieures ou professionnelles, aucun diplôme de troisième cycle"
## [8] "Diplôme universitaire ou professionnel, y compris maîtrise, doctorat, diplôme en médecine ou en droit"
## [9] "Je ne sais pas / Refusé (VOL.)"

Maintenant que nous connaissons les niveaux, nous pouvons les réduire en moins de catégories. Le premier argument à fct_collapse () est la variable dont vous voulez réduire les catégories, dans notre cas Educ2. Nous assignons de nouvelles catégories à gauche, comme "Diplôme d'études secondaires ou moins", dans l'exemple ci-dessous. Nous utilisons le c () fonction de dire fct_collapse () ces catégories appartiennent à notre nouvelle catégorie "Diplôme d'études secondaires ou moins". Notez que vous devez utiliser les noms exacts de ces catégories.

17 avril % 
mutate (educ_cat = fct_collapse (educ2,
"Diplôme d'études secondaires ou moins" = c (
"Moins que le lycée (1ère à la 8ème année ou pas d'éducation formelle)"
"Etudes secondaires incomplètes (9 e à 11 e année ou 12 e année sans diplôme)",
"Diplôme d'études secondaires (12e année avec diplôme ou certificat GED)"
),
"Un collège" = c (
"Un collège sans diplôme (y compris un collège communautaire)",
"Deux années d'associé d'un collège ou d'une université"
),
"Diplôme universitaire +" = c (
"Diplôme universitaire ou baccalauréat de quatre ans (par exemple, BS, BA, AB)",
"Certaines études post-universitaires ou professionnelles, pas de diplômes d'études supérieures",
"Diplôme universitaire ou professionnel, y compris maîtrise, doctorat, diplôme en médecine ou en droit"
)
) #cette parenthèse ferme notre appel
#à fct_collapse
) #cette parenthèse ferme notre appel à muter

Obtenir des estimations pondérées avec group_by et récapituler

Maintenant que nous avons créé et recodé les variables que nous voulons estimer, nous pouvons utiliser le Dplyr fonctions group_by () et summary () pour produire des résumés pondérés des données. On peut utiliser par groupe() dire à R de regrouper l'ensemble de données Apr17 en fonction de ces variables, puis résumer() créer des statistiques récapitulatives parmi ces groupes.

Pour nous assurer que nos estimations sont représentatives de la population, nous devons utiliser les poids de sondage (variable nommée poids) inclus dans notre jeu de données, comme dans presque tous les jeux de données du Centre. Pour l'échantillon total, nous pouvons calculer les pourcentages pondérés en additionnant les poids des répondants pour chaque catégorie et en divisant par la somme des poids pour l'ensemble de l'échantillon.

La première étape consiste à par groupe() trump_approval et ensuite utiliser résumer() pour obtenir la somme des poids pour chaque groupe. Ensuite on utilise subir une mutation() convertir ces totaux en pourcentages.

La première étape du code est la suivante:

trump_approval % 
group_by (trump_approval)%>%
résumer (pondéré_n = somme (poids))

On peut voir ça par groupe() et résumer() nous donne un tableau avec une ligne pour chaque groupe et une colonne pour les variables récapitulatives que nous avons créées. Si on regarde le trump_approval objet que nous venons de créer, nous pouvons voir que nous avons une colonne pour chacune des catégories de notre trump_approval variable (que nous avons passé à par groupe()) et une colonne créée par nous pondéré_n. le pondéré_n colonne est la somme pondérée de chaque catégorie dans trump_approval.

Mais puisque nous voulons montrer des proportions, nous avons un autre pas à faire. Nous allons utiliser subir une mutation() ajouter une colonne appelée weighted_group_size c'est la somme de pondéré_n. Ensuite, nous divisons simplement pondéré_n par weighted_group_size et stocker dans une colonne appelée poids_estimé, ce qui nous donne nos proportions pondérées.

trump_approval % 
## group by trump_approval pour calculer les totaux pondérés
## en prenant la somme des poids
group_by (trump_approval)%>%
résumer (pondéré_n = somme (poids))%>%
## ajouter le weighted_group_size pour obtenir le total pondéré n et
## divisez weighted_n par weighted_group_size pour obtenir les proportions
mutate (weighted_group_size = sum (weighted_n),
weighted_estimate = weighted_n / weighted_group_size
)

trump_approval

## # Un tibble: 5 x 4
## trump_approval weighted_n weighted_group_size weighted_estimate
##
## 1 Fortement
## approuver 1293. 4319. 0.299
## 2 Pas trop
## approuver 408. 4319. 0.0945
## 3 Pas trop
## désapprouve 458. 4319. 0.106
## 4 fortement
## désapprouve 1884. 4319. 0.436
## 5 Refusé 275. 4319. 0.0636

Pour ajouter une variable de sous-groupe et obtenir un tableau croisé pondéré, nous pouvons utiliser la même procédure avec un léger ajout. Au lieu d'aller directement de résumer() à subir une mutation() et en ajoutant la taille et les proportions de nos groupes, nous devons dire subir une mutation() calculer le weighted_group_size de educ_cat. Ceci donne le nombre pondéré de répondants qui appartiennent à chaque catégorie de educ_cat ("Diplôme d'études secondaires ou moins", "Certains collèges", "Diplôme d'études collégiales +", "Ne sait pas / Refus (VOL.)")

trump_estimates_educ % 
## groupe par éduc et approbation pour obtenir des n pondérés par groupe
group_by (educ_cat, trump_approval)%>%
## calculer le nombre total de personnes dans chaque réponse et catégorie d'éducation en utilisant les poids de sondage (poids)
résumer (pondéré_n = somme (poids))%>%
## groupe par éducation pour calculer la taille de la catégorie d'éducation
group_by (educ_cat)%>%
## ajouter des colonnes pour la taille totale du groupe et la proportion
mutate (weighted_group_size = sum (weighted_n),
weighted_estimate = weighted_n / weighted_group_size)

trump_estimates_educ

## # Un tibble: 17 x 5
## # Groupes: educ_cat [4]
## educ_cat trump_approval weighted_n weighted_group_… weighted_estima…
##
## 1 High Schoo… Fortement approché… 550. 1710. 0.322
## 2 High Schoo… Pas fortement… 207. 1710. 0.121
## 3 High Schoo… Pas trop d… 221. 1710. 0.129
## 4 High Schoo… Fortly Disap… 593. 1710. 0.347
## 5 Haute école… Refusé 140. 1710. 0.0817
## 6 Some colle… Fortement approché… 404. 1337. 0.302
## 7 Certains collèges… pas fortement… 111. 1337. 0.0833
## 8 Certains collèges… Pas fortement d… 128. 1337. 0.0959
## 9 Certains collèges… Fortement déçus… 605. 1337. 0.453
## 10 Some colle… Refusé 88,1 1337. 0,0659
## 11 College gr… Fortement approché… 336. 1258. 0.267
## 12 College gr… pas fortement a… 89,9 1258. 0,0715
## 13 College gr… Pas fortement d… 109. 1258. 0.0870
## 14 College gr… Fortement disap… 676. 1258. 0.537
## 15 College gr… Refusé 47.0 1258. 0.0373
## 16 Je ne sais pas… Fortement approché… 2,97 13,3 0,224
## 17 Je ne sais pas… très déçu… 10.3 13.3 0.776

Cela peut sembler beaucoup de travail de créer un tableau croisé pondéré, et il existe certainement des moyens plus simples de le faire si vous n’avez que ce dont vous avez besoin. Cependant, cela nous donne une grande flexibilité pour créer un nombre illimité d’autres statistiques sommaires en plus des pourcentages pondérés. Parce que les résumés sont stockés en tant que trame de données, il est facile de les convertir en graphiques ou de les utiliser dans d’autres analyses. (Techniquement, la sortie est une approche de tibble, tidyverse des trames de données.)

Peut-être plus utilement, nous pouvons utiliser cette approche pour créer simultanément des résumés pour un grand nombre de variables démographiques ou de résultats. Dans cet exemple, nous ne sommes pas seulement intéressés à sortir trump_approval par educ_cat, mais aussi le racethn et gen5 variables. Avec un peu de remodelage des données en utilisant le recueillir() fonction, nous pouvons utiliser la procédure pour obtenir tous les résumés de nos sous-groupes à la fois.

Réorganisation des données avec recueillir()

La première étape pour simplifier un peu le processus consiste à utiliser le jeu de données Apr17 et à ne sélectionner que les colonnes dont nous avons besoin pour notre analyse à l'aide de la commande sélectionner() une fonction. le sélectionner() fonction est comme un couteau suisse de garder, réarranger ou laisser tomber (en utilisant -) colonnes. Il existe également un certain nombre de fonctions d’aide telles que commence avec(), se termine par()et allumettes() cela facilite la sélection d'un certain nombre de colonnes avec un certain modèle de nommage au lieu de nommer chaque colonne explicitement. Vous pouvez également renommer des variables avec sélectionner() en fournissant un nouveau nom de variable avant un = et l'ancien nom de variable.

17 avril % 
sélectionnez (resp_id = psraid,
poids,
trump_approval,
educ_cat, racethn, gen5)

Cette ligne de code utilise le sélectionner() fonction pour limiter le jeu de données Apr17 aux seules colonnes dont nous avons besoin pour notre analyse. Juste pour illustrer le fonctionnement du changement de nom, nous allons changer le nom de l’identifiant du répondant de psraid à resp_id. Nous conserverons le poids de l’enquête (poids), la trump_approval variable et les variables de sous-groupe qui nous intéressent (educ_cat, racethn et gen5).

tête (avril17)
## # Un tibble: 6 x 6
## resp_id weight trump_approval educ_cat racethn gen5
##
## 1 100005 2.94 Fortement disparus… Diplôme universitaire + Noir, non… Silencieux (1…
## 2 100010 1.32 Pas très appr… Un certain Boomer hispanique (1…
## 3 100021 1.24 Fortement disparus… Diplôme universitaire + Blanc, non… Silencieux (1…
## 4 100028 4.09 Approuve fortement Some White, non… Boomer (1…
## 5 100037 1.12 Graduate College refusée + Blanc, non… Boomer (1…
## 6 100039 6.68 Fortement disparus… Graver des études secondaires… Noir, non… Boomer (1…

L'étape suivante consiste à réorganiser les données de manière à faciliter le calcul des statistiques récapitulatives pondérées pour chaque groupe démographique. Nous allons faire cela avec la fonction rassembler (), qui remodèle les données du format «large» au format «long» - une fonction extrêmement utile lorsque vous travaillez avec des données. (Récemment, l'équipe derrière le tidyr package introduit des fonctions appelées pivot_longer () et pivot_wider (). Ces fonctions ne remplaceront pas recueillir() et propager(), mais sont conçus pour être plus utiles et intuitifs.)

En format large, il y a une ligne par personne et une colonne par variable. En format long, il y a plusieurs lignes par personne: une pour chacune des variables démographiques que nous voulons analyser. Les colonnes démographiques séparées sont remplacées par une paire de colonnes; une colonne "clé" et une colonne "valeur". Ici, la colonne "clé" est appelée variable_sous-groupeet identifie la variable démographique associée à cette ligne (une des educ_cat, racethn, ou gen5). La colonne "valeur" est appelée sous-groupe et identifie la catégorie démographique spécifique à laquelle appartient la personne.

Apr17_long % 
rassembler (clé = variable_sous-groupe, valeur = sous-groupe,
educ_cat, racethn, gen5)

Dans ce code, nous disons recueillir() nommer la variable clé "variable_sous-groupe" et nommer la colonne de valeur "sous-groupe" Les arguments restants spécifient les noms des colonnes que nous voulons rassembler en lignes. Après le recueillir() À ce stade, nous sommes passés d’un vaste ensemble de données comportant 1 501 lignes à un ensemble de données long comprenant 4 503 lignes (1 501 répondants x 3 variables démographiques).

Si vous voulez en savoir plus sur recueillir(), Je recommande de commencer avec ce tweet par Alison Hill du WeAreRLadies compte Twitter. Vous pouvez également aller au chapitre des données ordonnées dans le chapitre précédent. R pour Data Science livre.

Maintenant que nos données sont disposées dans ce format, obtenir des résumés pondérés pour les trois variables de sous-groupe n’est qu’une question d’ajout d’une autre variable de regroupement. Alors qu'avant nous avons groupé par educ_cat, nous pouvons maintenant utiliser notre nouveau produit variable_sous-groupe et sous-groupe colonnes à la place.

trump_estimates % 
Approbation #group by variable_sous-groupe, sous-groupe et atout
group_by (variable_sous-groupe, sous-groupe, approbation_de_saventures)%>%
# calcule le nombre total de personnes dans chaque réponse et éducation # catégorie en utilisant les poids de sondage (poids)
résumer (pondéré_n = somme (poids))%>%
#groupe par sous-groupe uniquement pour calculer la taille de la catégorie de sous-groupe
group_by (sous-groupe)%>%
#add colonnes pour la taille totale du groupe et la proportion
mutate (weighted_group_size = sum (weighted_n),
weighted_estimate = weighted_n / weighted_group_size)

Comme nous ne sommes vraiment intéressés que par les proportions, nous allons supprimer les colonnes weighted_total et weighted_group_size à l’aide de la fonction select (). Y compris le - avant un nom de colonne indique à select () de supprimer cette colonne.

trump_estimates % 
select (-weighted_n, -weighted_group_size)

Voici ce que nous finissons avec.

trump_estimates
## # Un tibble: 70 x 4
## # Groupes: sous-groupe [14]
## sous-groupe_variable sous-groupe trump_approval weighted_estima…
##
## 1 educ_cat Diplôme universitaire + Tout à fait approuvé, 0,267
## 2 educ_cat Diplôme d'études collégiales + Pas très appr… 0.0715
## 3 educ_cat Diplômé universitaire + Pas très dissa… 0.0870
## 4 educ_cat Diplomé du Collège + Fortement disparu… 0.537
## 5 educ_cat Diplômé du collège + Refusé 0.0373
## 6 educ_cat Ne sais pas / Refuse… Approuvez fermement 0.0203
## 7 educ_cat Ne sais pas / Refuse… Fortement disparus… 0.0704
## 8 educ_cat Diplôme d'études secondaires… Fortement approuver 0,322
## 9 educ_cat Diplôme d'études secondaires… Pas très appr… 0.121
## 10 educ_cat Diplômé du secondaire… pas très dissa… 0,129
## #… avec 60 lignes supplémentaires

En organisant les données de cette manière, il est facile de créer des tracés ou des tableaux des variables d'intérêt. Vous trouverez ci-dessous un exemple de graphique simple des estimations que nous avons créées dans cet article. Nous utilisons la fonction filter () pour supprimer la catégorie «Refusé» de la trump_approval variable et dans l'une de nos variables de sous-groupe. Ensuite, nous canalisons ces données dans le code de traçage de ggplot2.

trump_estimates%>% 
filter (trump_approval! = "Refusé")%>%
filtre (! (sous-groupe% en%
c ("Ne sait pas / Refus (VOL.)", "NSP / Réf")))%>%
ggplot (
aes (
x = weighted_estimate,
y = sous-groupe
)
) +
geom_point () +
scale_x_continuous (limits = c (0, .8),
pauses = seq (0, .6, par = .2),
labels = scale :: percent (
seq (0, .6, par = .2), précision = 1)
) +
facet_grid (cols = vars (trump_approval),
rows = vars (variable_sous-groupe),
scale = "free_y",
espace = "libre"
) +
theme_bw () +
thème (axis.title.y = element_blank ())
Utilisation d’outils inverses avec les données d’enquête Pew Research Center dans R - Utilisation d’outils inverses avec les données d’enquête Pew Research Center dans R

Voici tout le code nécessaire utilisé dans le post:

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close