2011-08-07 23 views
17

Veri setim var ve bu veriyi olasılık yoğunluk fonksiyonu veya olasılık kütle fonksiyonu ile analiz etmek istiyorum R, i yoğunluk fonksiyonu kullandı ama bana bir olasılık vermedi. BöyleÇizelgelemenin Olasılık Yoğunluğu/Kütle Fonksiyonu R

benim veriler: i veri dağıtımı için özel tip zorunda kalmamak

ben enerji vektörü PDF/PMF almak istiyorum
"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 

, dikkate aldığımız veri doğası gereği ayrı ayrıdır.

+1

"olasılık yoğunluk fonksiyonu" would sadece yoğunluk verilerinin varsaydığı değil, ayrık veri ile bir olasılık olabilir. –

+0

Yani, ampirik CDF istiyorsun? – Iterator

cevap

28

Verileriniz, ayrıktan uzak görünüyor. Sürekli verilerle çalışırken bir olasılık beklemek yanlıştır. density(), gerçek yoğunluk işlevine yaklaşan ampirik yoğunluk işlevi sunar. doğru bir yoğunluğudur kanıtlamak için, biz eğri altında kalan alan hesaplamak: Bazı yuvarlama hatası Verilen

energy <- rnorm(100) 
dens <- density(energy) 
sum(dens$y)*diff(dens$x[1:2]) 
[1] 1.000952 

. Eğri altındaki alan bire kadar toplanır ve dolayısıyla density()'un sonucu bir PDF'nin gereksinimlerini karşılar.

hist ait probability=TRUE seçeneği veya işlevi density() (veya her ikisi)

örneğin kullanın: Eğer gerçekten bir ayrık bir olasılık gerekiyorsa

hist(energy,probability=TRUE) 
lines(density(energy),col="red") 

verir

enter image description here

değişken, kullanırsınız:

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 

Düzenleme: naif count(x)/sum(count(x)) bir çözüm değildir neden illüstrasyon. Gerçekten de, bidonların değerleri bire, çünkü eğrinin altındaki alanın yaptığıdır. Bunun için 'kutuların' genişliği ile çarpmanız gerekir. PDF'yi dnorm() kullanarak hesaplayabildiğimiz normal dağılımı yapın. Aşağıdaki kod, normal bir dağılım oluşturur yoğunluğu hesaplar ve saf çözelti ile karşılaştırılmaktadır:

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") 

verir:

enter image description here


kümülatif dağılım fonksiyonu

olarak case @Iterator haklıydı, kümülatif dağılımı kurmak oldukça kolay yoğunluktan ribution fonksiyonu. CDF, PDF'nin bir parçasıdır. Ayrık değerler durumunda, sadece olasılıkların toplamı.Sürekli değerler için, ampirik yoğunluğunun tahmini için aralıkları eşit olduğu gerçeğini kullanabilir ve hesaplamak:

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") 

verir:

Orada

enter image description here

+0

Güzel açıklama. 'Type = "s" 'i kullanmak, ampirik bir CDf'yi (yoğunluk tahmininden değil) göstermenin daha sezgisel bir yoludur, çünkü gösterilen aralıkta bir örnekleme hissi verir. –