
给定一个变量X改变,另一个变量Y均值改变说明两个变量有关,则这两个变量不独立。X可预测Y,y=f(x)。
分析过程:建立两个变量的描述性统计,观察一个变量改变另一个变量均值是否改变(是否独立)。若不独立,则说名一个变量对另一个变量有预测作用。
统计学中检验两个变量是否有关,都是通过检验同组两个变量均值的差值是否等于0.如果与0无差异,说明两个变量无关,如果与0有差异,说明两个变量有关。
#样本对总体有代表性,用于对总体的某些指标推断使用
#总体参数(均值、方差、标准差)确定,样本参数是随机变量
估计方法:
import pandas as pd import os
os.chdir(r'D:python商业实践《Python数据科学技术详解与商业实践》PDF+源代码+八大案例《Python数据科学技术详解与商业实践》PDF+源代码+八大案例源代码Python_book6Inference')
house_price_gr=pd.read_csv('house_price_gr.csv',encoding='gbk')
house_price_gr.describe(include='all')
(1)
get_ipython().magic('matplotlib inline')
import seaborn as sns from scipy import stats
sns.distplot(house_price_gr.rate, kde=True, fit=stats.norm)
(2)
import statsmodels.api as sm from matplotlib import pyplot as plt
fig = sm.qqplot(house_price_gr.rate, fit=True, line='45') fig.show()
(3)
house_price_gr.plot(kind='box')
se = house_price_gr.rate.std() / len(house_price_gr) ** 0.5 #根号下n LB = house_price_gr.rate.mean() - 1.98 * se #下界 两倍(1.98)标准误 UB = house_price_gr.rate.mean() + 1.98 * se (LB, UB) ############或者使用DescrStatsW得到置信区间 d1 = sm.stats.DescrStatsW(house_price_gr.rate) d1.tconfint_mean(0.05)
注:95%置信区间的面积对应1.98倍的标准误(2是约等于)
=>房价同比增长率小于等于10%的概率不超过2.5%
基本原理:检验样本均值是否等于某个值。如果总体均值在置信区间内,则接受原假设;反之拒绝原假设。
假设检验步骤:
(1)假设 H0=0.1,H1≠0.1
(2)设置显著度 显著度设置与样本量有关 <100 取10%;100~500 取5%;500~1000取1%
(3)收集样本,得到均值
(4)假设均值分布
DescrStatsW ->statsmodels.api包内方法
import statsmodels.api as sm
d1 = sm.stats.DescrStatsW(house_price_gr.rate) #检验样本均值与假设的均值的t值
print('t-statistic=%6.4f, p-value=%6.4f, df=%s' %d1.ttest_mean(0.1)) #假设均值μ=0.1,返回t值、p值、自由度
3 两样本T检验
(二分类变量、连续变量)
原理:分类变量分别对应的连续变量是否相等。例:开卡人的平均收入与没开卡人平均收入相等——检验平均收入对开卡是否有影响。
(1)原假设H0:μ1=μ2 、悖假设H1:μ1≠μ2
(2)显著度α:5%
(3)采集样本
(4)计算统计量
creditcard= pd.read_csv(r'creditcard_exp.csv',skipinitialspace=True) #skipinitialspace=True在空格处填充NaN
creditcard['Income'].groupby(creditcard['Acc']).describe()
Suc0 = creditcard[creditcard['Acc'] == 0]['Income']
Suc1 = creditcard[creditcard['Acc'] == 1]['Income'] #把开卡和没开卡的人分别拿出来,得到两列数
leveneTestRes = stats.levene(Suc0, Suc1, center='median') #center='median'集中趋势
print('w-value=%6.4f, p-value=%6.4f' %leveneTestRes) #p<α,显著
stats.stats.ttest_ind(Suc0, Suc1, equal_var=False) #equal_var=False代表显著
p值远小于显著度α
**在实际运用中,方差齐性检验与否并不影响最后结论,省略,只需进行t检验即可
stats.stats.ttest_ind(Suc0, Suc1) #p值仍远小于α3 方差分析
(多分类变量、连续变量)
总变异(离差平方和):
组内变异SSe:每个样本偏离各自组均值情况,代表模型所不能解释的变异,自由度为n-k+1
组间变异SSm:每个组的均值偏离总体均值情况,代表模型所能解释的变异,自由度为k-1
F(组间变异,组内变异)=MSm/MSe
import statsmodels.api as sm from statsmodels.formula.api import ols #调用osl线性回归
教育等级(分为四个等级)对月均支出的影响:
anova_lm方差分析
sm.stats.anova_lm(ols('avg_exp ~ C(edu_class)',data=creditcard).fit()) #avg_exp受edu_class的影响
#python默认连续变量 C(edu_class)加大写C说明分类变量
最后得到p值很小,说明教育等级对支出有明显作用
多因素方差分析
sm.stats.anova_lm(ols('avg_exp ~ C(edu_class)+C(gender)',data=creditcard).fit()) #不考虑交叉
sm.stats.anova_lm(ols('avg_exp ~ C(edu_class)+C(gender)+C(edu_class)*C(gender)',data=creditcard).fit()) #考虑交叉
4 相关分析
(连续变量、连续变量)
判断两个变量是否有关:一个变量取值发生改变,另一个变量均值是否改变
三种相关系数:
Pearson相关系数:参数方法、连续变量之间的相关
Spearman相关系数(秩相关系数):非参方法
Kendall相关系数:非参方法,叙述变量之间的相关
creditcard.plot(x='Income', y='avg_exp', kind='scatter')
#一个变量与另一个变量呈发散关系,说明直方图趋势为右偏,对Y取对数
creditcard[['avg_exp_ln', 'Income']].corr(method='pearson') #0.6说明中度相关,两变量有关系
注:|r|越大表明两个变量之间的相关性越强,一般认为:
|r|≥0.8 时,两个变量高度相关
0.5≤|r|≤0.8时,两个变量中度相关
0.3≤|r|≤0.5时,两个变量低度相关
|r|<0.3 时,认为两个变量几乎不存在相关性