2017-07-21 20 views
0

我有以下代碼如何dbeta的函數被調用R中

#emp bayes 
num_trials <- 10e6 

simulations <- data_frame(
    true_average = rbeta(num_trials, 81, 219), 
    hits = rbinom(num_trials, 300, true_average) 
) 

hit_100 <- simulations %>% 
    filter(hits == 100) 

dens <- function(z) dbeta(z, 81 + 100, 219 + 200) 

ggplot(hit_100, aes(true_average)) + 
    geom_histogram(aes(y = ..density..),bins = 100) + 
    stat_function(color = "red", fun = dens) + 
    labs(x = "Batting average of players who got 100 H/300 AB") 

enter image description here

我理解R的功能和基本知識,如

square.it <- function(x) { 
    square <- x * x 
    return(square) 
} 
# square a number 
square.it(5) 

## [1] 25 

但差異密度函數是z沒有值輸入行

dens <- function(z) dbeta(z, 81 + 100, 219 + 200) 

或線路

stat_function(color = "red", fun = dens) 

所以我的問題是,如何爲R能夠創造ggplot光滑函數時提供的密度函數沒有價值?

+0

我猜,因爲只有一個參數'dens()'傳遞正確的對象。 – thelatemail

回答

1

http://ggplot2.tidyverse.org/reference/stat_function.html

可以在args = list(...)包裹附加函數的自變量。

ggplot(hit_100, aes(true_average)) + 
    geom_histogram(aes(y = ..density..),bins = 100) + 
    stat_function(color = "red", fun = dbeta, 
        args = list(shape1 = 81+100, shape2 = 219+200)) + 
    labs(x = "Batting average of players who got 100 H/300 AB") 

它仍然會自動轉儲插值x值代入函數的第一個參數,無論附加命名參數。它使用的x值基本上是seq(min(hit_100$true_average), max(hit_100$true_average), length.out = 101)。 101可在stat_function內使用n =進行調整。

1

stat_function可以輕鬆地將功能疊加到現有的繪圖上。如果將data設置爲NULL,則數據將從調用ggplot中指定的繪圖數據繼承。所以,基本上,在你的情況下,餵養的數據是hit_100

Take a look at here