forum

Statistiques Basiques » Calcul de fréquence des modalités d'une question à choix multiple

Booster Fronde

rank_0.png

Avatar

Inscrit le: 07/11/2017

Messages: 5

Le 12/11/2017 à 21h05
Bonjour
J'ai collecté des données socio-économiques à l'aide ODK que j'analyse sous R. J'ai une question à choix multiples avec plusieurs modalités que je voudrais avoir la fréquence de chaque modalité.
J'ai essayé de convertir toutes modalités de la variable en des variables boolénnes en utilisant ce code:
qcm$q0_cacao <- ifelse(str_detect(qcm$farm_type, pattern="cacao"), 1, 0)
qcm$q0_cafe <- ifelse(str_detect(qcm$farm_type, pattern="cafe"), 1, 0)
qcm$q0_anacarde <- ifelse(str_detect(qcm$farm_type, pattern="anacarde"), 1, 0)
qcm$q0_hevea <- ifelse(str_detect(qcm$farm_type, pattern="hevea"), 1, 0)
....
....

Je voudrais calculer la fréquence de chaque modalité sous R et l'avoir sous forme de tableau comme suit: https://www.dropbox.com/s/jeofweytnhansn3/result.xlsx?dl=0
Je sais le faire sous Stata en utilisant la commande mrtab q0_cacao - q0_xxxx by (village_name) column mais je voudrais effectuer toute l'analyse en utilisant exclusivement R.

Mes données : https://www.dropbox.com/s/dmlog5pjmmkm83c/qcm.xlsx?dl=0
   

Administrateur

rank_admin.png

Avatar

Inscrit le: 16/05/2010

Messages: 17

Le 15/11/2017 à 14h38
Code R :
 
library(tidyverse)
library(stringr)
 
# Importer les données et changer le nom des colonnes
df <- read_tsv(file.choose())  
colnames(df) <- c("village", "respondant", "farm_type")
 
# Fonction d'aide pour compter
count_farm <- function(x, type){
  str_detect(x, type) %>%
    sum()
}
 
# 1. Grouper les donner par village 
# 2. Compter les fréquencesde chaque modalité
res <- df %>%
  group_by(village) %>%
  summarise(
    Cacao = count_farm(farm_type, "cacao"),
    Manioc = count_farm(farm_type, "manioc"),
    Palmier = count_farm(farm_type, "palmier")
  ) 
res
 


Le résultat ressemble à çà:

# A tibble: 3 x 4
   village Cacao Manioc Palmier
           
1   Abigui     6      4       1
2      Man     4      5       2
3 Tiassale     5      2       1
Site web    

Booster Fronde

rank_0.png

Avatar

Inscrit le: 07/11/2017

Messages: 5

Le 15/11/2017 à 16h09
Bonjour Abdoukadel
Super!
Quel serait le code si l'on veut avoir les fréquences (résultat ci-dessus) en pourcentage?
Merci beaucoup d'avance, vous enlevez une épine du dos.
Respectueusement
Jean-Luc
   

Administrateur

rank_admin.png

Avatar

Inscrit le: 16/05/2010

Messages: 17

Le 17/11/2017 à 06h58
Pour calculer les proportion par rapport au total de la ligne, vous taper le code suivant:

Code R :
 
row.sum <- apply(res, 1, sum)
prop <- res/row.sum
prop
 


Pour calculer la proportion par rapport au total des colonnes:

1. Transposer les données
2. Utiliser le même code que précédemment
3. Re-transposer pour avoir les données dans leur format d'origine

Code R :
 
res.t <- t(res)
row.sum <- apply(res.t, 1, sum)
prop <- t(res.t/row.sum)
prop
 
Site web    

Booster Fronde

rank_0.png

Avatar

Inscrit le: 07/11/2017

Messages: 5

Le 17/11/2017 à 15h39
Bonjour
J'ai essayé mais cela renvoie un message d'erreur "Error in FUN(newX[, i], ...) : invalid 'type' (character) of argument"
   

Booster Fronde

rank_0.png

Avatar

Inscrit le: 07/11/2017

Messages: 5

Le 20/11/2017 à 17h08
Comment calculer la proportion par rapport au total des individus par village [Tiassale=6, Abigui = 6; Man = 5] et non par rapport total de la ligne ou la colonne
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté