统计学常识

二项分布

二项分布是重复n次的伯努利试验。
概率分布:

均值:

方差:

泊松分布

当二项分布的 n 很大,但是 p 非常小的时候其分布近似泊松分布。
概率分布:

均值、方差:

均匀分布

概率分布:

均值:

方差:

正态分布

当二项分布的 n 很大,p 又不是很小的时候其分布近似正态分布。
概率分布:

均值:

方差:

T检验

T检验是用于小样本(样本容量小于30)的两个平均值差异程度的检验方法。它是用T分布理论来推断差异发生的概率,从而判定两个平均数的差异是否显著。T检验要求数据为正态分布。 方法包括:

独立样本之间的 t 检验

适用于独立样本之间的差异检测,如男生和女生身高差异,人类和植物生化水平差异。

1
2
3
4
5
6
7
8
#python
from scipy import stats
stats.levene(data1,data2) #检验方差齐性
stats.ttest_ind(data1,data2) #方差齐
stats.ttest_ind(data1,data2,equal_var=False) #方差不齐
#R
t.test(data1,data2,equal_var=TRUE) #方差齐
t.test(data1,data2,equal_var=False) #方差不齐

非独立(配对)样本之间的 t 检验

适用于2组样本不同时期或者不同处理后的差异检验。

1
2
3
4
5
#python
from scipy import stats
stats.ttest_rel(data1,data2)
#R
t.test(data1,data2,paired=TRUE)

单样本 t 检验

适用于检查抽样样本和全体样本之间的差异检测。

1
2
3
4
5
#python
from scipy import stats
stats.ttest_1samp(data,1) #与总体均值 1 比较
#R
t.test(data,mu=1) #与总体均值 1 比较

F检验

F检验和方差分析实际上是相同的,方差分析利用了F检验的原理,同时是检验了2组数据的方差的齐性(差异)。

1
2
3
4
5
6
7
8
9
10
11
12
13
#python
from scipy import stats
var_1 = np.var(data1)
var_2 = np.var(data2)
if var_1 > var_2:
F = var_1 / var_2
else:
F = var_2 / var_1
df1 = len(data1) - 1
df2 = len(data2) - 1
p_value = stats.f.sf(F,df1,df2)
#R
var.test(data1,data2)

U检验

U 检验全称 Mann–Whitney又称 Wilcoxon 秩和检验。U 检验是一种非参数检验,与t检验不同,它不需要假设正态分布。它几乎与正态分布的t检验一样有效,且适用用样本数多于30以上的独立样本差异检验。

1
2
3
4
5
6
#python
from scipy import stats
scipy.stats.mannwhitneyu(data1, data1)
#R
wilcox.test(data1,data2,exact = F,paired=FALSE)
wilcox.test(data1,data2,exact = F,paired=TRUE) #配对之后成为wilcoxon秩和检验

卡方检验

卡方检验,又称χ2检验,是一种非参数检验,主要是比较两个以及两个以上样本率以及两个分类变量之间是否具有显著的相关性,其根本思想是统计样本的实际观测值与理论推断值之间的偏离程度。
公式:

χ2,为统计量,用于衡量实际值与理论值的差异程度。
A,为实际值
T,为理论值
自由度,df = n-1
最常用的方法为四格表法:

吃药 不吃药 总计
治愈 19 24 43
无治愈 34 10 44
总计 53 34 87

0.609 = 53/87
0.391 = 34/87
理论值四格表:

吃药 不吃药 总计
治愈 19*0.609=26.2 24*0.391=16.8 43
无治愈 34*0.609=26.8 10*0.391=17.2 44

χ2=(19-26.2)^2/26.2+(34-26.8)^2/26.8+(24-16.8)^2/16.8+(44-17.2)^2/17.2 = 10.01
查表得知,p值0.05对应的χ2值为3.84,所以拒绝原假设,得出结论吃药与治愈之间无相关性。

方差分析

同F检验

Shapiro-Wilk检验

Shapiro-Wilk检验用来检查数据的正态性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#python Shapiro-Wilk
from scipy import stats
stat, p = scipy.stats.shapiro(data)
print('Statistics=%.3f, p=%.3f' % (stat, p))
alpha = 0.05
if p > alpha:
print('data looks normal')
else:
print('data does not look normal')

#python Anderson-Darling
result = scipy.stats.anderson(data)
print('Statistic: %.3f' % result.statistic)
if result.statistic < result.critical_values:
print('data looks normal')
else:
print('data does not look normal')

#R
shapiro.test(data)

p值

P值是用来判定假设检验结果的一个参数,就是当接受零假设时所得到的样本观察结果或更极端结果出现的概率。p值越小,越否定零假设。

p值不是用来测度你多么正确,或者这个差异有多重要,而是对“意外”的测度。

置信区间

置信区间:估计总体统计量的方法,置信区间考虑了问题的不确定性,它表达的是一个误差范围,是对总体统计量给出一个区间估计,即统计学中的置信区间。

置信区间的求解步骤:

1、根据要解决的实际问题选取要为之构建置信区间的统计量。
2、求出所选统计量的抽样分布。

比如,要求出总体均值的抽样分布,我们需要知道均值的期望和方差,对于置信区间的简单求解,我们只需知道样本均值和标准误差。,所以第二步可以简化为求解样本均值和标准误差。
这里对标准差和标准误差进行一个解释:

标准差(standard deviation):是计算数据偏离其均值的波动程度;
标准误差(standard error):其实质也是标准差,但是又有差别,它是用来衡量我们用样本统计量去估计相应总体参数时的一种估计精度。例如:如果总体平均值是160,抽样误差是5,就是说用抽得的样本平均数去推断总体平均数时,平均差错可能在5左右。

