04简单统计推断
简单统计推断
统计推断
在总体中按照随机原则抽取一部分单位作为样本,根据样本数据归纳或推断总体数量特征的一种统计方法
基本原理是抽样推断中的大数定理和中心极限定理
- 抽样推断分类
参数推断
主要是根据抽样分布对总体的特征进行估计和检验,需要事先知道总体的分布状况
分为参数估计和假设检验
非参数推断
在未知总体分布的情况下,对总体的分布状况进行推断
原理
数据分布
数据分布是描述数据的一种形象方式,可以通过数据分布考察数据中各个数值出现的次数或百分比,描绘了数据出现次数或百分比的变动情况。同时,数据分布通常情况下时针对随机变量而言,也是进行统计推断的基础之一,绝大多数统计推断的结论都是从数据分布开始论述的
- 分类
变量类型划分:离散变量的分布、连续变量的分布
分布形式划分:正态分布、t分布、F分布、\({\chi}^2\) (卡方)分布
研究对象划分:总体分布、样本分布、抽样分布
- 概念
总体分布
已知总体往往是一个具有确定分布的随机变量,总体分布就是所有数据的分布
未知总体由于总体分布的参数无从知晓,对其特征腿短则属于非参数统计推断内容
总体分布具体指总体所有变量值的分布状况,即总体变量分布状况的一种概括
总体分布往往时未知的,总体的特征往往也是未知的,通常情况下是假设总体服从一个特定的分布,在这个假设下进行统计分析。总体的特征也叫作总体参数,由于不能完全获得总体数据,所以总体参数往往时未知的,但是总体参数时唯一确定存在的,这是由于当总体一旦确定,总体参数就自然而然确定了
在python中,如不能获得所有总体数据则不能直接计算总体参数,总体的特征只能通过样本数据进行推断
样本分布
从总体中抽取一个容量为n的分布,其中n叫做样本容量,简称样本量
样本总是在一定总体中抽取的,其中包含总体的一些信息,所以也成为经验分布;随着样本量的增大,样本的分布会逐渐接近总体分布
样本数据易于获得,但是同一个总体可以抽取若干个不同样本,因此,样本之间还是存在差异,这种差异是随机的,可以通过标准误差来衡量。在通常情况下,可以通过样本统计量和样本分布对总体进行推断
在python中,能够根据所获得数据计算样本统计量,病描绘样本分布的情况
抽样分布
抽样分布指样本统计量的分布
在进行数据的抽样调查中,由于随机性的存在,存在多个不同的样本数据。把这种所有类似情况下获得的所有可能样本找出来,如在总体容量为N的总体中,随机抽取样本容量为n的样本,考虑排列顺序一种可能有N**n,不考虑排列,可获得C_N^n个样本
计算每个样本的统计量,可以得到一系列的统计量数据,这些由统计量组成的数据形成的分布就是抽样分布。
抽样本分提供了样本统计量长远而稳定的信息,是进行推断的理论基础,也是抽样推断科学性的重要依据。由于现实中不能将所有样本都抽取出来,因此抽样分布又是一种理论上的分布
由抽样分布特征可以推导出中心极限定理
当样本量n充分大(经验法则n>30)的时候,样本值的分布服从以总体均值为均值,以总体方差的1/n倍为方差的正态分布
- 误差
在对总体的抽样过程中,由于随机原则的存在,样本和总体总是有差异的,总是不可避免的存在抽样误差。抽样误差具体指所有可能出现的样本指标的标准差,也可以理解为所有样本指标和总体指标之间的平均离差
由于误差的存在,在对样本数据进行分析的过程中,得出的结论就只能是不确定的结论。这个不确定性不代表不正确,而是代表在一定的误差允许范围内,结论的正确性是有概率保证的。
参数估计
总体的特征为参数。总体往往未知的,总体特征也往往是未知的,但是总体一旦确定,总体就是确定的,总体参数也是确定且唯一的。
人们可以收集总体的样本数据,利用样本数据计算出来的样本统计量,根据统计推断的基本原则,在一定概率或置信度下对总体参数进行推断。而样本统计量来自于样本数据,样本数据相对于总体数据而言具有多样性和不确定性,但是是已知的。
统计推断的参数估计过程便是利用已知、不确定、不唯一的样本统计量去推断未知、确定、唯一的总体参数的过程,这个过程可以通过利用样本数据对总体特征进行估计的方法实现。
由于估计值和真实值之间存在一定误差,所以参数估计过程一般是在一定的概率或者置信度下做出的。
根据是否有置信度作为保证,分为点估计和区间估计
- 点估计
点估计就是直接用实际抽样的样本数据得到的样本统计量的值,作为总体参数的估计值
点估计是一种不考虑抽样误差问题的估计方法,可以利用矩估计、最大似然估计等方法进行测算
点估计的方法比较简单,但是由于其不考虑抽样误差,可靠性较差,在大样本的时候比较常用。在实际使用中,用于点估计的估计量应当满足无偏、有效、一致性的要求,即估计量的数学期望等于真实值、估计量的方差是所有可用估计量当中最小的、当样本量充分大时估计量趋近于真实值。
- 区间估计
为了提高估计的精度,往往在估计时给出一个可靠程度即置信度。根据置信度的要求,利用随机抽取样本的统计量来确定总体参数估计值的估计上限和估计下限,即根据样本数据确定出总体参数置信区间的方法叫做区间估计
区间估计即在一定的置信度下给出总体参数估计值的一个估计区间,其中置信度是根据抽样误差设置的一种概率保证。置信区间也可理解为在置信度条件下,根据样本统计量和抽样误差去推断总体参数的可能范围。
置信度和置信区间时相关的,在抽象误差和样本量保持不变的条件下,置信度越大,置信区间就越大,置信度越小,置信区间就越小。常用置信度为95%,99%,90%等
假设检验
主要研究特定情况下,总体是否具备某种指定的特征。
- 基本原理
在一次观测或试验中几乎不可能发生的事情,称之为小概率事件。小概率事件在一次试验中发生的概率称为显著水平。
假设检验的基本原理是观测小概率事件在假设成立的情况下是否发生。如果在一次试验中小概率事件发生了,说明该假设在一定的显著水平不可靠或不成立,从而否定假设;如果在一次试验中小概率事件没有发生,只能说明没有足够理由相信假设是错误的,但是不能说明假设是正确的,因为在现有条件下无法收集所有的证据去证明它是正确的。
假设检验的结论是在一定的显著性水平下得出的。当我们去观测事件并下结论的时候,是有可能犯错误的。在假设检验过程中,无法保证不犯错误,这些错误主要归纳为如下2类
第I类错误
当假设为真的时候却否定它而犯的错误,即拒绝正确假设的错误,也叫弃真错误。犯第I类错误的概率记为\(\alpha\),所以通常也叫做\(\alpha\)错误,\(\alpha\)=1-置信度。
第II类错误
当假设为假时却可定它而犯的错误,即接受错误假设的错误,也叫纳伪错误。犯第II类错误的概率记为\(\beta\),所以通常也叫做\(\beta\)错误。
两类错误在其他条件不变的情况下时相反相成的,即\(\alpha\)增大时,\(\beta\)就减小;\(\alpha\)减小时,\(\beta\)就增大。要想同时减小两类错误,只能增加样本量。
\(\alpha\)错误易受分析人员控制,故在假设检验中,人们通常先控制第I类错误发生的概率\(\alpha\),具体表现为:在做假设检验之前先指定一个\(\alpha\)的具体数值,通常取0.05,也可是0.1、0.01等
除了指定理论上的显著水平\(\alpha\)外,在python的大多数分析工具库中可以根据样本分布和样本数据自动计算出一个实际的显著水平,通常称之为P值,P值也具体指在进行检验过程中实际犯第I类错误的概率
当P值比\(\alpha\)小的时候,说明实际计算的显著水平比理论的显著水平更小,小概率事件在一次试验中发生的几率更小,人们在P值的显著水平条件下,如果还能够观测到小概率事件的发生,责说明假设更不可靠,可以对假设做出否定的判断;但当P值比\(\alpha\)值大的时候,在P值的显著水平条件下,如果能够观测得到小概率事件的发生,说明假设可能没有任何问题,因为本来观测一个概率比较大的事件,其发生的可能本来就比较大,不能对假设做出否定的判断。因此,在python中进行假设检验,往往是从P值入手进行判定的,P值越小越能否定原假设。
- 假设检验的基本步骤
统计软件的检验过程与传统手工计算的检验过程有区别。
提出假设
没有假设,就没有检验的对象。假设就是对总体特征的一个特定描述。假设可以分为原假设和备择假设。
原假设又称为零假设(null hypothesis),通常情况下把想要搜集证据去否定的结论作为原假设,用\(H_0\)表示。而备择假设又可称为研究假设(alternate),通常情况下把想要搜集证据去支持的结论作为备择假设,用\(H_1\)表示
原假设和备择假设通常情况下是对立、互斥的。在原假设中的表达式通常包含\(=,\ge,\le\)等含有等号的符号;而备择假设中通常含有\(\ne,\lt,\gt\)等含有不等号的符号。
当备择假设含有\(\ne\)时,称之为双侧或双尾检验,当备择假设含有\(\lt,\gt\)时,称之为单侧或单尾检验
确定\(\alpha\)
确定理论的显著水平\(\alpha\),通常情况下取0.05,也可以取0.1,0.01等。本步骤为手工检验时常用手段,在使用软件工具进行检验时可不知定\(\alpha\)
选择计算统计量
根据已知条件和总体分布状况,在原假设 成立的情况下,选择计算用于检验的统计量。统计量的计算依据检验对象而异,通常情况下对总体均值或总体比例进行检验的统计量计算公式是
检验统计量 = (点估计值 - 原假设成立时的参数值) / 点估计值的标准误差
P值判定
在传统的手工检验过程中,这一步通常是根据\(\alpha\)的大小去查统计量对应的分布表,得到所谓临界值,然后用计算出来的统计量值与临界值对比,若统计量值在临界值之外,表示拒绝原假设,否则没有充分理由拒绝原假设。
在计算机的数据分析工具中,采用如下判定法则对假设检验下结论:
如果\(P\le\alpha\),则说明在显著水平\(\alpha\)条件下,原假设不成立,拒绝原假设,选择备择假设;如果\(P\gt\alpha\),说明在显著水平\(\alpha\)条件下,没有充分证据表明我们应当拒绝原假设。
如果没有制定\(\alpha\)值,则P值越小越显著。
- 假设检验中总体的几种不同情况
在进行统计推断之前,应该先清楚总体的分布情况,因为不同的总体分布情况下计算的统计量形式不同。检验所用的统计量的形式和步骤取决于所抽取样本的样本量大小,无论大样本还是小样本,此处均假定其总体服从正态分布
大样本
根据经验法则,大样本就是指样本量\(n\ge30\)的样本。以总体均值的假设检验为例,在大样本的情况下,根据中心极限定理,均值的抽样分布服从正态分布,所以可以使用正态统计量(即Z统计量)进行假设检验。
小样本
对于小样本(即样本量\(n\lt30\)的样本)的情况可以细分2种情况:
当总体方差已知时,仍然使用正态统计量(即Z统计量);
当总体方差未知时,则使用t统计量,t统计量服从自由度为(n-1)的学生分布(即t分布)。
上述两种情况也适用于区间估计。
各种情况下所用的检验统计量
| 检验类型 | 统计量 | 抽样分布 |
|---|---|---|
| 单样本均值Z检验 | \(z=\frac{\bar{x}-\mu_0}{\sigma/\sqrt{n}}\) | 标准正态分布 |
| 单样本均值t检验 | \(t=\frac{\bar{x}-\mu_0}{s/\sqrt{n}}\) | 自由度为(n-1)的t分布 |
| 单样本比例检验 | \(z=\frac{p-\pi_0}{\sqrt\frac{\pi_0(1-\pi_0)}{n}}\) | 标准正态分布 |
| 单样本方差检验 | \(\chi^2=(n-1)s^2/\sigma^2_0\) | 自由度为(n-1)的\(\chi^2\)分布 |
| 两独立样本均值之差t检验 | \(t=\frac{(\bar{x_1}-\bar{x_2})-(\mu_1-\mu_2)}{\sqrt{\frac{(n_1-1)s^2_1+(n_2-1)s^2_2}{n_1+n_2-2}}\sqrt{\frac{1}{n_1}+\frac{1}{n_2}}}\) | 自由度为\((n_1+n_2-2)\)的t分布 |
| 成对样本均值之差t检验 | \(t = \frac{\sum^n_{i=1}{d_i}/{n_d-d_0}}{\sqrt{\frac{\sum^n_{i=1}(d_i-{\sum^n_{i=1}{d_i}}/n_d)}{n_d-1}}/{\sqrt{n_d}}}\) | 自由度为\((n-1)\)的t分布 |
| 两独立样本比例之差的检验 | \(z=\frac{(p_1-p_2)-d_0}{\sqrt{p_1(1-p_1)/n_1+p_2(1-P_2)/n_2}}\) | 标准正态分布 |
| 两独立样本方差之比检验 | \(F=s^2_1/s^2_2\) | 第一自由度为\((n_1-1)\),第二自由度为\((n_2-2)\)的F分布 |
其中,\(\sigma\)表示总体标准差,\(n_i\)表示样本容量,\(n_d\)表示成对样本的个数,\(\bar{x}、p、s^2\)分别表示样本均值、样本比例和样本方差,\(d_i\)表示成对样本的两组变量值之差,\(\mu_0、\pi_0、\sigma^2_0\)分别表示原假设成立时的总体均值、总体比例和总体方差。
对于表中的检验情景,不必按照检验统计量去进行计算,只需根据python对应的数据分析工具库给出的P值结果进行判断。
实战
单总体
单总体的点估计实际就是计算对应参数的样本统计量。
单总体的区间估计是,在估计总体特征的时候依照置信度给出一个置信区间。置信区间在其他条件不变的情况下,取决于置信度水平(置信度=1-显著性水平 \(\alpha\))。在大部分python分析工具库中,质询区间的置信度是由 \(\alpha\) 控制的。
参数估计
import pandas as pd
import statsmodels.api as sm
import scipy.stats as stats
import numpy as np
moisture = pd.read_csv('./data/moisture.csv')
print(moisture.head(5))
# moisture
# 0 4.50
# 1 3.50
# 2 3.55
# 3 4.03
# 4 3.19
# 饼干水分含量不得超过4.0%。随机抽取饼干规格为100g/pcs的饼干50块
# 均值
m_res = sm.stats.DescrStatsW(moisture['moisture']).zconfint_mean(alpha=0.05)
# Z估计求均值置信区间
print(m_res) # (3.85610519083518, 4.091094809164821)
m_res = sm.stats.DescrStatsW(moisture['moisture']).tconfint_mean(alpha=0.05)
# t估计求均值置信区间
print(m_res) # (3.8531311237649772, 4.094068876235024)
moisture_mean, moisture_var, moisture_std = stats.bayes_mvs(moisture['moisture'], alpha=0.95)
# t分布下的均值估计,返回总体均值、总体方差和标准差的置信区间
print(moisture_mean, moisture_var, moisture_std)
# Mean(statistic=3.9736000000000002, minmax=(3.853131123764977, 4.094068876235023))
# Variance(statistic=0.18733089361702127, minmax=(0.12538093683821303, 0.27902314399775807))
# Std_dev(statistic=0.43052145521911656, minmax=(0.3540917068193112, 0.5282264135744805))
# 方差
m, v, s = stats.mvsdist(moisture['moisture'])
print(m.interval(0.95)) # 95%置信度下总体均值的置信区间 (3.853131123764977, 4.094068876235023)
print(v.interval(0.95)) # 95%置信度下总体方差的置信区间 (0.12538093683821303, 0.27902314399775807
print(s.interval(0.95)) # 95%置信度下总体标准差置信区间 (0.3540917068193112, 0.5282264135744805)
# 比例
res = sm.stats.proportion_confint(95, 100, alpha=0.01, method='binom_test')
# 二项分布的置信区间
# 参数
# - count 成功个数
# - nobs 试验总个数
# - alpha 置信水平
# - method 抽样分布选择
# normal:拟正态
# agresti-coul
# wilson: wilson 结果隔离
# jeffreys:jeffrey贝叶斯
# binom_test: 二进制试验
print(res) # (0.8649789068448047, 0.987031078672979)
假设检验
- 总体均值
单样本均值\(Z\) 检验
-
大样本(样本量 \(n \geq 30\)) ,总体方差已知
-
大样本,总体方差未知,则用样本方差代替。
-
小样本,总体方差已知,
三种情况下可使用服从正态分布的正态统计量(\(Z\) 统计量)进行假设检验。
import pandas as pd
import statsmodels.api as sm
import scipy.stats as stats
import numpy as np
moisture = pd.read_csv('./data/moisture.csv')
print(moisture.head(5))
# moisture
# 0 4.50
# 1 3.50
# 2 3.55
# 3 4.03
# 4 3.19
# 抽样获取的水平含量样本均值为3.97g,能否认为此批饼干符合国标? \alpha=0.05
# H_0:\mu \leq 4;H_1: \mu>4
res = sm.stats.DescrStatsW(moisture['moisture']).ztest_mean(value=4, alternative="larger")
# 对总体均值进行Z检验
# 返回第一个值为根据样本数据计算的Z统计量,第二个值为统计量对应的p值
# 参数
# - value:平均值的假设值
# - alternative:H1的假设情况
print(res) # (-0.44038583116698754, 0.6701711574008186)
# p_v=0.67>0.05,故无法拒绝H_0,认为符合国标
单样本均值 \(t\) 检验
小样本,总体方差未知
import pandas as pd
import statsmodels.api as sm
import scipy.stats as stats
import numpy as np
mobile = pd.read_csv('./data/mobile.csv')
print(mobile.head(5))
# csi
# 0 76
# 1 84
# 2 86
# 3 90
# 4 84
# 样本算出满意度平均分为81.2,经理评估值82。需要总体满意度平均值,来判断是否调查中随机因素造成区别,\alpha=0.05
# H_0:\mu \leq 82, H_1:\mu>82
res = sm.stats.DescrStatsW(mobile['csi']).ttest_mean(value=82, alternative="larger")
# 对总体均值进行t检验
# 返回第一个值为根据样本数据计算的t统计量,第二个值为统计量对应的p值,第三个为自由度
# 参数
# - value:平均值的假设值
# - alternative:H1的假设情况
print(res) # (-0.6859943405700328, 0.7503546857532633, 24.0)
# p_v = 0.75 >> 0.05,故无法拒绝H_0
# 另一种测试方法
res = stats.ttest_1samp(a=mobile['csi'], popmean=82)
# 对总体均值及性能t检验
# 返回的结果是一个对象,第一个参数是统计量值,第二个是p值
# 注意:此处的p值是双侧检验的p值,即备择假设为不等号;
# 如果备择假设为<号,
# 当t>=0时,进行判定的单侧p值=1-Pvalue/2
# 当t<0时,进行判定的单侧p值=Pvalue/2
# 如果备择假设为>号,
# 当t>=0时,进行判定的单侧p值=Pvalue/2
# 当t<0时,进行判定的单侧p值=1-Pvalue/2
print(res) # Ttest_1sampResult(statistic=-0.6859943405700328, pvalue=0.4992906284934734)
# p_v = 0.49>0.05,无法拒绝H_0
- 总体比例
总体比例的假设检验是指根据样本数据,对总体具备某种属性的个体总数占全体属性总数的比例,提出假设并进行检验的过程。通常在大样本条件下进行。
# 产品合格率应>97%,从产品中随机抽取100个检验,合格95个,不合格5个,\alpha=0.05
# H_0:p \leq 0.97, H_1:p>0.97
res = stats.binom_test(95, 100, p=0.97, alternative="greater")
# 对单总体比例进行检验
# 返回p值
# 参数
# - x:成功个数
# - n:试验测试
# - p=0.5:成功率
# - alternative="two-side":H1的假设情况
print(res) # 0.9191628710986264
# 其他测试方法
res = sm.stats.binom_test(95, 100, prop=0.97, alternative="larger")
print(res) # 0.9191628710986264
res = sm.stats.proportions_ztest(95, 100, value=0.97, alternative="larger")
print(res) # (-0.9176629354822475, 0.8206023210565294)
两总体
参数估计和假设检验的问题扩展到两个总体的情形:主要考察两个总体的参数是否有差异。
根据来自于总体样本数据的性质不同,分为:独立样本的统计推断、成对样本的统计推断
- 独立样本
独立样本即两组样本数据是相互独立,一个样本数据特征的变动不会影响另一个样本数据特征的变动
独立样本之差 \(t\) 检验
一般假定两个总体均服从正态分布,使用 \(t\) 统计量及性能检验
import pandas as pd
import statsmodels.api as sm
import scipy.stats as stats
import numpy as np
battery = pd.read_csv('./data/battery.csv')
print(battery.head(5))
# Endurance tech
# 0 4.1 1
# 1 3.7 1
# 2 3.5 1
# 3 3.9 1
# 4 4.1 1
# 考察两种新工艺对电池的续航时间影响,\alpha=0.01
# H_0: \mu_1-\mu_2=0, H_1:\mu_1-\mu_2 \neq 0
# 1.首先对两样本总体方差是否相等(方差齐性)进行检验
# 返回一个对象,属性一是统计量的值,属性二是p值
eq_res = stats.bartlett(battery[battery['tech'] == 1]['Endurance'], battery[battery['tech'] == 2]['Endurance'])
print(eq_res) # BartlettResult(statistic=3.3228777945188033, pvalue=0.0683221369421403)
# 方法二
eq_res = stats.levene(battery[battery['tech'] == 1]['Endurance'], battery[battery['tech'] == 2]['Endurance'])
print(eq_res) # LeveneResult(statistic=1.543714821763612, pvalue=0.21833338426451232)
# p_v>0.01,认为两总体方差具有同质性,即二者方差相等
# 2.样本均值的t检验
# 返回一个对象,属性一是统计量的值,属性二是p值
res = stats.ttest_ind(battery[battery['tech'] == 1]['Endurance'], battery[battery['tech'] == 2]['Endurance'])
print(res) # Ttest_indResult(statistic=-2.9908265619140626, pvalue=0.0038722567339729993)
# 方法二:不使用原始值直接使用统计量
ndarry1 = battery[battery['tech'] == 1]['Endurance']
ndarry2 = battery[battery['tech'] == 2]['Endurance']
count1 = ndarry1.size
count2 = ndarry2.size
mean1 = np.mean(ndarry1)
mean2 = np.mean(ndarry2)
std1 = np.std(ndarry1)
std2 = np.std(ndarry2)
res = stats.ttest_ind_from_stats(mean1, std1, count1, mean2, std2, count2)
print(res) # Ttest_indResult(statistic=-3.0344905732010936, pvalue=0.003411449955817166)
# p_v=0.003<0.01,拒绝H_0
# H_0:\mu_1-\mu_2 \geq -0.1, H_1:\mu_1-\mu_2 <-0.1
# statsmodels也提供了测样本均值的t校验
res = sm.stats.ttest_ind(battery[battery['tech'] == 1]['Endurance'], battery[battery['tech'] == 2]['Endurance'],
alternative="smaller", usevar='pooled', value=0)
# 返回三个值:t统计量值,p值,计算t统计量的自由度
# 参数
# - x: 样本一的数据
# - y: 样本二的数据
# - alternative: H1的假设情况,two-sided:双边检测;larger:H1是>;smaller:H1是<
# - usevar:总体方差是否相等,pooled:相等,unequal:不相等
# - value:假设均值下的差值
print(res) # (-2.990826561914063, 0.003872256733972988, 68.0)
# p=0.003<0.01,故拒绝H_0
独立样本比例之差 \(z\) 检验
独立样本比例之差的假设检验主要考察两个总体比例是否有差异或检验其差异的具体数值。这里的比例仍然是指总体只具备两种属性,其中巨笔某种属性的个体数目占总体数目的比重,即假定两个总体都服从二项分布,通常用 \(Z\) 统计量进行检验
import pandas as pd
import statsmodels.api as sm
import scipy.stats as stats
import numpy as np
magzine = pd.read_csv('./data/magzine.csv')
print(magzine.head(5))
# name gender
# 0 1 1
# 1 1 2
# 2 1 1
# 3 1 1
# 4 1 1
# 假设name为1和2的gender为2的比例为p1,p2, \alpha=0.01
# 根据经验判定p1=0.4,p2=0.7,p1-p2>-0.3
# H_0:p1-p1 \leq -0.3, H_1: p1-p2>-0.3
# 为name,gender变量挂上标签便于分析
magzine['name'] = magzine['name'].astype('category')
magzine['name'].cat.categories = ['Fashion', 'Cosmetic']
magzine['name'].cat.set_categories = ['Fashion', 'Cosmetic']
magzine['gender'] = magzine['gender'].astype('category')
magzine['gender'].cat.categories = ['Male', 'Female']
magzine['gender'].cat.set_categories = ['Male', 'Female']
# 两个杂志的女性读者人数
female = magzine[magzine['gender'] == 'Female']['name'].value_counts()
# 两个杂志读者总数
magzines = magzine['name'].value_counts()
# Cosmetic 35
# Fashion 16
# Name: name, dtype: int64
# Cosmetic 46
# Fashion 34
# Name: name, dtype: int64
# 检验
res = sm.stats.proportions_ztest(np.array(female), np.array(magzines), value=0.3, alternative='smaller', prop_var=False)
# 比例特性z检验,返两个元素组成的远组,元素1为统计量的值,元素2为p值
# 参数
# - count:成功数
# - nobs:观察总数
# - value=None, 差值
# - alternative='two-sided',H1假设情况
# - prop_var=False,False表示比例估计的方差为按抽样比例计算
print(res) # (-0.0893894201435671, 0.4643862156571413)
# p_v = 0.464 > 0.01, 故无法拒绝原假设,认为两本杂志的女性读者的总体比例之差没有超过30%
- 成对样本
成对样本主要用于对两个总体均值之差进行统计推断。成对样本一般不能使用独立样本的参数估计和假设检验方法,需要先对样本数据进行处理。其处理的理论基础是成对样本的不同个体之间的观测值是相对独立的。基于此,可以先把两个样本中配对的观测值逐个相减,形成一个由独立观测值组成的样本,然后再用单样本检测方法去进行统计推断。
import pandas as pd
import statsmodels.api as sm
import scipy.stats as stats
import numpy as np
happiness = pd.read_csv('./data/happiness.csv')
print(happiness.head(5))
# Year2015 Year2016
# 0 69.48 77.44
# 1 82.51 67.49
# 2 82.12 64.56
# 3 70.32 70.14
# 4 75.29 74.72
# 对一个人测试不同年份幸福程度,认为这些样本是成对样本, \alpha=0.05
# H_0: \mu_1-\mu_2 \geq 0; H_1: \mu_1-\mu_2 <0
res = stats.ttest_rel(happiness['Year2015'], happiness['Year2016'])
# 双边检验结果
print(res) # Ttest_relResult(statistic=-0.45945807951277384, pvalue=0.6464067663555169)
# 单侧p_v = 0.646/2 = 0.323 > 0.05,故无法拒绝H_0
# 方法二
res = sm.stats.ttost_paired(happiness['Year2015'], happiness['Year2016'], -0, 0)
# 返回的最后两行分别给出备择假设差异均值大于low和备择假设差异均值小于upp的t统计量、p值和自由度
# 参数
# - x1: 第一个独立变量
# - x2: 第二个独立变量
# - low: 两个样本均值之差的下界
# - upp: 两个样本均值之差的上界
print(res) # (0.6767966168222416,
# (-0.45945807951277395, 0.6767966168222416, 199.0),
# (-0.45945807951277395, 0.32320338317775843, 199.0))
# 单侧p_v= 0.676/2 = 0.338 > 0.05,故无法拒绝H_0

浙公网安备 33010602011771号