我有少量样品([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] ):
有两种模型:
很明显,我可以选择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:我不是统计学家,更像程序员,所以上述所有解决方案很可能是错误的。因此,我要求一些确认。
答案 0 :(得分:0)
这是所谓的模型选择问题。尽管最接近正确的方法是通过贝叶斯推理,但没有一个正确的答案。即,为所考虑的每个模型(两个或多个)计算后验概率p(model | data)。请注意,贝叶斯推断的结果是模型上的概率分布,而不是单个“此模型正确”的选择。取决于模型的任何后续结果均应在模型分布上求平均值。还要注意,贝叶斯推理需要先于模型的先验,也就是说,需要在没有数据的情况下为每个模型指定先验的概率。这是一个功能,而不是错误。
着眼于上述问题,可能很容易为您提到的两个模型计算出后验概率,但是首先您需要对概念框架有所了解。在Web上搜索贝叶斯模型推断应该会占用大量资源。同样,这个问题更适合stats.stackexchange.com。