概述
qq图通过把测试样本数据的分位数与已知分布进行比较,从而检验数据的分布情况。
qq图是一种散点图,对应于正态分布的qq图,就是有标准正态分布的分位数(分为点即分位数)为横坐标、样本值为纵坐标的散点图。
分位点是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等
参考直线:四分之一分位点和四分之三分位点,看散点是否落在这条线附近。
qq图绘制思路:
①数据清洗后进行排序(x(1)<x(2)<...<x(n))
②排序后,计算出每个数据对应的百分位p(i),即第i个数据x(i)为p(i)分位数,其中p(i) = (i-0.5)/n(pi有多种算法,该种最常用)
③绘制直方图 + qq 图,直方图作为参考
# qq图判断
df = pd.DataFrame(np.random.randn(1000)+2,columns=['value'])
mean = df['value'].mean()
std = df['value'].std()
print('平均值为%.2f,标准差为%.2f'%(mean,std))
df.sort_values('value',inplace = True)
df_r = df.reset_index(drop = False) #t变为DataFrame
df_r['p'] = (df_r.index-0.5)/len(df_r)
df_r['q'] = (df_r['value']-mean)/std
print(df_r.head())
fig,axes = plt.subplots(1,3,figsize = (20,4))
des = df['value'].describe()
# x1,y1 = 0.25,des['25%']
# x2,y2 = 0.75,des['75%']
ax1 = axes[0]
ax1.scatter(df.index,df['value'])
ax2 = axes[1]
df['value'].hist(bins = 20,ax = ax2)
df['value'].plot(kind='kde',secondary_y = True,ax = ax2)
ax3 = axes[2]
ax3.plot(df_r['p'],df_r['value'],'b')
# ax3.plot([x1,x2],[y1,y2],'r')
ax3.plot([0.25,0.75],[des['25%'],des['75%']],'r')
1)若是检验一组数据是否来自某个分布,分布函数为F(x),通常图的纵坐标为排好序的实际数据(次序统计量:x(1)<x(2)<....<x(n)),可以称之为经验分位点。横坐标为这些数据的理论分位点,所谓理论分位点是这样得到的,先算出各个排好序的数据对应的百分比p(i),即第i个数据x(i)为p(i)分位数,其中p(i)=(i-0.5)/n,这里p(i)有很多种算法,有的定义为i/(n+1)等等,则x(i)对应的理论分位点为F^(-1)(p(i))=F^(-1)((i-0.5)/n),这也就是横坐标的值。其中为什么不把p(i)定义为i/n呢?有解释说,若这样定义,则最大的那个数对应的p(n)=1,这样很多分布函数的F^(-1)=infinity,这样无法在坐标上表示出来,所以稍作修改。QQ图的横纵坐标定义好后,则可在图上做出散点图来,然后再在图上添加一条直线,这条直线就是用于做参考的,看散点是否落在这条线的附近。直线由四分之一分位点和四分之三分位点这两点确定的,四分之一分位点的坐标中横坐标为实际数据的四分之一分位点(quantile(data,0.25)),纵坐标为理论分布的四分之一分位点(qF(0.25)),四分之三分位点类似,这两点就刚好确定了QQ图中的直线。
(2)若是检验两组数据是否来自同一个分布函数F(x),则直接将两组数据的各自的理论分位点当作横纵坐标,然后看是否在一条直线的附近。此种方法对于两组数据数量不一致的时候,需要用插值法,将数据少的那组数据通过插值的方法补齐。在R中qqplot就在进行这件事情。或者将两个QQ图放在一起,将两组数据用不同的颜色标识,看两组数据是否离得很近
最后
以上就是老迟到斑马为你收集整理的数据特征分析-正太分布 (QQ图)的全部内容,希望文章能够帮你解决数据特征分析-正太分布 (QQ图)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复