我正在尝试使用多项回归的预测概率,使用 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()
问题在于,这没有考虑多项回归的标准误差。理论上,更多的观察会导致更低的标准误差,这会导致更大的 alpha 参数。如何将多项回归的标准误差合并到狄利克雷分布的 alpha 参数中?有没有更好的方法来估计基于简单分类分布的狄利克雷分布的参数?
这样做的目的是创建分类分布的模拟,以根据分类分布估计高阶度量的置信区间。让我知道是否应该使用另一种方法。我感谢您的帮助!
虽然这不是一个编程问题,但我会尝试给出答案。
如果您从一组样本中恢复狄利克雷阿尔法,然后使用它,您会发现这不是一个简单的过程。
无论您稍后从狄利克雷采样什么值都会有一个平均值
E[Xi] = ai/a0,其中 a0 是 alpha 之和。
很容易看出,如果将所有 alpha 值乘以某些任意值,均值不会发生变化。
但是! Var[Xi] 的方差大约会变化
Varnew[Xi] ~ Var[Xi]/乘数。
这就是我认为你应该去的地方 - 找到(使用简单的优化技术)最适合与你的原始数据相匹配的乘数。