为研究东、中、西部各省市规模以上的企业发展状况,我们收集了各城市企业的主要经济指标,包括:总资产贡献率、资产负债率、流动资产周转次数、工业成本费用利润率、产品销售率。我们用变量“类别”定义了各类城市,其中1为东部城市;2为中部城市;3为西部城市。数据文件为homework2.xlsx。假设显著性水平为
α
=
0.01
\alpha=0.01
α=0.01,问:
1. 对三个类别的城市进行均值向量间的两两比较,查看结果
加载必要的包
import numpy as np
import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
from IPython.display import display
data=pd.read_excel('./homework2.xls')
data.head()
group_1=data[data['类别']==1].drop(['类别','地区'],axis=1) # 去除地区、类别标签列,只保留数值列
group_2=data[data['类别']==2].drop(['类别','地区'],axis=1) # 去除地区、类别标签列,只保留数值列
group_3=data[data['类别']==3].drop(['类别','地区'],axis=1) # 去除地区、类别标签列,只保留数值列
group_1.head()
def multi_unparied_data(group1:pd.DataFrame,group2:pd.DataFrame,confidence=0.05):
# 计算检验统计量
n1=len(group1)
n2=len(group2)
p=np.shape(group1)[1] # 变量维度
mean1=np.mean(group1).values.T
mean2=np.mean(group2).values.T
S1=np.cov(group1.T)
S2=np.cov(group2.T)
Sp=((n1-1)*S1+(n2-1)*S2)/(n1+n2-2)
T2=n1*n2*(mean1-mean2).T@np.linalg.inv(Sp)@(mean1-mean2)/(n1+n2)
Test_statistics=(n1+n2-p-1)*T2/(p*(n1+n2-2))
# 计算p值
from scipy.stats import f
pvalue=f.sf(Test_statistics,p,n1+n2-p-1)
# 比较p值与显著性水平
if pvalue<confidence:
print('在显著性水平{0:}下,两组样本所在总体的均值向量不相等。(p={1:.4f})'.format(confidence,pvalue))
else:
print('在显著性水平{0:}下,两组样本所在总体的均值向量相等。(p={1:.4f})'.format(confidence,pvalue))
return pvalue
multi_unparied_data(group_1,group_2)
在显著性水平0.05下,两组样本所在总体的均值向量相等。(p=0.2793)
multi_unparied_data(group_1,group_3)
在显著性水平0.05下,两组样本所在总体的均值向量不相等。(p=0.0097)
multi_unparied_data(group_2,group_3)
在显著性水平0.05下,两组样本所在总体的均值向量不相等。(p=0.0470)
2. 对三个类别的城市同时进行均值向量间的比较,查看结果
from statsmodels.multivariate.manova import MANOVA
model=MANOVA.from_formula(' 总资产贡献率 + 资产负债率 + 流动资产周转次数 + 工业成本费用利润率 + 产品销售率 ~ 类别', data=data).mv_test()
# 在''中填入公式,其中~左侧填入自变量名称,~右侧填入因素名称
print(model.results['类别']['stat'])
3. 承接问题2,你认为哪些变量导致了三个类别城市均值向量的差异?说出你的理由。
print(stats.f_oneway(group_1.总资产贡献率.values,group_2.总资产贡献率.values,group_3.总资产贡献率.values))
print(stats.f_oneway(group_1.资产负债率.values,group_2.资产负债率.values,group_3.资产负债率.values))
print(stats.f_oneway(group_1.流动资产周转次数.values,group_2.流动资产周转次数.values,group_3.流动资产周转次数.values))
print(stats.f_oneway(group_1.工业成本费用利润率.values,group_2.工业成本费用利润率.values,group_3.工业成本费用利润率.values))
print(stats.f_oneway(group_1.产品销售率.values,group_2.产品销售率.values,group_3.产品销售率.values))
model=MANOVA.from_formula(' 总资产贡献率 + 资产负债率 + 工业成本费用利润率 + 产品销售率 ~ 类别', data=data).mv_test()
print(model.results['类别']['stat'])
model=MANOVA.from_formula(' 总资产贡献率 + 资产负债率 + 工业成本费用利润率 ~ 类别', data=data).mv_test()
print(model.results['类别']['stat'])
model=MANOVA.from_formula('资产负债率 + 工业成本费用利润率 ~ 类别', data=data).mv_test()
print(model.results['类别']['stat'])
流动资产周转次数、产品销售率导致了三个类别城市均值向量的差异。
感谢 Datawhale 对开源学习的贡献!
感谢 Git-Model 创作团队!
参考文献:
Modeling-Universe/Data-Story/Task7_下_假设检验2_多元数值向量检验/假设检验2-多元数值向量的检验.ipynb