统计方法

t检验

原理和用途
计算A=(已知样本平均值与总体样本平均值的差值) 除以(总体样本标准差除以根号下[n if n>30 else n-1]得到的标准偏差)的比值,查t值表,就是看平均值的差异是否属于标准偏差允许的范围内,如果差异过大,两者就没有相关性,t检验限定条件是服从正态分布的连续变量,t检验可以用来判断一个东西是不是属于另一种事物

用法

import numpy as np
from scipy import stats

mean1 = 30.97
mean2 = 21.79

std1 = 26.7
std2 = 12.1

nobs1 = 10
nobs2 = 10

modified_std1 = np.sqrt(np.float32(nobs1)/np.float32(nobs1-1)) * std1
modified_std2 = np.sqrt(np.float32(nobs2)/np.float32(nobs2-1)) * std2

(statistic, pvalue) = stats.ttest_ind_from_stats(mean1=mean1,
                                                 std1=modified_std1,
                                                 nobs1=nobs1,
                                                 mean2=mean2,
                                                 std2=modified_std2,
                                                 nobs2=nobs2)
print("t statistic is: ", statistic)
print("pvalue is: ", pvalue)

f检验

原理和用途
方差相除,配合自由度,再查F表,判断两样本的偏度是否一致,网上查资料就没看到说人话讲F检验应用的文章

用法

from scipy.stats import f
import numpy as np
a=[2,1,3]
b=[6,8,10]
F = np.var(a) / np.var(b)
df1 = len(a) - 1
df2 = len(b) - 1
p_value = 1 - 2 * abs(0.5 - f.cdf(F, df1, df2))
print(p_value)

卡方检验

原理和用途
卡方检验就是先假设两变量独立无关则小样本的概率同大样本,根据假设和总体数据算出各个类别的理论值,再计算实际值与理论值的差异程度,再根据自由度V = (行数 - 1) * (列数 - 1)查卡方表,卡方值越大说明实际和理论的差异越大,P值对应的越小

用法

from scipy import stats
obs = [102, 102, 96, 105, 95, 100]
exp = [100, 100, 100, 100, 100, 100]
print(stats.chisquare(obs, f_exp = exp))

皮尔森相关系数

原理和用途
皮尔森相关系数就是先将两组向量的平均值归一化到0,再计算处理后的向量夹角

用法

import scipy
from scipy.stats import pearsonr

x = scipy.array([1, 2, 3, 4, 5])
y = scipy.array([2, 4, 6, 8, 9])

r_row, p_value = pearsonr(x, y)
print(r_row)
print(p_value)

信息熵

原理和用途
熵是用来计算事件的信息量,1.概率是0-1的闭区间,事物信息量是0-正无穷,2.越小概率事件的信息量远大于大概率事件

用法

from scipy import stats
import pandas as pd
# 熵

import numpy as np
ij=np.array([0.1,0.9])
shannon_entropy_func = lambda pij: -sum(pij*np.log(pij))
shannon_entropy = shannon_entropy_func(ij[np.nonzero(ij)])
print(shannon_entropy)

# KL散度
def Entropy(labels, base=2):
    probs = pd.Series(labels).value_counts() / len(labels)
    print(probs)
    en = stats.entropy(probs, base=base)
    return en
print(Entropy([1, 1, 0, 1, 1]))

参考

如何理解t检验、t分布、t值?
统计学——卡方检验和卡方分布
scipy.stats.entropy
如何理解K-L散度(相对熵)

posted @ 2020-05-20 13:05  Cshare  阅读(353)  评论(0)    收藏  举报