多因素方差分析和多变量方差分析,多因素方差分析和单因素方差分析
1.前言
背景
:表格是随机选取的不同性别、不同文化程度的被试的幸福指数数据。
目的
:现在要求分析幸福指数是否受不同性别和受教育程度的影响。
分析方法
:两个自变量是分类变量,因变量是连续变量,所以选择多元方差分析。差异分析需要满足的条件:
1.所有样本应为独立的随机样本;2.每个样本来自正态分布总体;3.每个样本方差的同质性。
显著性水平
:选择0.05。
工具
:Jupyter笔记本(Python 3.8)2.Python
数据查看
数据=[男性,高中及以下,63.0],[男性,高中及以下,64.0],[男性,高中及以下,60.0],[男性,高中及以下,63.0] 65.0],[男性,高中及以下,61.0],[男性,高中及以下,62.0],[男性,高中及以下,68.0],[男性,本科, [男,研究生及以上,86.0],[男,研究生及以上,92.0]研究生及以上,84.0],[男,研究生及以上,91.0],[男,研究生及以上,87.0],[男,研究生及以上,88.0],[男,研究生及以上],[女,高中及以下,66.0],[女,高中及以下,61.0],[女,高中及以下, [女,本科[女,本科,66.0],[女,本科,69.0],[女,本科,74.0],[女,本科,73.0],[女,本科,65.0],[女,本科,64.0],[女,本科,82.0],[女,研究生及以上,83.0],[女,研究生及以上]
转换
df1=pd。data frame()data _ list=[]for I in df . gender . unique():for j in df . education . unique():data=df[(df . gender==I)(df . education==j)][ Index ]。值data _ list . append(data)df1=df1 . append(PD。DataFrame(数据,列=pd。MultiIndex.from_arrays([[i],[j]]))。T)df1=df1。Tdf1
转换成更直观的形式,方便后续操作
各组数量统计
#检查每组的数量分布df1.count()。to_frame()
箱线图查看异常值
组数有区别。plt.figure(figsize=(12,8))sns.boxplot(x=gender ,y=Index ,data=df,hue=education)plt.show()
每组数据没有
正态性检验
的异常值。#夏皮罗-维尔克测试SW _ test _ RES=PD . data frame()for I in df1 . columns:statistics,pvalue=stats。夏皮罗(DF1 [i].dropna())SW _ test _ RES[I]=[statistics,pvalue]SW _ test _ RES . index=[ statistic , p_value]sw_test_res.T.round(3)
以上各组的p值均大于0.05,满足
方差齐性检验
的正态分布。# levene testprint(基于中位数的levene测试P值:,stats.levene (* data _ list,center= median )。pvalue) p值为0.286,大于0.05,即任何分类都有
判断交互作用
的等方差。计算平均值
Df _ mean=df1.mean()。to _ frame()。解散堆叠()。round (1) df _ mean.columns=[本科,研究生及以上,高中及以下]df_mean=df_mean[[高中及以下]
绘制交互图
#定义一个绘图函数def draw _ pics (data,feature): fig,ax=plt.subplots (fig size=(8,6))for I in data . index:ax . plot(data . columns,data.loc [i,],label=i,Marker= o )ax . legend()ax . set _ title(平均幸福指数)ax.set _ xlabel (feature,fontdict={fontsize: 14})ax . set _ y label(平均),Font dict={ Font size :14 })
# draw_pics(data_mean。t,“性别”),得出不同性别不同教育水平的平均变化
可见,在对幸福指数的影响上,教育程度和性别之间可能存在交互作用。男性和女性的幸福指数都随着受教育程度的提高而提高。然而,它们的增长趋势是不同的。男性在高中及以下、本科时的幸福指数低于女性。但是,当男性的受教育程度达到研究生以上时,他们的幸福指数要高于女性。可见,在教育水平提高和幸福指数增加的过程中,男性受益大于女性。
多因素方差分析
将交互项目纳入方差分析。
anova=smf.ols(Index ~ C(性别)C(教育)C(性别)*C(教育),data=df)。fit()sm.stats.anova_lm(anova,typ=1)
结果显示:
P=0.404 > 0.05,说明性别对幸福指数没有影响(P 0.001),说明学历对幸福指数有显著影响(F (2,52)=4.148,P=0.021),有统计学意义,说明性别和学历对幸福指数(
事后比较
)有交互作用。不同教育水平的事后比较
#事后多重比较sm . stats . multi comp . pairwise _ tukeyhsd(groups=df . education,endog=df.index)。摘要()
事后对比:
本科学历的幸福指数比高中及以下学历的幸福指数高4.13 (95% CI: 1.55-6.72),P=0.001研究生以上学历的幸福指数比高中以下学历的幸福指数高21.72 (95% CI: 19.17-24.28),P 0.001研究生以上学历的幸福指数比本科学历的幸福指数高17.59 (95% CI: 15.04-20.15),P0.001.
单独效应的解释
性别的独立效应
df.gender.unique()中I的# Gender _ PC _ DF=PD . data frame():PC=sm . stats . multi comp . pairwise _ tukey HSD(groups=DF . query( Gender==@ I )。education,endog=df.query(gender==@i )。指数)。summary() pc_df=pd。DataFrame(pc,index=[I]*(df . education . nunique()1),)[1:]gender _ PC _ df=gender _ PC _ df . append(PC _ df)gender _ PC _ df . columns=[ group 1 , group2 , meandiff , p-adj , lower , upper , reject]gender_pc_df
从结果中,我们可以得到:
中等男性:
高中及以下学历的幸福指数得分比本科学历低4.50 (95% CI: 1.58-7.42),P=0.0021;高中及以下的幸福指数得分比研究生及以上低24.44 (95% CI: 21.60-27.29),P=0.001。本科学历的幸福指数得分比研究生及以上学历低19.94 (95% CI: 17.10-22.79),P=0.001。女性:
高中及以下学历的幸福指数得分与本科学历相比无显著差异,P=0.071;高中及以下学历比研究生及以上学历低19.10 (95% CI: 15.02-23.17),P=0.001。本科学历的幸福指数得分比研究生及以上学历低15.30 (95% CI: 11.23-19.37),P=0.001。
结论
1.采用因子方差分析法分析性别、受教育程度对幸福指数的影响,显著性水平选为P=0.05。满足方差分析的前提:箱线图无异常值,夏皮罗-维尔克检验正态,Levene方差齐性检验等方差(P=0.286)。2.在本研究中,性别对幸福指数没有影响(P=0.404),受教育程度对幸福指数有显著影响(P 0.001),性别与受教育程度之间存在交互作用(P=0.021)。3.不同性别不同受教育程度对幸福指数的影响:
中等男性:
-高中及以下的幸福指数得分比本科低4.50 (95% CI: 1.58-7.42),P=0.0021;
-高中及以下的幸福指数得分比研究生及以上低24.44 (95% CI: 21.60-27.29),P=0.001。
-本科学历的幸福指数得分比研究生及以上学历的幸福指数得分低19.94 (95% CI: 17.10-22.79),P=0.001。
女性:
-高中及以下的幸福指数得分与本科学历相比无显著差异,P=0.071;
-高中及以下学历比研究生及以上学历低19.10 (95% CI: 15.02-23.17),P=0.001。
-本科学历的幸福指数得分比研究生及以上学历的幸福指数得分低15.30 (95% CI: 11.23-19.37),P=0.001。参考链接:双因素方差分析-SPSS教程点击链接