• Python统计学05——假设检验


    参考书目:贾俊平. 统计学——Python实现. 北京: 高等教育出版社,2021.


    参数估计和假设检验是统计学的核心。上一节介绍了常见的参数估计,本章介绍Python实现假设检验的流程。

    导入包,读取案例数据

    1. import numpy as np
    2. import pandas as pd
    3. from statsmodels.stats.weightstats import ztest
    4. example6_3=pd.read_csv("example6_3.csv",encoding="gbk")
    5. example6_3.head()

    数据前五行

     


    一个总体均值的检验(大样本) 

    对该组数据检验,原假设均值是否大于81,备择假设是否小于81。

    计算如下

    1. z, p_value=ztest(x1=example6_3["PM2.5值"],value=81,alternative="smaller")
    2. print(f"样本均值={example6_3['PM2.5值'].mean() :.2f}, z统计量值={z: .4f}, p值={p_value: .4f}")

     

     主要看p值,p大于0.05,说明不能拒绝原假设,现在的pm2.5的均值没有显著小于81,空气质量不一定变好了。


    一个总体均值的检验(小样本) 

    读取案例数据

    1. example6_4=pd.read_csv("example6_4.csv",encoding="gbk")
    2. example6_4.head()

     

    对该组数据检验,原假设均值等于5,备择假设是不等于5。

    计算如下

    1. from scipy.stats import ttest_1samp
    2. t,p_value = ttest_1samp(a=example6_4['厚度'],popmean=5) #假设popmean为总体均值
    3. print(f"样本均值={example6_4['厚度'].mean():.2f},t统计量值={t:.4f},p值={p_value:.4g}")

     

     p值很小,说明拒绝原假设,均值显著不为5。

    既然整体均值不为5,那么每个样本平均下来均值和5差了多少呢,计算如下

    1. mu = 5
    2. xbar=example6_4["厚度"].mean()
    3. sd=example6_4["厚度"].std()
    4. d=abs(xbar-mu)/sd
    5. print(f"效应量 d={d:.4f}")

     

    平均均值和标准的均值差了1.2583个标准差 

     


     两个总体均值假设检验

    读取案例数据

    1. from statsmodels.stats.weightstats import ztest
    2. example6_5=pd.read_csv("example6_5.csv",encoding="gbk")
    3. example6_5.head()

    计算

    1. z,p_value = ztest(x1=example6_5['男生上网时间'],x2=example6_5['女生上网时间'],alternative='two-sided')
    2. print(f"男生平均上网时间为{example6_5['男生上网时间'].mean():.4f}, 女生平均上网时间为{example6_5['女生上网时间'].mean():.4f}\
    3. \n z统计量值={z:.4f},p值={p_value:.4f}")

     p大于0.05,没有证据说明男女生上网时间有显著性差异。

    当然两个总体的检验还分为总体方差是否相等,样本自由度是否相等很多种不同的情况,计算和上面这种情况有差异的。但是公式过于繁琐,而且用的少就不展示了。


    总体方差的检验

    1. #一个总体方差的检验
    2. from scipy.stats import chi2
    3. example6_11=pd.read_csv("example6_11.csv",encoding="gbk")
    4. example6_11.head()

     计算

    1. x=example6_11["填装量"]
    2. sigma0_2=16
    3. s2=x.var();n=len(x);df=n-1
    4. chi2_value=(n-1)*s2/sigma0_2
    5. p_value=1-chi2.cdf(chi2_value,df=df)
    6. print(f"样本填装量的方差={s2:.4f},卡方统计量值={chi2_value:.4f},自由度df={df},p值={p_value:.4f}")

     


    两个总体方差比的检验

    1. from scipy.stats import f
    2. example6_6=pd.read_csv("example6_6.csv",encoding="gbk")
    3. example6_6.head()

     计算

    1. x1=example6_6["甲企业"];x2=example6_6["乙企业"]
    2. s1_square=x1.var();dfn=len(x1)-1
    3. s2_square=x2.var();dfd=len(x2)-1
    4. f_value=s1_square/s2_square
    5. p_value=f.cdf(f_value,dfn=dfn,dfd=dfd)*2
    6. print(f"F统计量值={f_value:.4f}, p值={p_value:.4f}")

     


    正态性检验

    有时候我们要求数据是服从正态分布的是最好的,因此要进行检验,看数据的分布是否为正态分布,直观上可以画QQ图看。还可以做K-S检验。

    1. #正态概率图
    2. import pandas as pd
    3. import seaborn as sns
    4. import statsmodels.api as sm
    5. from matplotlib import pyplot as plt
    6. plt.rcParams["font.sans-serif"]=["SimHei"]
    7. plt.rcParams["axes.unicode_minus"]=False
    8. example6_3=pd.read_csv("example6_3.csv",encoding="gbk")
    9. example6_3.head()

     画图

    1. pplot=sm.ProbPlot(example6_3["PM2.5值"],fit=True)
    2. fig=plt.figure(figsize=(12,5))
    3. #绘制Q-Q图
    4. ax1 = plt.subplot(141)
    5. pplot.qqplot(line="r",ax=ax1,xlabel="期望正态值",ylabel="标准化的观测值")
    6. ax1.set_title("正态性Q-Q图",fontsize=15)
    7. #绘制P-P图
    8. ax2 = plt.subplot(142)
    9. pplot.ppplot(line="45",ax=ax2,xlabel="期望的累积概率",ylabel="观测的累积概率")
    10. ax2.set_title("正态性p-p图",fontsize=15)
    11. #绘制核密度图
    12. ax3 = plt.subplot(143)
    13. sns.kdeplot(example6_3["PM2.5值"],shade=True,alpha=0.5,lw=0.6)
    14. #plt.xlabel("密度")
    15. #plt.ylabel("PM2.5")
    16. ax3.set_title("核密度图",fontsize=15)
    17. #绘制箱线图
    18. ax4 = plt.subplot(144)
    19. sns.boxplot(data=example6_3["PM2.5值"],width=0.6,fliersize=2)
    20. fig.tight_layout()

     K-S检验

    1. #KS检验
    2. from scipy.stats import kstest
    3. d=example6_4['厚度']
    4. D,p_value=kstest(d,'norm',alternative='two-sided',mode='asymp',args=(d.mean(),d.std()))
    5. print(f"统计量D={D:.5f}, p值={p_value:.4g}")

     p>0.05,不拒绝原假设,没有证据证明不服从正态分布。

  • 相关阅读:
    数据结构:树形数据结构
    【JDBC】----综合案例(账号密码登录和SQL注入)
    Win10一键重装系统后计算机图标怎么调出来
    【form校验】3.0项目多层list嵌套
    7 8051 C51 使用_getkey对scanf输入重定向,实现标准输入输出,getchar
    基于Selenium Grid搭建自动化并行执行环境
    java集合
    java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
    手写小程序摇树工具(二)——遍历js文件
    c++中如何利用VA_LIST 和单体模式,构建自己的log小系统
  • 原文地址:https://blog.csdn.net/weixin_46277779/article/details/126698767