[英]Mixture Poisson distribution: mean and variance in R
所以,我試圖模擬混合泊松分布:
data2 <- data.frame(x = c(rpois(n = 50, lambda = 0), rpois(n = 450, lambda = 10)))
然后在其上繪制直方圖和密度函數,對於分布函數,我使用了spatstat包中的函數dmixpois
。 這是情節的代碼:
ggplot(data2, aes(x = x)) +
geom_histogram(aes(y = ..density..), bins = 15) +
geom_line(aes(x = x, y = dmixpois(data2$x, mu = 9, sd = sqrt(41))))
顯然,密度函數是錯誤的。 據我所知,混合泊松分布的均值是單一分布均值的線性組合,方差為 Eλ + Varλ。 在圖中我只使用了方差項,但如果我添加 lambda 的期望值,我會得到更加陡峭的密度。 計算有什么問題?
您正在模擬的“混合泊松”與spatstat
中的混合泊松模型不同,后者只是假設泊松分布的 lambda 本身是一個正態分布的隨機變量。 從文檔:
實際上,泊松均值參數 lambda 通過設置 lambda = invlink(Z) 隨機化,其中 Z 具有高斯 N(μ,σ²) 分布。
因此,它不會模擬兩個獨立泊松分布的混合。
看起來您正在模擬的是零膨脹泊松分布,也就是說,對於任何給定的觀察,有可能獲得零計數或泊松分布計數的分布。 在VGAM
包中有一個特定的dzipois
。
還要記住,泊松分布是一個離散的概率分布,所以你不能用一條連續的線正確地顯示它,而只能用整數值處的點或尖峰來表示。
如果要繪制與模擬匹配的分布,可以嘗試以下操作:
set.seed(1) # To make the example reproducible
data2 <- data.frame(x = c(rpois(n = 50, lambda = 0),
rpois(n = 450, lambda = 10)))
ggplot(data2) +
geom_histogram(aes(x = x, y = ..density..), breaks = 0:21 - 0.5) +
geom_point(data = data.frame(x =0:20, y = VGAM::dzipois(0:20, 10, 1/10)),
aes(x, y))
首先, lambda = 0
的泊松分布是退化的並且總是恆定為零:
rpois(10, lambda = 0)
[1] 0 0 0 0 0 0 0 0 0 0
這就是為什么您在x = 0
處出現尖峰的原因。
其次,泊松分布是離散的,因此沒有密度(或 pdf)。 相反,您可以在直方圖中繪制相對頻率(就像您所做的那樣)來估計X = x
的概率。
混合分布的平均值只是基礎分布的加權平均值。 在您的情況下,基礎分布的權重為 10% 和 90%,因此 E[X] = 0.1 E[X_1] + 0.9 E[X_2] = 0,9
混合分布的方差由 Var(X) = Var(\Lambda) + E[Lambda] 給出
所以一切都正常工作:
set.seed(1)
df <- data.frame(x = c(rpois(50, 1), rpois(450, 9)))
mean(df$x)
sd(df$x)
var(df$x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.