[英]Plotting Probability Density / Mass Function of Dataset in R
我有數據集,我想通過R中的概率密度函數或概率質量函數來分析這些數據,我使用密度函數,但它沒有給我一個概率。
我的數據是這樣的:
"step","Time","energy"
1, 22469 , 392.96E-03
2, 22547 , 394.82E-03
3, 22828,400.72E-03
4, 21765, 383.51E-03
5, 21516, 379.85E-03
6, 21453, 379.89E-03
7, 22156, 387.47E-03
8, 21844, 384.09E-03
9 , 21250, 376.14E-03
10, 21703, 380.83E-03
我想將PDF / PMF轉換為能量矢量,我們考慮的數據本質上是離散的,所以我沒有特殊的類型來分配數據。
您的數據與我不同。 期望處理連續數據的概率是完全錯誤的。 density()
為您提供經驗密度函數,該函數近似於真實密度函數。 為了證明它是正確的密度,我們計算曲線下面積:
energy <- rnorm(100)
dens <- density(energy)
sum(dens$y)*diff(dens$x[1:2])
[1] 1.000952
給出一些舍入誤差。 曲線下面積總和為1,因此density()
的結果滿足PDF的要求。
使用hist
的probability=TRUE
選項或函數density()
(或兩者)
例如:
hist(energy,probability=TRUE)
lines(density(energy),col="red")
給
如果您確實需要離散變量的概率,則使用:
x <- sample(letters[1:4],1000,replace=TRUE)
prop.table(table(x))
x
a b c d
0.244 0.262 0.275 0.219
編輯:插圖為什么天真count(x)/sum(count(x))
不是解決方案。 實際上,這並不是因為箱子的值總和為1,即曲線下面積的值。 為此,你必須乘以'箱'的寬度。 采用正態分布,我們可以使用dnorm()
計算PDF。 下面的代碼構造一個正態分布,計算密度,並與天真的解決方案進行比較:
x <- sort(rnorm(100,0,0.5))
h <- hist(x,plot=FALSE)
dens1 <- h$counts/sum(h$counts)
dens2 <- dnorm(x,0,0.5)
hist(x,probability=TRUE,breaks="fd",ylim=c(0,1))
lines(h$mids,dens1,col="red")
lines(x,dens2,col="darkgreen")
給:
累積分布函數
如果@Iterator是正確的,那么從密度構造累積分布函數相當容易。 CDF是PDF的組成部分。 在離散值的情況下,簡單地說就是概率的總和。 對於連續值,我們可以使用經驗密度估計的區間相等的事實,並計算:
cdf <- cumsum(dens$y * diff(dens$x[1:2]))
cdf <- cdf / max(cdf) # to correct for the rounding errors
plot(dens$x,cdf,type="l")
給:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.