Scipy.stats 范数与对数范数
Scipy.stats norm vs lognorm
要使用 scipy.stats.norm
找到一个数字大于 x 的概率,您可以编写这样的函数 1-scipy.stats.norm(55.98,12.29).cdf(64)
返回 0.257 意味着给定平均值 55.98 和标准差 12.29,您的随机观察值大于 64 的概率为 25.7%?如果我想找到对数正态分布,我可以用 scipy.stats.lognorm
函数做同样的事情吗? 1-scipy.stats.lognorm(55.98,12.29).cdf(64)
?
您对正态分布的解释正确。
对于 lognorm,scipy 参数化有点奇怪。
假设 X 是一个正态分布的随机变量,其均值为 mu,std dev 为 sigma。
如果 Y 定义为 X = ln(Y),则 Y 服从对数正态分布。
要在 scipy 中表示 Y,您可以这样做:
from scipy.stats import lognorm
from math import exp
#using smaller numbers for this example
mu=1
sigma=2
X=norm(mu,sigma)
X.mean() #1.0
X.var() # 4.0
Y = lognorm(s=sigma,scale=exp(mu))
Y.mean() # 20.085536923187668
Y.var() #21623.037001313976
这产生与维基百科对数范数公式相同的结果:
- mean = exp(mu + sigma^2/2)
- 方差 = (exp(sigma^2)-1)(exp(2mu+sigma^2)
在 scipy 的所有情况下,.cdf(x) 方法给出随机变量小于或等于 x 的概率。
要使用 scipy.stats.norm
找到一个数字大于 x 的概率,您可以编写这样的函数 1-scipy.stats.norm(55.98,12.29).cdf(64)
返回 0.257 意味着给定平均值 55.98 和标准差 12.29,您的随机观察值大于 64 的概率为 25.7%?如果我想找到对数正态分布,我可以用 scipy.stats.lognorm
函数做同样的事情吗? 1-scipy.stats.lognorm(55.98,12.29).cdf(64)
?
您对正态分布的解释正确。
对于 lognorm,scipy 参数化有点奇怪。
假设 X 是一个正态分布的随机变量,其均值为 mu,std dev 为 sigma。 如果 Y 定义为 X = ln(Y),则 Y 服从对数正态分布。
要在 scipy 中表示 Y,您可以这样做:
from scipy.stats import lognorm
from math import exp
#using smaller numbers for this example
mu=1
sigma=2
X=norm(mu,sigma)
X.mean() #1.0
X.var() # 4.0
Y = lognorm(s=sigma,scale=exp(mu))
Y.mean() # 20.085536923187668
Y.var() #21623.037001313976
这产生与维基百科对数范数公式相同的结果:
- mean = exp(mu + sigma^2/2)
- 方差 = (exp(sigma^2)-1)(exp(2mu+sigma^2)
在 scipy 的所有情况下,.cdf(x) 方法给出随机变量小于或等于 x 的概率。