3、决定置信水平

常用的置信水平为95%
4、求出置信区间的上下限

我们可以利用简化的方法,知道总体统计量服从什么分布,然后知道相应条件,代入公式即可求出:

对上面置信区间的翻译就是:置信区间上限=样本平均值-c乘以标准误差,置信区间下限=样本平均值-C乘以标准误差。
C的取值:

置信水平 C值
90% 1.64
95% 1.96
99% 2.58

可由 R 函数qnorm(CI) 计算C值。

相关系数

pearson 相关系数

相关系数是衡量2个变量之间相关性的统计量,为1则正相关,为-1则负相关,为0则不相关。计算上一般常用皮尔森相关系数表示。
公式为:

其中 cor(x,y)为 x 和 y 的协方差,分子为 x 和 y 的标准差之积。
协方差计算举例:

1
2
3
4
5
x<-c(1,2,4,5,8)
y<-c(5,20,40,80,100)
mean(x) = 4
mean(y) = 49
cov(x,y)=((1-4)*(5-49)+(2-4)*(20-49)+(4-4)*(40-59)+(5-4)*(80-49)+(8-4)*(100-49))/sd(x)/sd(y)/(5-1)

1
2
3
4
5
#python
from scipy import stats
stats.pearsonr(x,y)
#R
cor.test(x,y)

当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

(1)、两个变量之间是线性关系,都是连续数据。

(2)、两个变量的总体是正态分布,或接近正态的单峰分布。

(3)、两个变量的观测值是成对的,每对观测值之间相互独立。

spearman 秩相关系数

当两变量不符合双变量正态分布的假设时,需用 spearman 秩相关来描述变量间的相互变化关系。

公式中的 d 是数据排秩之后的差值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#python
import scipy.stats as stats

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [1, 6, 8, 7, 10, 9, 3, 5, 2, 4]
print(stats.stats.spearmanr(x,y))

#手动算
import pandas as pd
x = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = pd.Series([1, 6, 8, 7, 10, 9, 3, 5, 2, 4])
x1 = x.rank()
y1 = y.rank()
d2 = sum((y1-x1)*(y1-x1))
spearman = 1-6d2/(10*(100-1))

#R
cor(x,y,method = 'spearman')

#手动算
x1=rank(x)
y1=rank(y)
d2 = sum((y1-x1)*(y1-x1))
spearman = 1-6d2/(10*(100-1))

统计功效

统计功效=1-β,此处的β是指第二类错误概率,即假阴性错误概率。影响统计功效的因素有很多,主要的有3个:效应值、样本量和α水平。

  1. 显然,从整体中提取的样本越多,样本就越能代表整体,计算的效应量也越精确。但效应量是样本固有特性,样本量则是可以由自己掌握的,可以通过扩大样本量来提高实验的统计功效。
  2. α水平也称显着性水平,即第一类错误概率,约定俗成地把它控制在0.05。

我们经常需要知道需要多少样本才能达到80%的统计功效:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# R
library(pwr)
pwr.t.test(d=0.8,sig.level=0.05,power=0.8,type="two.sample",alternative="two.sided")
# d:Effect size (Cohen's d)
# sig.level: Significance level (Type I error probability)
# power: Power of test (1 minus Type II error probability)
Two-sample t test power calculation

n = 58.39412
d = 0.8
sig.level = 0.05
power = 0.8
alternative = two.sided

NOTE: n is number in *each* group
pwr.t.test(d=0.8,sig.level=0.05,n=50,type="two.sample",alternative="two.sided") #已知样本数求统计功效
Two-sample t test power calculation

n = 50
d = 0.8
sig.level = 0.05
power = 0.9772791
alternative = two.sided

NOTE: n is number in *each* group

# python
from statsmodels.stats.power import TTestIndPower
effect = 0.8
alpha = 0.05
power = 0.8
analysis = TTestIndPower()
result = analysis.solve_power(effect, power=power, nobs1=None, ratio=1.0, alpha=alpha)
print('Sample Size: %.2f' % result)

>Sample Size: 25.52
# ratio: ratio of the number of observations in sample 2 relative to sample 1
result = analysis.solve_power(effect, nobs1=50, ratio=1.0, alpha=alpha)
print('power: %.4f' % result)

>power: 0.9772

效应值

两组间差异的效应值由以下公式定义:

μ1:第一组的平均值
μ2:第二组的平均值
σ:总体标准差
在比较平均数的情况下,效应值经常指的就是实验结束后,实验组与控制组之间“标准化后的平均差异程度”,依照惯例,一些常用的可解读为以下情况:
较小 0.2
中等 0.5
较大 0.8

箱线图

箱线图由五个数值点组成:下边界(Q1-1.5IQR),下四分位数(Q1),中位数(median),上四分位数(Q3),上边界(Q3+1.5IQR)

箱体包含了大部分的正常数据,而在箱体上边界和下边界之外的,就是异常数据。

将数据由小到大排序,处于中间的为中位数,即50%分位数。在75%位置的即为75%分位数或Q3,在25%位置的即为25%分位数或Q1

LowerLimit=Q1-1.5IQR=25%分位数-(75%分位数-25%分位数)*1.5

UpperLimit=Q3+1.5IQR=75%分位数+(75%分位数-25%分位数)*1.5

有时会发现上下胡须不一样长,是因为如果最大值或者最小值计算得出的上下边界值内时,边界就变成了最大值或者最小值,即没有异常值。