线性趋势的概率

时间:2018-08-22 10:07:51

标签: statistics linear-regression bayesian

我有少量样品([10 16 11 16 26 17 16 16 15 13 15 14 12 12 14 20 14 12 16 21 13 13 14 16  17 18 16 14 16 23 24 12 13 13 15 16 15 14 14 16 20 17 17 15 23 18 12 19  12 11 19 17 14 18 15 23 30 24 16 14 22 17 17 17 17 20 20 19 27 17 36] ):

有两种模型:

  • 模型A –没有线性趋势,因此噪声中心 直方图是数据的平均值。
  • 模型B –有线性趋势, 因此噪声直方图的中心是与拟合点的距离 线性趋势线。

很明显,我可以选择sigma ^ 2更小的模型来选择更好的模型。显然是(B)。但是,我不确定数据中确实存在趋势,不仅是随机产生的噪声。因此,我对两个模型都进行了Dickey-Fuller测试,并且都在1%的限制下(“ 1%”:-3.529,A:-5.282,B:-6.149)。哪个告诉我(A)可能是正确的模型。

所以我问一个问题:(A)的模型更好的概率是多少?

我试图像这样解决这个问题: 我假设噪声是正态分布的,所以我分别在(A)和(B)上将最佳正态分布放在sigma上。因此,我得到了两种噪音模型。 之后,我从这两个模型中获取了n个(原始样本长度)样本,并比较了它们的sigma ^ 2。如果(A)模型sigma ^ 2较小,则我提高模型(A)更好(如果不减少)的可能性。我在合理的时间内重复了该测试。

在Python代码中,可能更清楚:

model_b_mu, model_b_sigma = stats.norm.fit(model_b['residual'])
model_a_mu, model_a_sigma = stats.norm.fit(model_a['residual'])

def compare_models(modela_mu, modela_sigma,  modelb_mu, modelb_sigma, length):
    repate = 20000

    modela_better = 0
    for i in range(repate):
        modela = np.random.normal(modela_mu, modela_sigma, size = length )
        modelb = np.random.normal(modelb_mu, modelb_sigma, size = length )

        # test which sigma^2 is smaller
        sigma_a = np.sum(np.sqrt(np.power(modela, 2)))
        sigma_b = np.sum(np.sqrt(np.power(modelb, 2)))
        if sigma_a < sigma_b:
            modela_better += 1

    return modela_better/repate

model_a_better = compare_models(model_a_mu, model_a_sigma, model_b_mu, model_b_sigma, len(model_a))
print(model_a_better)

哪个给了我:0.3152。我解释了这个结果:如果噪声呈正态分布,则模型(A)更好的概率为31.52%。

我的问题是:我在想正确的方法吗?如果没有,为什么?那我该怎么解决这个问题呢?

Ps:我不是统计学家,更像程序员,所以上述所有解决方案很可能是错误的。因此,我要求一些确认。

1 个答案:

答案 0 :(得分:0)

这是所谓的模型选择问题。尽管最接近正确的方法是通过贝叶斯推理,但没有一个正确的答案。即,为所考虑的每个模型(两个或多个)计算后验概率p(model | data)。请注意,贝叶斯推断的结果是模型上的概率分布,而不是单个“此模型正确”的选择。取决于模型的任何后续结果均应在模型分布上求平均值。还要注意,贝叶斯推理需要先于模型的先验,也就是说,需要在没有数据的情况下为每个模型指定先验的概率。这是一个功能,而不是错误。

着眼于上述问题,可能很容易为您提到的两个模型计算出后验概率,但是首先您需要对概念框架有所了解。在Web上搜索贝叶斯模型推断应该会占用大量资源。同样,这个问题更适合stats.stackexchange.com。