2017-08-16 2 views
0

Je ne suis pas un statisticien, mais je veux utiliser la probabilité de base pour comprendre ce qui se passe avec mes données.Analyse de probabilités de base à l'aide de bacs dans R

J'ai créé une méthode lourde mais très utile pour examiner mes données dans des groupes spécifiques en utilisant des histogrammes puis en comparant les différents groupes que je suis intéressé à analyser avec le groupe global. Cela nous a montré des idées incroyables dans notre entreprise et il est facile d'expliquer ce qui se passe dans le graphique. Cela étant dit, c'est assez fastidieux et il serait logique que ce type d'analyse soit si utile que d'autres auraient déjà créé une fonction pour cela.

Voici mon code ci-dessous. Ce type d'analyse existe-t-il déjà dans une fonction? J'ai aussi utilisé logi.hist.plot() qui fait quelque chose de similaire, mais cela peut être problématique et je préfère utiliser cette "vue brute" des données.

library(dplyr) 
library(ggplot2) 

#Create the data 
set.seed(84102) 
daba <- data.frame(YES_NO = c(0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1)) 
daba$UserCount <-  c(23,43,45,65,32,10,34,68,65,75,43,24,37,54,73,29,87,32,21,12) 

#Create the bins using hist(), clean up bins and make them integers 
hist_breaks <- cut(daba$UserCount, breaks = hist(daba$UserCount, breaks =  20)$breaks) 
daba$Breaks <- hist_breaks 
daba$Breaks <- sub(".*,","",daba$Breaks) 
daba$Breaks <- sub("]","",daba$Breaks) 
daba$Breaks[is.na(daba$Breaks)] <- 0 
daba$Breaks <- as.integer(daba$Breaks) 

#Create two data groups to be compared 
daba_NO <- filter(daba, daba$YES_NO == 0) 
daba_YES <- filter(daba, daba$YES_NO == 1) 

#Aggregate user count into histogram bins using aggregate() 
daba_NOAgg <- aggregate(data = daba_NO, daba_NO$Breaks~daba_NO$UserCount, sum) 
daba_YESAgg <- aggregate(data = daba_YES, daba_YES$Breaks~daba_YES$UserCount, sum) 

#Rename the columns to clean it up 
colnames(daba_NOAgg) <- c("UserCountNo", "Breaks") 
colnames(daba_YESAgg) <- c("UserCountYes", "Breaks") 

#Merge the two groups back together 
daba_SUMAgg <- merge(x = daba_NOAgg, y = daba_YESAgg, by.x = "Breaks", by.y = "Breaks") 

#Generate basic probability for Yes group of users 
daba_SUMAgg$Probability <-  (daba_SUMAgg$UserCountYes/(daba_SUMAgg$UserCountNo+daba_SUMAgg$UserCountYes))*100 

#Graph the data 
ggplot(data = daba_SUMAgg)+ 
    geom_point(alpha = 0.4, mapping = aes(y = daba_SUMAgg$Probability, x =  daba_SUMAgg$Breaks))+ 
    labs(x = "BINS", y = "PROBABILITY", title = "PROBABILITY ANALYSIS USING  BINS") 


daba_SUMAgg 
+0

Etes-vous sûr que votre cadre de données 'daba_SUMAgg' a du sens? Vous obtenez 2 lignes pour les pauses 25 et 35. En outre, certaines de vos pauses, comme 90, sont manquantes. – AntoniosK

+1

Je pense que vous avez besoin de 'aggregate (data = daba_NO, daba_NO $ UserCount ~ daba_NO $ Breaks, somme)'. Vous devez changer ce que vous passez à '~' – AntoniosK

Répondre

0

Pas besoin de diviser votre ensemble de données lorsque vous avez group_by de dplyr. Pas besoin de créer des valeurs numériques de vos plages à tracer. Je pense que votre processus manque quelque chose (voir mon commentaire ci-dessus).

Je vous suggère d'utiliser

library(dplyr) 
library(ggplot2) 

#Create the data 
set.seed(84102) 
daba <- data.frame(YES_NO = c(0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,0,0,0,1)) 
daba$UserCount <-  c(23,43,45,65,32,10,34,68,65,75,43,24,37,54,73,29,87,32,21,12) 

daba %>% 
    mutate(Breaks = cut(UserCount, breaks = hist(UserCount, breaks = 20)$breaks, right = F)) %>% # create your breaks (use right = F other wise you miss the value 10) 
    group_by(Breaks, YES_NO) %>%        # for every range and YES_NO value 
    summarise(UserCount = sum(UserCount)) %>%    # get sum of counts 
    mutate(Prc = UserCount/sum(UserCount)) %>%    # get the probability/percentage 
    ungroup() %>%           # forget the grouping 
    mutate(YES_NO = factor(YES_NO)) %>%      # change this to factor for the plot 
    ggplot(aes(Breaks, Prc, col=YES_NO, group=YES_NO)) +  # plot 
    geom_point() + 
    geom_line() 

Exécutez l'étape de processus canalisé par étape pour voir comment les travaux de traitement des données et la façon dont l'ensemble de données semble avant qu'elle ne soit tracée.