这是拟合分布的合理方法吗?

机器算法验证 分布 配件
2022-03-25 06:55:47

将像前高斯分布这样的先验分布拟合到观察到的人类响应时间 (RT) 集合的任务。一种方法是在给定一组候选前高斯参数的情况下计算每个观察到的 RT 的总对数似然,然后尝试找到最大化该总对数似然的参数集。我想知道这种替代方法是否也可能是合理的:

  1. 选择一组等距的分位数概率,例如:

    qps = seq( .1 , .9 , .1 )
    
  2. 对于给定的一组候选前高斯参数,估计对应于 qps 的分位数 RT 值,例如:

    sim_dat = rnorm( 1e5 , mu , sigma ) + rexp( 1e5 , 1/tau )
    qrt = quantile( sim_dat , prob = qps )
    
  3. 对于由此生成的分位数 RT 值之间的每个连续间隔,计算落入该间隔的观察数,例如:

    obs_counts = rep( NA , length(qrt)-1 )
    for( i in 1:(length(qrt)-1) ){
        obs_counts[i] = length( obs_rt[ (obs_rt>qrt[i]) & (obs_rt<=qrt[i+1]) ] )
    }
    
  4. 将这些观察到的计数与预期计数进行比较:

    exp_counts = diff(range(qps)) * diff(qps)[1] * length(obs_rt)
    chi_sq = sum( (( obs_counts - exp_counts )^2 )/exp_counts )
    
  5. 重复步骤 2-4,搜索最小化 chi_sq 的候选参数值。

这种方法是更标准的最大似然估计程序的合理替代方案吗?这种方法是否已经有了名字?

请注意,我使用前高斯的示例纯粹是为了说明目的;在实践中,我在一个相当复杂的环境中使用上述方法(例如,将数据拟合到产生多个分布的随机模型中,每个分布都有不同数量的预期观察计数)。这个问题的目的是确定我是否重新发明了轮子,以及是否有人可以找出该方法的任何有问题的特征。

3个回答

一个有问题的特征是可能存在连续的最优解。在大多数设置中,分位数是参数的连续函数。当分布是连续的时,几乎可以肯定,数据值之间会有正区间。假设您的目标函数通过特定参数值进行优化,该参数值的分位数与任何数据都不完全一致:也就是说,它们位于由附近数据值确定的区间的内部。(这是一个极有可能发生的事件。)然后参数值的微小变化会使分位数略微移动,以保持在相同的间隔内,从而使卡方值保持不变,因为没有任何计数发生变化。因此,该过程甚至没有挑选出一组明确的参数值!

另一个有问题的特征是这个过程显然没有提供获得参数估计误差的方法。

另一个问题是你甚至不知道这个估计器最基本的属性,比如它的偏差量。

您提出的方法称为分位数匹配,尽管您提出的方法会让人筋疲力尽。前高斯分布可以在gamlss.dist带有分位数qexGAUS等的包中找到;nu在你使用的地方使用tau

fitdist使用. _ fitdistrplus _ method="qme"bill_080 链接的答案中提到了该软件包。一个区别是它只匹配与参数一样多的分位数(在本例中为三个)。

以下似乎或多或少起作用:它模拟来自特定前高斯分布的一些数据点,然后尝试使用分位数匹配估计参数,然后绘制一些图表。它需要对参数进行粗略估计才能起作用。

library(fitdistrplus)
library(gamlss.dist)

set.seed(1)
sim_size <- 1000
Gm <- 10 # mean of Gaussian   
Gs <- 2  # sd of Gaussian
Em <- 5  # mean of exponential
sim_dat <- rnorm( sim_size , Gm , Gs ) + rexp( sim_size , 1/Em )

fit_qme <- fitdist(sim_dat, "exGAUS", method="qme", 
                   start=c(mu=15, sigma=1, nu=3),
                   probs=c(0.2,0.5,0.8)               )
fit_qme
plot(fit_qme) 

在此示例中,使用此种子,估计值为

> fit_qme
Fitting of the distribution ' exGAUS ' by matching quantiles 
Parameters:
      estimate
mu    9.859207
sigma 1.753703
nu    5.049785

相比之下,使用相同函数的最大似然估计方法可能看起来像

fit_mle <- fitdist(sim_dat, "exGAUS", method="mle", 
                   start=c(mu=15, sigma=1, nu=3)      )

并产生类似的东西

> fit_mle
Fitting of the distribution ' exGAUS ' by maximum likelihood 
Parameters:
      estimate Std. Error
mu    9.938870  0.1656315
sigma 2.034017  0.1253632
nu    5.007996  0.2199171

在以下链接中查看 QQ-Plot(在我的回答下):

需要帮助通过直方图识别分布