当前位置: 首页 > 知识库问答 >
问题:

Python中拟合参数分布的匹配矩不准确

唐永春
2023-03-14

那么为什么y分布的矩与x分布的矩不匹配呢?在下面代码的一次运行中,y(0.052)的平均值可能是x(0.01)的5倍,有时甚至是负值

import numpy as np
from scipy.stats import norm

n = 2000
x = norm.rvs(size=n)
y = norm(*norm.fit(x)).rvs(size=n)

for i in [x,y]:
    print("mu={:.4f}, sd={:.4f}".format(np.mean(i), np.std(i)))

共有1个答案

孟昆
2023-03-14

那么为什么Y分布的矩与X分布的矩不匹配呢?

它们做到了--或者至少在预期的错误(1)中做到了

快速观察是它们都接近标准正态分布;它们的第一个矩都接近于0,第二个矩接近于1。但是,请注意,x是从n(0,1)中采样的,y是从n(mean(x),std(x))中采样的。

import numpy as np
from scipy.stats import norm

n = 200000

for i in range(5):
    x = norm.rvs(size=n, random_state=i)
    y = norm(*norm.fit(x)).rvs(size=n, random_state=i)

    print("Trial {}".format(i))
    for i in [x, y]:
        print("mu={:.4f}, sd={:.4f}".format(np.mean(i), np.std(i)))
Trial 0
mu=0.0033, sd=0.9980
mu=0.0067, sd=0.9960
Trial 1
mu=0.0045, sd=0.9977
mu=0.0089, sd=0.9953
Trial 2
mu=-0.0004, sd=0.9981
mu=-0.0008, sd=0.9963
Trial 3
mu=-0.0019, sd=0.9965
mu=-0.0037, sd=0.9930
Trial 4
mu=-0.0052, sd=0.9992
mu=-0.0104, sd=0.9984

对于较小的样本大小n,我们自然会认为xy之间存在一些差异,因为我们实际上是从y中提取另一个样本。但是,我们可以观察拟合的参数是如何像预期的那样表现的:

n = 200
for i in range(5):
    x = norm.rvs(size=n, random_state=i)    
    print("Trial {}".format(i))
    print(np.mean(x), np.std(x), norm(*norm.fit(x)).args)

这就产生了

Trial 0
0.07091049314116117 1.0214227686959954 (0.07091049314116117, 1.0214227686959954)
Trial 1
0.1066888148479486 0.9100459829739235 (0.1066888148479486, 0.9100459829739235)
Trial 2
0.012250008696874187 1.0800421002497833 (0.012250008696874187, 1.0800421002497833)
Trial 3
-0.07079063505988327 0.9767123391405987 (-0.07079063505988327, 0.9767123391405987)
Trial 4
0.028540839305884236 0.9537561748836348 (0.028540839305884236, 0.9537561748836348)

(1)没有实际计算标准误差,所以如果我错了请纠正我。在Cross Validated上的快速搜索给出了关于标准错误的一个很好的解释。

 类似资料:
  • 我在prepare语句和bind_param中有正确的数字(7),所以我不知道为什么会发生这种情况。

  • 问题内容: 我希望能够执行拟合,使我可以将任意曲线函数拟合到数据,并允许我在参数上设置任意界限,例如,我想拟合函数: 说: 在以下范围内: 并且是积极的 有一个很好的scipy curve_fit 函数,但是它不允许指定参数范围。还有一个不错的http://code.google.com/p/pyminuit/库,该库可以进行泛型最小化,并且可以设置参数的范围,但在我的情况下,它没有涵盖范围。 问

  • 我在准备好的语句(mysqli)上遇到了麻烦,我正在进行连接,一切都是正确的,直到我试图绑定参数,问题是,我试图绑定63个值,我检查了很多次我有正确的值,因为我找不到导致错误的错误: 以下是我的代码: 希望有人能解释我在这里失败了什么!

  • 问题内容: 我在和中遇到以下问题: 我调用以下javascript方法: 来自firebug的链接将如下所示: 根据以下链接: 错误:Sys.ParameterCountException:参数计数不匹配。 我设置 但我得到另一个错误 IE中不存在此问题。 编辑: 问题答案: 可能值得包装数据:用引号引起来的项目 变成

  • 我正在使用编写我认为是相当基本的准备好的状态。语句如下所示(其中是实例): 这将失败,在中的参数数不匹配。