bootstrap的结果可靠吗?

机器算法验证 引导程序 解释 标准错误 推理 可靠性
2022-03-24 06:07:07

我正在使用引导算法来计算我的 normalmixEM 输出估计值的标准误差。我不确定它们是否可靠?

我的代码是(这里的数据):

# load package
install.packages("mixtools")
library(mixtools)


B = 1000 # Number of bootstrap samples
mu1sample <- mu2sample <- sigma1sample <- sigma2sample <- lambdasample <- vector()

# Bootstrap
for(i in 1:B){
  print(i)
  subsample = sample(mydatatest,rep=T)
  normalmix <- normalmixEM(subsample, mu=c(-0.002294,0.002866),sigma=c(0.00836,0.02196), lambda=c(0.6746903,(1-0.6746903)),k=2, fast=FALSE, maxit=10000, epsilon = 1e-16, maxrestarts=1000)
  mu1sample[i]    = normalmix$mu[1]      # $
  mu2sample[i]    = normalmix$mu[2]      # $
  sigma1sample[i] = normalmix$sigma[1]   # $
  sigma2sample[i] = normalmix$sigma[2]   # $
  lambdasample[i] = normalmix$lambda[1]  # $
}
# standard errors

sd(mu1sample)
sd(mu2sample)
sd(sigma1sample)
sd(sigma2sample)
sd(lambdasample)

# show distribution of the bootstrap samples
hist(mu1sample)
hist(mu2sample)
hist(sigma1sample)
hist(sigma2sample)
hist(lambdasample)

这给出了以下图片:

亩1

米1

亩2

平方米

西格玛1

s1

西格玛2

s2

拉姆达

拉

编辑:如果您查看我的变量 mydatatest 并使用 KD 显示具有以下代码的分布

plot(density(mydatatest),col="red",main="",lwd=2,cex.axis=1.2,cex.lab=1.2)

看起来像 tt

第二次编辑:我现在包括要修复的 mus 和 sigmas。我更新了代码和图片。现在又是我的问题,你怎么看?

2个回答

正如 Nick Cox 和一位匿名用户所解释的那样,您所认为的不稳定性正是混合模型所做的:它们不关心标签,除非您非常清楚地知道您的模式大致是什么样子。

至于你可以做些什么来修复你需要它们的标签,你会想要提供所有东西的完整样本估计(两个 s,两个 s,而不仅仅是现在)作为起始值。有人可能会争辩说,这违反了最大可能性的精神,但这可能是你能做的最好的事情。如果这不起作用,您可能不得不强制输入更多信息,例如坚持如果μσλμ1<μ2δσ1<σ2Δλ>12normalmixEM()不支持对参数空间的那种残忍,你需要用你自己的参数化来编写你自己的可能性来解释这种关系。

我的预感是,由于标签切换,您的方法可能不可靠,也就是说,每次拟合混合模型时,两个正态分布的角色可能已经颠倒了。

也就是说,对于 EM 算法的不同运行, (mu1, sigma1) 和 (mu2, sigma2) 可能会转换角色。

看起来 mixtools 提供的 boot.se 函数试图解决这个问题。