统计检验/jupyter循环进度条展示

分析建模,日常问题整理(二十四)


2019.4.10~2019.4.28


    1. 相关检验
# 相关系数
pd.DataFrame(pd.DataFrame([[1,1,0,0,0],[0,1,1,0,3]]).T.rename(columns = {0:'A',1:'B'})).corr()
    1. 正态检验
import scipy
import scipy.stats as scs
import scipy.stats as scs
def normality_tests(arr):
    """
    Tests for normality distribution of given data set
    :param arr: ndarray
    object to generate statistics on
    :return:
    """
    print("Skew of data set  %14.3f" % scs.skew(arr))
    print("Skew test p-value %14.3f" % scs.skewtest(arr)[1])
    print("Kurt of data set  %14.3f" % scs.kurtosis(arr))
    print("Kurt test p-value %14.3f" % scs.kurtosistest(arr)[1])
    print("Norm test p-value %14.3f" % scs.normaltest(arr)[1])

normality_tests([-1,-0.5,-0.4,-0.3,-0.2,0,0.2,0.3,0.4,0.5,1])
# Skew of data set           0.001
# Skew test p-value          0.292
# Kurt of data set           0.001
# Kurt test p-value          0.625
# Norm test p-value          0.509

KS检验

scipy.stats.kstest (rvs, cdf, args = ( ), N = 20, alternative ='two-sided', mode ='approx')

Anderson 检验,该方法是由 scipy.stats.kstest 改进而来的,可以做正态分布、指数分布、Logistic 分布、Gumbel 分布等多种分布检验。默认参数为 norm,即正态性检验。

scipy.stats.anderson (x, dist ='norm' )

Shapiro-Wilk test检验

scipy.stats.shapiro(x)
    1. 卡方检验

目的:判别两组数据是否有差别?比较理论频数和实际频数的吻合程度或者拟合优度问题?比较实际数据和理论分布之间的差异有多大。
原假设
H0:两组数据无差异(一般选择有绝对优势出现的事件,如果发生的小概率事件就不得不拒绝掉原假设)
H1:两组数据不是无差异
卡方统计量=,在0假设成立的情况下服从自由度为k-1的卡方分布。
表示理论分布出现的频数或者值,表示实际值。

from  scipy.stats import chi2_contingency
kf = chi2_contingency(np.array([[1,2,1,1,2,1],[1,2,2,1,1,2]]))
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)

表1:第X1个变量出现的实际值

Y V1 V2 V3 总计
0 4 7 6 17
1 1 3 6 10
总计 5 10 12 27

表2:第X1个变量出现的理论值

Y V1 V2 V3 总计
0 5*17/27=3.1 6.3 7.6 17
1 5*10/27=1.9 3.7 4.4 10
总计 5 10 12 27

卡方值 =

两个表的数字差距越大,两个表的独立性越强约偏离均匀的分布,01在各组的分布越不均匀,粗分类结果越好(对y的区分效果越好)。
卡方检验和IV值都可以用来评价变量的作用。

from  scipy.stats import chi2_contingency
kf = chi2_contingency(np.array([[4,7,6],[1,3,6]]))
# 这里需要算0两类的变量分布
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)

output:
chisq-statistic=1.6994, p-value=0.4275, df=2 expected_frep=[[ 3.14814815  6.2962963   7.55555556]
 [ 1.85185185  3.7037037   4.44444444]]
    1. T检验

T检验,亦称student t检验(Student's t test),主要用于样本含量较小(例如n < 30),总体标准差未知的总体。T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。
单总体检验,t分布

单总体t.jpg

双总体检验,t分布
双总体t.jpg

H0:
单总体,样本均值是否等于总体均值20,结论:P<0.05,等于总体均值

from scipy import stats
import pandas as pd
dataSer=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
pop_mean=20
t,p_twoTail=stats.ttest_1samp(dataSer,pop_mean)
p_oneTail = p_twoTail/2
print("t=",t,"p_twoTail=",p_twoTail, "p_oneTail = ", p_oneTail)
output:t= -3.00164952589 p_twoTail= 0.0149164142489 p_oneTail =  0.00745820712445

H0:两样本均值无差异

rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)  
rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
# 检验两样本均值是否有显著差异
# 首先,检验方差是否相等
stats.levene(rvs1, rvs2)

# 如果p>0.05方差相等
stats.ttest_ind(rvs1,rvs2)

# 如果p<0.05方差不相等
stats.ttest_ind(rvs1,rvs2, equal_var = False)
    1. 卡方检验和T检验区别

T检验主要检验均值,卡方检验主要检验整体差异?

    1. jupyter进度条展示
from tqdm import tqdm_notebook,tnrange
for i in tqdm_notebook(range(0, new_loc.shape[0], 10),desc = 'lst loop'):
      print(i)

你可能感兴趣的:(统计检验/jupyter循环进度条展示)