我正在阅读 LA Hannah 撰写的“广义线性模型的狄利克雷过程混合”论文。如果我想模拟以下模型
在 R 中,我怎样才能得到和在
我正在阅读 LA Hannah 撰写的“广义线性模型的狄利克雷过程混合”论文。如果我想模拟以下模型
在 R 中,我怎样才能得到和在
可以肯定的是,狄利克雷过程的实现是具有可数支持的概率度量,正如D. Blackwell 在统计年鉴1(1973 年)第 1 期所证明的那样。2、356--358。您可以使用 J. Sethuraman 在Statistica Sinica , 4 , 639 (1994) 中介绍的构造性断棒表示从狄利克雷过程中采样实现。对于浓度参数且以某个分布函数为中心的 Dirichlet 过程,您必须绘制独立随机变量 并计算
Rsample
现在内存太便宜了,一个更实用的截断方法是取 “足够大”。这是一个且等于分布函数的示例。
c <- 2
G_0 <- function(n) rnorm(n, 0, 10)
n <- 100
b <- rbeta(n, 1, c)
p <- numeric(n)
p[1] <- b[1]
p[2:n] <- sapply(2:n, function(i) b[i] * prod(1 - b[1:(i-1)]))
y <- G_0(n)
theta <- sample(y, prob = p, replace = TRUE)
查看DPackageR 中的包。它具有许多用于从狄利克雷过程进行模拟的功能。这是文档的链接:DPackage。Zen 上面的回答也是很好的信息。
不知道为什么sample(y, prob = p, replace = TRUE)禅宗的回答是必要的。
library(tidyverse)
##concentration parameter
c <- 1000
##base distribution
G_0 <- function(n) rnorm(n, 0, 1)
##finite approximate realization of Dirichlet Process
n <- 1000
b <- rbeta(n, 1, c)
p <- numeric(n)
p[1] <- b[1]
p[2:n] <- sapply(2:n, function(i) b[i] * prod(1 - b[1:(i-1)]))
##check summation of p must be 1
sum(p)
##P(theta_i)=p_i where theta follows i.i.d G_0
theta <- G_0(n)
##plot is similar to https://en.wikipedia.org/wiki/File:Dirichlet_process_draws.svg
df1 <- data.frame(theta = theta, p = p)
df1 %>%
ggplot(aes(x = theta , y = p)) +
geom_col(color = "black") +
xlim(-4,4)