前言
补充知识
本篇文章中会使用到统计函数库scipy.stats的基本用法之一:生成服从指定分布的随机数,norm.rvs()。
import scipy.stats as ss
norm_dist=ss.norm.rvs(loc=0,scale=1,size=10)
即生成一组期望为0,标准差为1,长度为10的正态分布随机数。
绘制直方图和分布曲线:
loc=0,scale=1
loc=10,scale=1
引入需要用到的库
import numpy as np
import scipy.satas as ss
假设检验 (normaltest)
(理论的知识很多,需要自己补充)
首先我们先构造一组符合正态分布的数据
norm_dist=ss.norm.rvs(size=20)
使用normaltest获得检验统计量和p值
ss.normaltest(norm_dist)
输出结果:
从图中可以看到这组数据的检验统计量为3.316,p为0.19,设显著性水平为0.05,0.19>0.05,则无法拒绝H0,即该分布符合正态分布。
注意:normaltest是一种基于峰度和偏度的检验方法
卡方检验(四格表检验 chi2_contingency)
例题:
设H0为化妆与性别无关,数据如下:
男 | 女 | ||
---|---|---|---|
化妆 | 15(55) | 95(55) | 110 |
不化妆 | 85(45) | 5(45) | 90 |
100 | 100 | 200 |
ss.chi2_contingency([[15,95],[85,5]])
第一个值为检验统计量:126
第二个值为p:2.9521414005078985e-29
第三个值为:1
第四个值为理论分布
p远小于显著性水平0.05,所以拒绝H0,即化妆和性别是有很大关系的
独立t分布检验
用于检验两组值的均值是否存在比较大的差异性
ss.ss.ttest_ind(ss.norm.rvs(size=10),ss.norm.rvs(size=20))
p=0.5,无法拒绝H0,即两组的均值没有什么差别。
接下来我们放大两组值 :
ss.ttest_ind(ss.norm.rvs(size=100),ss.norm.rvs(size=200))
p变为0.749,所以数据量越多,越能证明均值没什么差别。
方差检验(f_oneway)
多个样本之间的关系
例题:
ss.f_oneway([49,50,39,40,43],[28,32,30,26,34],[38,40,45,42,48])
p=0.0026,拒绝H0,即三组均值有差异
qq图
除了通过假设检验的方法 我们还可以通过qq图来对比一个分布是否符合一个已知的分布。可以找到这组数据的分位数,又可以找到正态分布的分位数,横轴为正态分布的分位数的值,纵轴为已知数据的分位数的值。可以得到一个散点图 如果图中的点正对xy轴的角平分线 就是符合分布的。
from statsmodels.graphics.api import qqplot
from matplotlib import pyplot as plt
plt.show(qqplot(ss.norm.rvs(size=100)))
因为该散点图中的点集中在xy轴的角平分线上,所以符合正态分布。