Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scipy:缩放概率图_Python_Scipy_Statistics - Fatal编程技术网

Python scipy:缩放概率图

Python scipy:缩放概率图,python,scipy,statistics,Python,Scipy,Statistics,我有38400个正态分布的测量值。平均值为-4.10e-11,西格玛为0.0229。毫不奇怪,概率图的斜率为0.0229。对于绘制和异常值检测,我希望以1的斜率绘制它。理论分位数的范围应与观测值大致相同,即介于-0.09和+0.09之间。 我该怎么做 (对于代码示例,我使用随机数而不是实际测量值) 我想这就是你的意思 我根据理论cdf绘制样本cdf,得到的散点图应该围绕一条斜率为1的线聚集 from scipy.stats import norm import matplotlib.pyplot

我有38400个正态分布的测量值。平均值为-4.10e-11,西格玛为0.0229。毫不奇怪,概率图的斜率为0.0229。对于绘制和异常值检测,我希望以1的斜率绘制它。理论分位数的范围应与观测值大致相同,即介于-0.09和+0.09之间。 我该怎么做

(对于代码示例,我使用随机数而不是实际测量值)


我想这就是你的意思

我根据理论cdf绘制样本cdf,得到的散点图应该围绕一条斜率为1的线聚集

from scipy.stats import norm
import matplotlib.pyplot as plt

N = 100
mean = -4.10e-11
sigma = 0.0229
sample = norm.rvs(loc=mean, scale=sigma, size=N)

sample_cdf = sorted(sample)

quantile_points = [(_-0.5)/N for _ in range(1,1+N)]
theoretical_cdf = [norm.ppf(_, loc=mean, scale=sigma) for _ in quantile_points]

plt.plot([theoretical_cdf[-1], theoretical_cdf[0]], [theoretical_cdf[-1], theoretical_cdf[0]], 'r-', zorder=1)
plt.scatter(sample_cdf, theoretical_cdf, zorder=2)
plt.show()
这里有一个结果图。没有虚饰


你的日常工作正是我想要的。谢谢唯一的问题是速度非常慢。对于38400个数据点,stats.probplot大约需要90毫秒,而norm.ppf在我的计算机上需要6.7秒。令人毛骨悚然。不幸的是,我不知道numpy/scipy使用什么算法来计算逆矩阵,因此无法提出替代方案。(我知道有不同的方法。)我想你需要经常这样做。
from scipy.stats import norm
import matplotlib.pyplot as plt

N = 100
mean = -4.10e-11
sigma = 0.0229
sample = norm.rvs(loc=mean, scale=sigma, size=N)

sample_cdf = sorted(sample)

quantile_points = [(_-0.5)/N for _ in range(1,1+N)]
theoretical_cdf = [norm.ppf(_, loc=mean, scale=sigma) for _ in quantile_points]

plt.plot([theoretical_cdf[-1], theoretical_cdf[0]], [theoretical_cdf[-1], theoretical_cdf[0]], 'r-', zorder=1)
plt.scatter(sample_cdf, theoretical_cdf, zorder=2)
plt.show()