从多项回归估计狄利克雷参数

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

我正在尝试使用多项回归的预测概率,使用 R 中

multinom
包中的
nnet
函数来估计狄利克雷分布的参数,同时考虑标准误差。以下是我正在尝试做的事情的示例。

我有两组分类数据,如下所示。正如您所看到的,它们具有相同的比率,但第二个数据集的观测值多了 10 倍。

df1 <- data.frame(x=c(rep("A", 100), rep("B", 200), rep("C", 300)))
df2 <- data.frame(x=c(rep("A", 1000), rep("B", 2000), rep("C", 3000)))

我进行了一个仅使用截距的简单多项式回归。

library(nnet)
mn1 <- multinom(x~1, data = df1)
mn2 <- multinom(x~1, data = df2)

summary(mn1)
summary(mn2)

预测概率是根据系数计算的。当然,由于我仅使用截距,因此我们可以简单地查看数据的分布来计算概率。但我想使用多项回归的原因是使用模型中的标准误差。

softmax <- function(x) {
  exp(x) / sum(exp(x))
}

pb1 <- softmax(c(0, coef(mn1)[,1]))
pb2 <- softmax(c(0, coef(mn2)[,1]))
pb1; pb2

然后,使用

rdirichlet
包中的
dirmult
函数,我想运行从多项回归导出的 Dirichlet 函数的模拟。在这里,我使用预测概率作为狄利克雷分布的 alpha 参数。

library(dirmult)
set.seed(9999)
dir1 <- as.data.frame(dirmult::rdirichlet(1000, alpha = c(pb1)))
dir2 <- as.data.frame(dirmult::rdirichlet(1000, alpha = c(pb2)))

colnames(dir1) <- c("A", "B", "C")
colnames(dir2) <- c("A", "B", "C")

dir1 <- melt(dir1)
dir2 <- melt(dir2)

从下图中可以看出,狄利克雷分布基本相同。

library(ggplot2)
ggplot(dir1, aes(value, color = variable)) +
  geom_density()
ggplot(dir2, aes(value, color = variable)) +
  geom_density()

Dirichlet distribution from df1 Dirichlet distribution from df2

问题在于,这没有考虑多项回归的标准误差。理论上,更多的观察会导致更低的标准误差,这会导致更大的 alpha 参数。如何将多项回归的标准误差合并到狄利克雷分布的 alpha 参数中?有没有更好的方法来估计基于简单分类分布的狄利克雷分布的参数?

这样做的目的是创建分类分布的模拟,以根据分类分布估计高阶度量的置信区间。让我知道是否应该使用另一种方法。我感谢您的帮助!

r distribution categorical-data multinomial dirichlet
1个回答
0
投票

虽然这不是一个编程问题,但我会尝试给出答案。

如果您从一组样本中恢复狄利克雷阿尔法,然后使用它,您会发现这不是一个简单的过程。

无论您稍后从狄利克雷采样什么值都会有一个平均值

E[Xi] = ai/a0,其中 a0 是 alpha 之和。

很容易看出,如果将所有 alpha 值乘以某些任意值,均值不会发生变化。

但是! Var[Xi] 的方差大约会变化

Varnew[Xi] ~ Var[Xi]/乘数。

这就是我认为你应该去的地方 - 找到(使用简单的优化技术)最适合与你的原始数据相匹配的乘数。

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