[英]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的ggplot2
由density
函數計算,后者也被繪制在具有良好透明度的直方圖的頂部。 但你肯定應該調查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.