为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。
(以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。)
练习题
一家管理咨询公司为不同的客户提供人力资源管理讲座。每次讲座的内容基本上一样,听课者有时是高层管理者,有时是中层管理者,有时是基层管理者。该咨询公司认为,不同层级的管理者对讲座的满意度是不同的。听完讲座后,随机抽取不同层级的管理者,他们的满意度评分如下(评分标准是1~10,10代表非常满意):
(1)检验管理者的层级不同是否会导致评分有显著差异(α=0.05),并分析效应量。
(2)采用HSD方法比较管理者的评分之间的差异。
(3)检验满意度评分是否满足正态性和方差齐性。
分析与结果
(1)这道题考查的是单因子方差分析,该因子为管理者层级,分为了三个层级,即高层、中层和基层。
首先要检验管理者的层级不同是否会导致评分有显著差异(α=0.05),我们需要进行方差分析并将计算得到的p值与0.05作比较。如果p值小于0.05,我们则可以做出判断,管理者的层级不同会导致评分有显著差异。注意需要先对数据进行融合。
方差分析的结果显示,如下图所示,p值=0.000633,远小于0.05,因此可以断定,管理者的层级不同会导致评分有显著差异。
效应量可根据R-sqaured得到。如下图所示,效应量为0.625,即在评分取值的总误差中被管理者层级解释的比例为62.5%
Python代码
import pandas as pd
exercise9_2 = pd.read_csv('exercise9_2.csv')
# exercise9_2.head()
exercise9_2_1 = pd.melt(exercise9_2, value_vars = ['高层管理者', '中层管理者', '基层管理者'], var_name = '层级', value_name = '评分') # 融合数据
# exercise9_2_1.head() # 查看融合后的数据
# 进行单因子方差分析
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model1 = ols(formula = '评分 ~ 层级', data = exercise9_2_1).fit() # 拟合方差分析模型
anova_lm(model1, typ =1)
Python代码
print(model1.summary())
(2)采用HSD方法进行多重比较,找出哪两个层级的评分之间有显著差异。如下图所示,中层管理者与基层管理者、基层管理者与高层管理者的评分差异显著,而中层管理者与高层管理者的评分差异不显著。
Python代码
from statsmodels.stats.multicomp import MultiComparison
mc = MultiComparison(exercise9_2_1['评分'], exercise9_2_1['层级'])
print(mc.tukeyhsd(alpha = 0.05))
(3)接下来,我们绘制Q-Q图、直方图和核密度曲线来检验正态性。正态Q-Q图显示,评分近似服从正态分布;直方图与核密度图显示,评分接近对称分布。
Python代码
# 正态性检验:3个管理者层级的评分数据合并后的正态Q-Q图、直方图和核密度曲线
import pandas as pd
from matplotlib import pyplot as plt
import statsmodels.api as sm
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
# 绘制Q-Q图,采用的数据是 exercise9_2_1
plt.subplots(1, 2, figsize = (8, 3.5))
ax1 = plt.subplot(121)
pplot = sm.ProbPlot(exercise9_2_1['评分'], fit = True)
pplot.qqplot(line = 'r', ax = ax1, xlabel = '期望正态值', ylabel = '标准化的观测值')
ax1.set_title('评分的正态Q-Q图', fontsize = 12)
# 绘制直方图和核密度图
plt.subplot(122)
sns.histplot(exercise9_2_1['评分'], kde = True, bins = 6, stat = 'frequency')
plt.title('评分的直方图和核密度图')
plt.tight_layout()
最后,根据Levene检验法检验样本数据的方差齐性。计算结果为统计量F = 1.36364, p值 = 0.28567。由于p值大于0.05,可以认为各个管理者层级的评分满足方差齐性。残差图也反映出样本数据的方差齐性。
Python代码
# 用Levene检验法检验样本数据的方差齐性
import pandas as pd
from scipy.stats import levene
exercise9_2 = pd.read_csv('exercise9_2.csv')
sample1 = exercise9_2['高层管理者']
sample2 = exercise9_2['中层管理者']
sample3 = exercise9_2['基层管理者']
F, p_value = levene(sample1, sample2, sample3)
print(f"统计量F = {F:.5f}, p值 = {p_value:.5g}")
# 用残差图检验方差齐性
import pandas as pd
from statsmodels.formula.api import ols
import statsmodels.api as sm
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
model1 = ols(formula = '评分 ~ 层级', data = exercise9_2_1).fit() # 拟合单因子模型
# 绘制单因子方差分析的残差图
plt.scatter(model1.fittedvalues, model1.resid, marker = '*')
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.title('残差图', fontsize = 13)
plt.axhline(0, ls = '--', color = 'red')
plt.tight_layout()
都读到这里了,不妨关注、点赞一下吧!
标签:plt,Python,管理者,exercise9,方差分析,评分,因子,层级,import From: https://blog.csdn.net/lucasluy2020/article/details/139752813