为什么 scipy.stats.norm 的 pdf 和 cdf 的 cumsum 不同?

why the cumsum of pdf and cdf are different for scipy.stats.norm?

我尝试比较来自 pdf 的 cumsum 和 scipy.stats.norm 的 cdf 的 cdf 值的结果。为什么这些不同?

#%%
import numpy as np
from scipy.stats import norm


x=np.arange(10)

m=np.mean(x) # mean of x
v=np.var(x,ddof=1) # variance of x
s=np.std(x,ddof=1)  # standard deviation of x

x1=np.linspace(min(x),max(x),10)
y=norm.pdf(x1, loc=m, scale=s)
y=np.cumsum(y)
y=y/y[-1]
print(f'y is : {y}')

y1=norm.cdf(x1, loc=m, scale=s)
y1=y1/y1[-1]
print(f'y1 is : {y1}')

y is : [0.04835861 0.12317281 0.22695357 0.35603744 0.5        0.64396256
 0.77304643 0.87682719 0.95164139 1.        ]
y1 is : [0.07365228 0.13295909 0.21954114 0.33299004 0.46641076 0.60724152
 0.74066224 0.85411114 0.94069318 1.        ]

pdfcumsum 只是 cdf 的近似值。

回想一下,cdf,F(x),是 f(x)(pdf)从负无穷大到 x 的积分。 scipy.normcdf 是一个解析函数,因此(几乎)准确。

您实施的累计金额有两个问题。 1) 您不是从负无穷大开始积分,而是从 x1 中的下界开始积分,这与均值仅相差 1.5sigma 左右,因此那里引入了一些错误。并且 2) cumsum 有效地假设函数值在 x1 数组中的 dx 值中是恒定的,这也不是真的。如果您在 x1 数组中选择更多的点,您将在两个函数之间获得更接近的一致性(尽管第 1 点中的错误)仍然存在。