首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比例概率图

比例概率图
EN

Stack Overflow用户
提问于 2017-11-26 12:51:14
回答 1查看 437关注 0票数 2

我有38400的测量值是正态分布的。平均值为-4.10e-11,西格玛为0.0229。毫不奇怪,概率图的斜率为0.0229。为了绘制和检测异常值,我想用1的斜率来绘制它。然后,理论分位数的范围应该与观测值大致相同,即-0.09到+0.09之间。我该怎么做?

(在代码示例中,我使用的是随机数,而不是实际测量值)。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

mean = -4.10e-11
sigma = 0.0229

np.random.seed(7654321)
e_array = np.random.normal(mean, sigma, 38400)

minvalue = np.min(e_array)
maxvalue = np.max(e_array)

qq = stats.probplot(e_array, dist="norm", plot=plt)
qq_slope, qq_intercept, qq_r = qq[1]
print('Minimum value: ', minvalue)
print('Maximum value: ', maxvalue)
print('QQ slope:', qq_slope)
print('QQ intercept:', qq_intercept)
print('QQ r:', qq_r)

plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-26 19:44:30

我想这就是你的意思。

我根据理论图绘制样本图,得到的散点图应该围绕一条斜率线聚在一起。

代码语言:javascript
复制
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()

这是一个由此产生的阴谋。没有装饰。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47496327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档