我已取得少量样本(10 16 11 16 26 17 16 15 13 14 12 12 14 20 14 12 16 13 14 16 17 18 16 16 16 14 16 24 24 12 13 15 15 16 16 17 15 15 12 12 12 11 19 14 14 18 15 30 24 14 22 17 17 17 19 27 17 36 ):
有两种模式:
显然,我可以选择西格玛^2较小的模型来选择更好的模型。显然是(B)。然而,我不确定数据是否真的有趋势,而不仅仅是像这样随机发生的噪音。所以,我对两种模型都做了Dickey-Fuller测试,并且都在1%的极限(1%:-3.529,A:-5.282,B:-6.149 )。它告诉我有可能(A)是正确的模式。
所以我开始问:(A)的概率是什么更好的模型?
我试图解决这样的问题:我假设噪声是正态分布的,所以我分别在(A)和(B)上拟合出西格玛上的最佳正态分布。所以,我有两个模型的噪音。在此之后,我从这两种模型中提取了n(原始样本长度)样本,并比较了它们的σ^2。如果(A)模型σ^2较小,则增加了模型(A)更好的可能性,如果不降低,则模型(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:我不是统计学家,更像程序员,所以很有可能以上所有的解决方案都是错误的。因此,我要求得到一些确认。
发布于 2018-08-22 17:15:36
这是一个所谓的模型选择问题.没有一个正确的答案,尽管最接近正确的方法是通过贝叶斯推断。即,计算所考虑的每个模型(两个或两个以上)的后验概率p(模型)。注意,贝叶斯推断的结果是模型上的概率分布,而不是单一的“此模型是正确的”选择;任何依赖于模型的后续结果都要在模型上的分布上平均。还要注意的是,贝叶斯推理需要对模型有一个先验,也就是说,在没有数据的情况下,您需要为每个模型预先指定一个概率。这是一个特性,而不是一个bug。
如前所述,简单地计算出您提到的两个模型的后验概率可能很简单,但首先您需要对概念框架有所了解。对贝叶斯模型推理的网络搜索应该会发现大量的资源。同样,这个问题更适合于stats.stackexchange.com。
https://stackoverflow.com/questions/51964506
复制相似问题