如何在 R 中正确进行多元 t 分布

问题描述 投票:0回答:1

我正在 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")
}
r statistics probability t-test
1个回答
0
投票

鉴于事实

β 具有 k 维 t 分布:

  • (𝛽1,(𝛿1/𝛼1)Σ1,𝛼1) βi 具有 t 分布:
  • t(β1,i,δ1/α1Σ1,ii,α1)

你这样做是正确的。我只是稍微调整了一下代码

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

这给了你

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.