八、非参数检验:使用python进行单总体位置参数的检验-符号检验

前面几讲中的参数检验都是基于这样一个假设:样本来自于正态分布的总体!那么如果总体不符合正态分布时,如何对其参数或者分布进行检验呢?这就涉及到非参数检验,我们首先从单个总体的位置参数和分布检验讲起。

例1:假设某城市16座预售的楼盘均价(单位:百元/ m 2 m^2 m2 )如下表所示:
36 32 31 25 28 36 40 32
41 26 35 35 32 87 33 35
问:该地区评价楼盘价格是否与媒体公布的3700元/ m 2 m^2 m2的说法相符?

解:若假设楼盘均价服从正态分布,则有参数统计分析建立假设如下:
H 0 : μ = 37 H 1 : μ ≠ 37 H_0: \mu=37 \quad H_1:\mu \neq 37 H0:μ=37H1:μ=37
那么该问题就是方差未知的均值检验,其检验统计量为:
X ‾ − μ s / n ∼ t ( n − 1 ) \frac{\overline X -\mu}{s/\sqrt{n}}\sim t(n-1) s/n Xμt(n1)
使用python计算如下:

import numpy as np
from scipy import stats
data=[36, 32, 31, 25, 28, 36, 40, 32, 41, 26, 35, 35, 32, 87, 33, 35]
_, pval=stats.ttest_1samp(data, 37)
# 结果:
pval=0.8895650329479428

p v a l = 0.8895650329479428 > α = 0.05 pval=0.8895650329479428>\alpha=0.05 pval=0.8895650329479428>α=0.05,因此没有理由拒绝原假设。

以上16个数据中,其中只有3个楼盘的均价高于37, 其他13个均低于37, 由正态分布的对称性可知,若37为楼盘的均价的平均水平,则从总体中提取的数据分布在37左右的个数应该大致相等,不应该出现比例失衡,因此37不能作为正态分布的对称中心。
然而若知道某一连续数据总体中心位置的参数(中位数和均值),总体均值的点估计是样本均值,总体中位数的点估计是样本中位数,对于单峰对称分布来说,两者差距不大,而对于非对称分布来说,中位数较均值对总体的中心位置来说,将是更稳健的估计。

由于分布未知,使用参数估计会出现错误,则以上检验用中位数检验较为合理,由此引入非参数检验。

1. 符号检验的基本原理

假设总体分布函数为 F ( x ) F(x) F(x), M e M_e Me是总体的中位数,对于假设检验问题:
H 0 : M e = M 0 H 1 : M e ≠ M 0 H_0: M_e=M_0 \quad H_1: M_e\neq M_0 H0:Me=M0H1:Me=M0
定义: S + = c o u n t { X i : X i > M 0 , i = 1 , 2 , . . . , n } S^+=count\{X_i: X_i \gt M_0, i=1,2,...,n\} S+=count{Xi:Xi>M0,i=1,2,...,n}, S − = c o u n t { X i : X i < M 0 , i = 1 , 2 , . . . , n } S^-=count\{X_i:X_i \lt M_0, i=1,2,...,n\} S=count{Xi:Xi<M0,i=1,2,...,n}, 则有 S + + S − = n , k = m i n ( S + , S − ) S^+ + S^-=n, k=min(S^+, S^-) S++S=nk=min(S+,S)

简单来说,就是遍历样本数据,然后分别记录大于中位数的个数( S + S^+ S+)和小于中位数的个数( S − S^- S)。那么对每一个样本点来说,要么大于中位数,要么小于中位数(等于的排除),那么就是一个0-1分布问题了。

在原假设情况下, K ∼ b ( n , 0.5 ) K\sim b(n,0.5) Kb(n,0.5), 在显著性水平为 α \alpha α下的拒绝域为:
2 P b i n o m ( K ≤ k ∣ n , p = 0.5 ) ≤ α 2P_{binom}(K\le k|n, p=0.5)\le \alpha 2Pbinom(Kkn,p=0.5)α
其中 k k k为满足上式最大的 k k k值。
使用python计算如下:

import numpy as np
from scipy import stats

data=[36, 32, 31, 25, 28, 36, 40, 32, 41, 26, 35, 35, 32, 87, 33, 35]
data = np.array(data)
k=min(len(data[data>37]), len(data[data<37]))
pval=2*stats.binom.cdf(k, len(data), 0.5)
# 结果:
pval = 0.02127075195312

因为 p v a l = 0.02127075195312 < α = 0.05 pval = 0.02127075195312\lt \alpha=0.05 pval=0.02127075195312<α=0.05,所以拒绝原假设。

这里使用符号检验得到了与使用t检验相反的结论,到底该相信哪个结论?在总体分布未知的情况下,符号检验要优于t检验。

1.1. 符号检验的小结

零假设备择假设检验统计量p值
M e = M 0 M_e = M_0 Me=M0 M e > M 0 M_e \gt M_0 Me>M0 K = S − K=S^- K=S p ( K ≤ k ) p(K\le k) p(Kk)
M e = M 0 M_e = M_0 Me=M0 M e < M 0 M_e \lt M_0 Me<M0 K = S + K=S^+ K=S+ p ( K ≤ k ) p(K\le k) p(Kk)
M e = M 0 M_e = M_0 Me=M0 M e ≠ M 0 M_e\neq M_0 Me=M0 K = m i n ( S + , S − ) K=min(S^+, S^-) K=min(S+,S) 2 p ( K ≤ k ) 2p(K\le k) 2p(Kk)

注: 在实际问题中可能有某一些观察值 x i x_i xi 正好等于 M 0 M_0 M0 , 一般采用的方法是将这
些正好等于 M 0 M_0 M0 的观察值舍去,并相应地减少样本容量的n值.

2. 大样本情况

当样本容量n较大时,根据中心极限定理,且 E ( S + ) = n 2 , v a r ( S + ) = n 4 E(S^+)=\frac{n}{2}, var(S^+)=\frac{n}{4} E(S+)=2n,var(S+)=4n,所以有如下结论:
s + − n 2 n / 4 ∼ N ( 0 , 1 ) \frac{s^+-\frac{n}{2}}{\sqrt{n/4}}\sim N(0,1) n/4 s+2nN(0,1)
因为标准正态分布时连续分布,所以在离散的二项分布近似中,要用连续性修正量,即:
S + − n 2 ± 0.5 n / 4 ∼   N ( 0 , 1 ) \frac{S^+-\frac{n}{2} \pm0.5}{\sqrt{n/4}}\sim \ N(0,1) n/4 S+2n±0.5 N(0,1)
上式中,当 S + < n 2 S^+\lt \frac{n}{2} S+<2n时取加号(+),当 S + > n 2 S^+\gt \frac{n}{2} S+>2n时取减号(-).

2.1. 大样本情况下的符号检验

零假设备择假设检验统计量p值
M e = M 0 M_e = M_0 Me=M0 M e > M 0 M_e \gt M_0 Me>M0 Z Z Z p ( Z ≤ z 0 ) p(Z\le z_0) p(Zz0)
M e = M 0 M_e = M_0 Me=M0 M e < M 0 M_e \lt M_0 Me<M0 Z Z Z p ( Z ≤ z 0 ) p(Z\le z_0) p(Zz0)
M e = M 0 M_e = M_0 Me=M0 M e ≠ M 0 M_e\neq M_0 Me=M0 Z Z Z p ( ∥ Z ∥ ≤ ∥ z 0 ∥ ) p(\|Z\|\le\|z_0\|) p(Zz0)

例2: 设某化妆品厂商有A和B两个品牌,为了解顾客对A品牌和B品牌在使用上的差异,将A品牌和B品牌同时交给45个顾客使用,一个月后得到如下数据:

  • 喜欢A品牌的客户人数:22人
  • 喜欢B品牌的客户认识:18人
  • 不能区分的人数:5人

解:假设检验问题如下:
H 0 : P ( A ) = P ( B ) H 1 : P ( A ) ≠ P ( B ) H_0: P(A)=P(B) \quad H_1: P(A)\neq P(B) H0:P(A)=P(B)H1:P(A)=P(B)
由给定的数据知道: S + = 22 , S − = 18 , S + + S − = 40 S^+ =22, S^- = 18, S^++S^-=40 S+=22,S=18,S++S=40
使用python计算如下(使用大样本):

import numpy as np
from scipy import stats
z0=(22-40/2 - 0.5)/(np.sqrt(40)/2)
z0=abs(z0)
Z=stats.norm(loc=0, scale=1)
pval=Z.cdf(z0)+Z.sf(-z0)
# 结果:
pval=0.6352562959972483

因为 p v a l = 0.6352562959972483 < α = 0.05 pval=0.6352562959972483 \lt \alpha=0.05 pval=0.6352562959972483<α=0.05。所以没有理由拒绝原假设。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值