线性趋势概率
probability of linear trend
我有少量样品([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 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:我不是统计学家,更像是程序员,所以上述所有解决方案很可能是错误的。因此,我要求一些确认。
这就是所谓的模型选择问题。没有一个正确的答案,尽管最接近正确的方法是通过贝叶斯推理。也就是说,为所考虑的每个模型(两个或多个)计算后验概率 p(模型 | 数据)。请注意,贝叶斯推理的结果是模型的概率分布,而不是单个 "this model is correct" 选择;任何依赖于模型的后续结果都将在模型的分布上进行平均。另请注意,贝叶斯推理需要先验模型,也就是说,在没有数据的情况下,需要先验地为每个模型指定一个概率。这是一个功能,不是错误。
看一下所述问题,计算出您提到的两个模型的后验概率可能很简单,但首先您需要熟悉概念框架。在网络上搜索贝叶斯模型推理应该会找到很多资源。另外这个问题更适合stats.stackexchange.com.
我有少量样品([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 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:我不是统计学家,更像是程序员,所以上述所有解决方案很可能是错误的。因此,我要求一些确认。
这就是所谓的模型选择问题。没有一个正确的答案,尽管最接近正确的方法是通过贝叶斯推理。也就是说,为所考虑的每个模型(两个或多个)计算后验概率 p(模型 | 数据)。请注意,贝叶斯推理的结果是模型的概率分布,而不是单个 "this model is correct" 选择;任何依赖于模型的后续结果都将在模型的分布上进行平均。另请注意,贝叶斯推理需要先验模型,也就是说,在没有数据的情况下,需要先验地为每个模型指定一个概率。这是一个功能,不是错误。
看一下所述问题,计算出您提到的两个模型的后验概率可能很简单,但首先您需要熟悉概念框架。在网络上搜索贝叶斯模型推理应该会找到很多资源。另外这个问题更适合stats.stackexchange.com.