我正在 R 中进行统计分析,需要进行多元 t 分布。我的参数向量 𝛽 的每个分量 β 应遵循从多变量设置导出的单变量 t 分布。分布定义如下:
β 具有 k 维 t 分布: 𝑡𝑘(𝛽1,(𝛿1/𝛼1)Σ1,𝛼1) βi 具有 t 分布: t(β1,i,δ1/α1Σ1,ii,α1)
这是我编写的用于执行此分布的 R 代码,其中我计算每个分量的方差,然后尝试使用 mvtnorm 库中的 rmvt 进行采样:
library(mvtnorm)
n_samples <- 1000
for (i in 1:length(beta_1)) {
scaled_sigma_i <- (delta_1 / alpha_1) * sigma1[i, i]
samples_beta_apriori <- rmvt(n = n_samples, sigma = matrix(scaled_sigma_i), df = alpha_1, delta = beta_1[i])
# Plot histogram for the ith component
hist(samples_beta_apriori, breaks = 30, freq = FALSE, col = "orange",
main = paste("Prior Distribution beta_", i, sep = ""),
xlab = "Value", ylab = "Probability Density")
}
鉴于事实
β 具有 k 维 t 分布:
你这样做是正确的。我只是稍微调整了一下代码
library(mvtnorm)
n_samples <- 1000
beta_1 <- c(0.5, -0.2, 0.8)
delta_1 <- 1.5
alpha_1 <- 3
sigma1 <- matrix(c(1, 0.3, 0.3, 0.3, 1, 0.3, 0.3, 0.3, 1), nrow = 3)
scaled_sigma <- (delta_1 / alpha_1) * sigma1
samples_multivariate_t <- rmvt(n = n_samples, sigma = scaled_sigma, df = alpha_1, delta = beta_1)
for (i in 1:length(beta_1)) {
samples_beta_i <- samples_multivariate_t[, i]
hist(samples_beta_i, breaks = 30, freq = FALSE, col = "orange",
main = paste("Prior Distribution beta_", i, sep = ""),
xlab = "Value", ylab = "Probability Density")
}
这给了你