簡體   English   中英

用ggplot2繪制概率(不是密度)

[英]Plot probability with ggplot2 (not density)

我想繪制數據,使得在y軸上存在概率(在范圍[0,1]中)並且在x軸上我具有數據值。 數據是連續的(也在范圍[0,1]中),因此我想使用一些核密度估計函數並對其進行歸一化,使得某個點x處的y值意味着在輸入中看到值x的概率數據。

所以,我想問一下:

a)它是否合理? 我知道我不可能看到數據中沒有的值,但我只想在使用內核密度估計函數的點之間進行插值,然后將其標准化。

b)我可以使用的ggplot中是否有任何內置選項,這會覆蓋geom_density()的默認行為,例如這樣做?

提前致謝,

蒂莫

編輯:當我之前說“正常化”時,我實際上是指“規模”。 但我得到了答案,所以謝謝你們清理我的想法。

只是快速合並@JD Long和@昨天的答案:

ggplot(df, aes(x=x)) +
  geom_histogram(aes(y = ..density..), binwidth=density(df$x)$bw) +
  geom_density(fill="red", alpha = 0.2) +
  theme_bw() +
  xlab('') +
  ylab('')

在此輸入圖像描述

這樣,ggplot2的ggplot2density函數計算,后者也被繪制在具有良好透明度的直方圖的頂部。 但你肯定應該調查stat_densitiy,因為@yesterday建議進一步定制。

這不是ggplot的答案,但是如果你想把核平滑和直方圖的想法結合起來,你可以做一個自舉和平滑的方法。 對於像這樣的丑陋事情你會被統計人員的頭部和肩膀所擊敗,所以使用風險自負;)

從一些合成數據開始:

set.seed(1)
randomData <- c(rnorm(100, 5, 3), rnorm(100, 20, 3) )
hist(randomData, freq=FALSE)
lines(density(randomData), col="red")

在此輸入圖像描述

密度函數有一個相當智能的帶寬計算器,您可以借用:

bw <- density(randomData)$bw
resample <- sample( randomData, 10000, replace=TRUE)

然后使用帶寬calc作為SD來產生一些隨機噪聲

noise <- rnorm(10000, 0, bw)
hist(resample + noise, freq=FALSE)
lines(density(randomData), col="red")

在此輸入圖像描述

你看! 內核平滑直方圖!

我知道這個長期的回復並不是您問題的真正答案,但也許它會提供一些有關如何濫用您的數據的創意。

您可以通過調用stat_density()而不是geom_density()來控制ggplot中密度/內核估計的行為。

請參閱在線用戶手冊: http//had.co.nz/ggplot2/stat_density.html您可以指定stats :: density()支持的任何內核估算函數

library(ggplot2)
df <- data.frame(x = rnorm(1000))
ggplot(df, aes(x=x)) + stat_density(kernel="biweight")

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM