非参数统计概述

非参数统计概述

引言

非参数统计(nonparametric statistics)是相对于参数统计而言的一个统计学分支,是数理统计的重要内容。在参数统计中,我们往往碰到的是这样的情况:

  • 总体分布的数学形式已知(例如正态分布、指数分布等)。
  • 总体分布的概率密度函数中含有有限个参数。

然而实际情况往往不是这样,我们通常不知道总体分布的数学形式,或者虽然已知总体的分布但却不能用有限个参数去刻画,我们只能对总体做出一些简单的假定(例如总体分布是连续的或者离散的,总体分布是否对称),这时如果我们要对总体的某些性质进行估计或者假设检验,就需要使用非参数方法

非参数方法是一种不依赖于总体分布具体形式的统计推断方法,构造统计量通常与总体分布无关,也就是说,非参数方法与总体分布无关,因此,非参数方法也被称为自由分布(distribution-free)方法。非参数方法具有如下的特点:

  • 适用面广但针对性较差
  • 对变量的量化要求很低。无论是分类变量和数值变量,都可以使用非参数方法进行估计或检验。
  • 非参数方法对于数据的要求不如参数方法严格
  • 非参数方法具有较好的鲁棒性,不容易受数据中极端值和离群点的影响。
  • 对于符合参数方法条件的数据,使用非参数方法会使犯第二类错误的概率增大,即统计功效会更小。

由以上的特点,我们可以总结出选用参数方法和非参数方法的原则:

  • 如果中位数(而不是均值)更能反应数据的集中趋势时(极端值较多),应当选用非参数方法。
  • 如果数据为定序变量(如优良中)时,应当采用非参数方法。
  • 如果数据符合参数方法的条件时,应当优先选用参数方法

接下来我们来详细讨论一些非参数方法的例子。

非参数方法举例

Wilcoxon 符号秩检验

Wilcoxon符号秩检验(signed-rank test)对应着参数方法中的单样本t检验法和配对样本t检验法。接下来我们通过一个例子来讲解Wilcoxon符号秩检验的步骤。

假设我们研究的课题是上培训班是否会提升学生成绩,我们收集到的数据如下:

BeforeAfter
7260
6286
7083
6053
7575
5565
7189
4856

根据这一张表格,我们可以进一步得到这样的另一张表格。

DiffSigned-rank
-12-4
247
135
-7-1
0
103
186
82

其中,Diff是拿右边一列减去左边一列得到的数据,而得到Signed-rank略显复杂,首先我们将Diff的绝对值从小到大进行排名(rank),分别编上1-n的编号,然后根据Diff的实际符号,给排名也添加上相同的符号,我们就得到了样本的符号秩(signed-rank),我们就由符号秩来构造统计量。

需要注意的是,我们进行Wilcoxon符号秩检验时,不考虑Diff=0的情况,我们要将Diff=0的数据去除。

接下来我们用符号秩来构造统计量 Z Z Z Z = ∑ i = 1 n S R i ∑ i = 1 n S R i 2 Z = \frac{\sum^n_{i=1}SR_i}{\sqrt{\sum^n_{i=1}SR_i^2}} Z=i=1nSRi2 i=1nSRi
与参数方法中的 Z Z Z统计量一样, Z Z Z~ N ( 0 , 1 ) N(0,1) N(0,1),于是我们算得 Z Z Z统计量之后,就可以通过标准正态分布来计算p值,在上面这个例子中: Z = 1.52 Z=1.52 Z=1.52
我们进行一个双尾检验,查表可得 p − v a l u e = 2 ∗ ( 1 − 0.9357 ) = 0.1286 > 0.05 p-value=2*(1-0.9357)=0.1286>0.05 pvalue=2(10.9357)=0.1286>0.05
得出结论:应当接受零假设,成绩与是否上辅导班无关。

Wilcoxon秩和检验

Wilcoxon秩和检验(rank-sum test)用于检验两个总体的中位数是否相等,适用于中位数能更好的反应总体集中趋势的情况,对应了参数方法中的Two sample t-test,同样我们通过一个例子来讲解Wilcoxon秩和检验的过程。

我们仍然使用上面的表格,只不过我们这次研究的题目是成绩是否与性别有关。(实际上,两列数据的样本容量可以不同)可以发现,这样一来,数据中的行不再是一一对应关系。

MaleFemale
7260
6286
7083
6053
7575
5565
7189
4856

我们将两列数据合在一起,进行从小到大的排序,求出它们的秩(秩的英文为rank,也可以翻译为排名)。

Rank(Male)Rank(Female)
115.5
714
913
5.52
12.512.5
38
1015
14

需要注意的是,当出现多个样本值相同时,它们的秩应当等于它们占用的秩的位置的平均值。接下来我们来构造统计量,首先我们将每一列元素的秩进行求和:
S u m 1 = ∑ i n 1 R 1 Sum1 = \sum_i^{n_1}{R_1} Sum1=in1R1 S u m 2 = ∑ i n 2 R 2 Sum2 = \sum_i^{n_2}{R_2} Sum2=in2R2
设两个变量的样本容量分别是 n 1 n_1 n1, n 2 n_2 n2,我们构造下面的统计量:
W = S u m 1 − n 1 ∗ ( n 1 + 1 ) 2 W=Sum1 - \frac{n_1*(n_1+1)}{2} W=Sum12n1(n1+1)
同样的,利用 S u m 2 Sum2 Sum2也可以构造一个这样的统计量,但实际上检验一个即可。我们同样避开直接寻找 W W W的分布,我们选择再构造一个统计量:
Z = W − n 1 n 2 / 2 n 1 n 2 ( n 1 + n 2 + 1 ) / 12 Z=\frac{W-n_1n_2/2}{\sqrt{n_1n_2(n_1+n_2+1)/12}} Z=n1n2(n1+n2+1)/12 Wn1n2/2
同样的, Z Z Z~ N ( 0 , 1 ) N(0,1) N(0,1),接下来我们就可以在标准正态分布中查找到 P − v a l u e P-value Pvalue,从而做出是否拒绝零假设的判断。

在上面这个例子中,我们计算得到:
W = 23 W=23 W=23 Z = − 0.945 Z=-0.945 Z=0.945
查表得到对应的p值为:
p − v a l u e = 2 ∗ ( 1 − 0.8289 ) = 0.3422 > 0.05 p-value=2*(1-0.8289)=0.3422>0.05 pvalue=2(10.8289)=0.3422>0.05所以我们应当接受零假设,成绩与性别无关。

斯皮尔曼相关性检验

在参数统计中,我们学习过一个相关系数 ρ x y \rho_{xy} ρxy,它的定义如下: ρ x y = C o v ( X , Y ) S X S Y \rho_{xy}=\frac{Cov(X,Y)}{S_XS_Y} ρxy=SXSYCov(X,Y)实际上,我们把这个相关系数称为皮尔逊相关系数(Pearson Correlation),而接下来我要介绍的是另一个相关系数,称为斯皮尔曼相关系数(Spearman Correlation)。

首先举一个例子,假设我们研究的课题是学生考试分数与课堂满意度是否相关,我们采集到了这样一组数据:

ScoreHappiness
30不满意
40一般
50不满意
60一般
70满意
80满意
90满意
100满意

可以看到,这里的Happiness数据是定序变量,我们没有办法计算它的方差和它与定距变量的协方差,但我们可以对它们进行排序,参考前两种方法,我们这两列数据分别排序并求出它们的秩。

Rank(Score)Rank(Happiness)
11.5
23.5
31.5
43.5
56.5
66.5
76.5
86.5

同样的,对于相同的样本值,我们也要采用取平均值的方法求它们的秩。接下来我们对这两列秩求它们的皮尔逊相关系数,得到的就是原数据的斯皮尔曼相关系数:
ρ = C o v ( R 1 , R 2 ) S R 1 S R 2 \rho=\frac{Cov(R_1,R_2)}{S_{R_1}S_{R_2}} ρ=SR1SR2Cov(R1,R2)另外还有一个简便计算公式,设样本容量为 n n n
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho=1-\frac{6\sum{d_i^2}}{n(n^2-1)} ρ=1n(n21)6di2然后,与参数方法中的皮尔逊相关性检验类似,有:
ρ 1 − ρ 2 / n − 2 ∼ t ( n − 2 ) \frac{\rho}{\sqrt{1-\rho^2}/\sqrt{n-2}}\sim t(n-2) 1ρ2 /n2 ρt(n2)
然后在 t t t分布中计算 p − v a l u e p-value pvalue,做出判断。

Bootstrap

Bootstrap简单的来说,我们已有一个容量为 n n n的原始样本,利用随机数等方式进行放回抽样得到一个容量同样为 n n n的样本,这种样本就称为Bootstrap样本或自助样本。

我们反复地、独立地从原始样本中抽取很多很多个Bootstrap样本(通常不少于1000个),利用这些样本对总体进行统计推断,这种方法被称为非参数Bootstrap方法,又称为自助法。

我们使用成绩与性别关系的数据:

MaleFemale
7260
6286
7083
6053
7575
5565
7189
4856

我们对两列数据进行有放回抽样,得到了1000个Bootstrap样本,记作 D 1 D_1 D1- D 1000 D_{1000} D1000。我们需要分析的是两个样本之间的中位数是否有差异,因此我们将每一个Bootstrap样本的中位数差值求出来,用这1000个数据的中位数差构成一个统计分布,用直方图表示:
在这里插入图片描述
然后我们再根据已知的中位数差值,在这个统计分布中计算p值、置信区间等,做出统计推断。

Bootstrap是一种非常重要的方法,常常应用于各种玄学建模 。需要注意的是Bootstrap方法也有参数版本的方法,在这里并不讨论。

Bootstrap实现的Python代码如下:

# -*- coding: UTF-8 -*-
import numpy as np
import matplotlib.pyplot as plt
def bootstrap(data):
    temp = []
    while len(temp) != len(data):
        r = np.random.randint(0,len(data))
        temp.append(data[r])
    temp = np.array(temp)
    return temp


if __name__ == "__main__":
    male = np.array([72,62,70,60,75,55,71,48])
    female = np.array([60,86,83,53,75,65,89,56])
    v = []
    for i in range(2000):
        mbootstrap = bootstrap(male)
        fbootstrap = bootstrap(female)
        v.append(np.median(mbootstrap) - np.median(fbootstrap))
    v = np.array(v)
    plt.hist(v,bins=50)
    plt.show()

Permutation

Permutation,翻译为中文就是排列、置换的意思。在参数方法中进行假设检验,我们一般是假设或者已知总体的分布,然后构造统计量,得到这个统计量在零假设为真时的抽样分布,然后在抽样分布中计算p值,做出推断。而Permutation使得我们可以得到对任意统计量在零假设为真时的抽样分布,从而进行统计推断。接下来我们举例说明Permutation的过程。

我们仍然使用成绩与性别的关系数据:

MaleFemale
7260
6286
7083
6053
7575
5565
7189
4856

H 0 : 男 女 成 绩 中 位 数 没 有 差 异 H_0:男女成绩中位数没有差异 H0: H 1 : 男 女 成 绩 中 位 数 有 差 异 H_1:男女成绩中位数有差异 H1:
Permutation与Bootstrap类似,我们也需要将以下的步骤重复1000次以上:

  1. 把所有数字随机分配给Male( n 1 = 8 n_1=8 n1=8)和Female( n 2 = 8 n_2=8 n2=8)
  2. 计算Male和Female的中位数
  3. 计算并保存median(M)-median(F)

重复1000次以上之后,我们就可以得到两组数据中位数差的近似分布,用直方图表示:
在这里插入图片描述
这样我们就获得了中位数差统计量的统计分布,然后我们根据这个分布和实际的中位数差,我们就可以计算出p值,从而进行统计推断。
Permutation的Python代码如下:

# -*- coding: UTF-8 -*-
import numpy as np
import matplotlib.pyplot as plt


def permutation(data):
    perm = []
    num = set([])
    while len(perm) != len(data):
        r = np.random.randint(0, 16)
        if r not in num:
            perm.append(data[r])
            num.add(r)
    perm = np.array(perm)
    return perm


if __name__ == "__main__":
    data = np.array([72, 62, 70, 60, 75, 55, 71, 48, 60, 86, 83, 53, 75, 65, 89, 56])
    diff = []
    for i in range(3000):
        temp = permutation(data)
        df = np.median(temp[:8]) - np.median(temp[8:])
        diff.append(df)
    diff = np.array(diff)
    plt.hist(diff, bins=50)
    plt.show()

小结

在这一篇博文中,我主要介绍以下几种非参数统计方法:

  • Wilcoxon符号秩检验
  • Wilcoxon秩和检验
  • Spearman相关性检验
  • Bootstrap
  • Permutation

但无论是参数方法还是非参数方法都属于频率论的范畴,它们都存在着一个致命的缺陷:它们的检验过程是在假定零假设成立的情况下进行的,为了解决这个问题,需要把目光投向另一个统计学领域——贝叶斯统计。

  • 21
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值