2017-08-16 23 views
0

私は統計家ではありませんが、私は自分のデータで何が起きているのかを理解するために基本的な確率を使いたいと思います。ビンを使用した基本確率分析R

私はヒストグラムを使って特定のビン内の自分のデータを見て、分析に興味のあるグループを全体のグループと比較するという面倒ではありますが非常に役立つ方法を作りました。それは私たちに会社の信じられないほどの洞察を示してくれました。グラフで何が起きているのか簡単に説明できます。それはかなり退屈だと言われていますが、このタイプの分析はとても有用であり、他の人がすでにそのための機能を作り出しているということは意味をなさないでしょう。

以下は私のコードです。この種の分析はすでに関数内に存在していますか?また、同様のことをするlogi.hist.plot()を使用しましたが、問題がある可能性があり、データのこの「生のビュー」を使用する方が好きです。

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

あなたの 'daba_SUMAgg'データフレームは意味がありますか?あなたは休憩25と休憩35の2行を取得します。また、あなたの休憩のいくつかは、90のように、行方不明です。 – AntoniosK

+1

私は 'aggregate(data = daba_NO、daba_NO $ UserCount〜daba_NO $ Breaks、sum)'が必要だと思います。 '〜'に渡すものを切り替える必要があります – AntoniosK

答えて

0

あなたがdplyrgroup_byを持っているとき、あなたのデータセットを分割する必要はありません。範囲からプロットする数値を作成する必要はありません。私はあなたのプロセスが何かを逃していると思う(上記の私のコメントを参照)。

私はどのようなデータ処理の機能と、それがプロットされる前に、データセットがどのように見えるかを確認するステップによりパイプで連結されたプロセスステップを実行します

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() 

を使用することをお勧めしたいです。

関連する問題