- 大数定律
- 伯努利大数定律
设$μ_n$是n次独立试验中事件A发生的次数,且事件A在每次试验中发生的概率为p,则对任意正数$\epsilon$,有
$$ lim_{n\rightarrow \infty} P(|\frac{\mu_n}{n} - p| < \epsilon) = 1 $$
- 中心极限定理
独立同分布的随机变量之和, 当$n$足够大时, 近似地服从正态分布
- 泊松分布
泊松分布用于描述单位时间内随机事件发生的次数。
泊松分布的期望是λ,指单位时间(或单位面积)内随机事件的平均发生次数。 方差也是λ。
其概率密度公式为:
一.分布一致性检验:
K-S检验(Kolmogorov-Smirnov test)
K-S检验是比较一个频率分布f(x)与理论分布g(x)或者两个观测值分布的检验方法。
假设: 原假设H0: 两个数据分布一致或者数据符合理论分布。D=max| f(x)- g(x)|,当实际观测值D>D(n,α)则拒绝H0,否则则接受H0假设。
非参数检验: K-S检验与t-检验之类的其他方法不同是K-S检验不需要知道数据的分布情况,可以算是一种非参数检验方法。
灵敏度: 当然这样方便的代价就是当检验的数据分布符合特定的分布时,K-S检验的灵敏度没有相应的检验来的高。
适用场景: 在样本量比较小的时候,K-S检验最为非参数检验在分析两组数据之间是否不同时相当常用。
source:
Python代码
from scipy import stats
stats.kstest(rvs, cdf, args=())
#其中rvs可以是数组、生成数组的函数或者scipy.stats里面理论分布的名字
#cdf可以与rvs一致。若rvs和cdf同是数组,则是比较两数组的分布是否一致;一个是数组,另一个是理论分布的名字,则是看样本是否否和理论分布
#args是一个元组,当rvs或者cds是理论分布时,这个参数用来存储理论分布的参数,如正态分布的mean和std。
#Input: stats.kstest(test, 'norm',args=(test.mean(),test.std())
#Output: KstestResult(statistic=0.005777479839093713, pvalue=0.8923049615924274)
source:
scipy.stats中还有一个更简洁的函数 ks_2samp , 用于两个样本集的直接比较(不需要两组数据有相同的shape)
这里测试了 2 个样本是否来自相同的分布。请注意,与单样本 K-S 测试一样,分布假设是连续的。
该检验使用 two-sided asymptotic Kolmogorov-Smirnov distribution.
如果 K-S 统计量很小或 p 值较高,则我们不能拒绝两个样本分布相同的假设
scipy.stats.ks_2samp(data1, data2) # 返回统计量, p值
- JS散度(需要两组数据同shape)
JS散度基于KL散度,同样是二者越相似,JS散度越小。
JS散度的取值范围在0-1之间,完全相同时为0
JS散度是对称的
import numpy as np
import scipy.stats
p=np.asarray([0.65,0.25,0.07,0.03])
q=np.array([0.6,0.25,0.1,0.05])
q2=np.array([0.1,0.2,0.3,0.4])
def JS_divergence(p,q):
M=(p+q)/2
return 0.5*scipy.stats.entropy(p, M)+0.5*scipy.stats.entropy(q, M)
print(JS_divergence(p,q)) # 0.003093977084273652
print(JS_divergence(p,q2)) # 0.24719159952098618
print(JS_divergence(p,p)) # 0.0
二.时间序列平稳性检验:
ADF检验
在使用很多时间序列模型的时候,如 ARMA、ARIMA,都会要求时间序列是平稳的,所以一般在研究一段时间序列的时候,第一步都需要进行平稳性检验,除了用肉眼检测的方法,另外比较常用的严格的统计检验方法就是ADF检验,也叫做单位根检验。
ADF检验就是判断序列是否存在单位根:如果序列平稳,就不存在单位根;否则,就会存在单位根。
ADF检验可以通过python中的 statsmodels 模块,这个模块提供了很多统计模型。
from statsmodels.tsa.stattools import adfuller
三.相关性检验
在scipy这一个统计包中,采用scipy.stats.spearmanr()等函数可以直接获得相关系数以及双边检验的P值。
correlation, p-value = scipy.stats.pearsonr(x, y)
correlation, p-value = scipy.stats.spearmanr(x, y)
correlation, p-value = scipy.stats.kendalltau(x, y)