簡體   English   中英

繪制R中數據集的概率密度/質量函數

[英]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的要求。

使用histprobability=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.

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