为什么 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. ]
pdf
的 cumsum
只是 cdf
的近似值。
回想一下,cdf
,F(x),是 f(x)(pdf
)从负无穷大到 x 的积分。 scipy.norm
的 cdf
是一个解析函数,因此(几乎)准确。
您实施的累计金额有两个问题。 1) 您不是从负无穷大开始积分,而是从 x1
中的下界开始积分,这与均值仅相差 1.5sigma
左右,因此那里引入了一些错误。并且 2) cumsum
有效地假设函数值在 x1
数组中的 dx
值中是恒定的,这也不是真的。如果您在 x1
数组中选择更多的点,您将在两个函数之间获得更接近的一致性(尽管第 1 点中的错误)仍然存在。
我尝试比较来自 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. ]
pdf
的 cumsum
只是 cdf
的近似值。
回想一下,cdf
,F(x),是 f(x)(pdf
)从负无穷大到 x 的积分。 scipy.norm
的 cdf
是一个解析函数,因此(几乎)准确。
您实施的累计金额有两个问题。 1) 您不是从负无穷大开始积分,而是从 x1
中的下界开始积分,这与均值仅相差 1.5sigma
左右,因此那里引入了一些错误。并且 2) cumsum
有效地假设函数值在 x1
数组中的 dx
值中是恒定的,这也不是真的。如果您在 x1
数组中选择更多的点,您将在两个函数之间获得更接近的一致性(尽管第 1 点中的错误)仍然存在。