看到这个标题,你可能会想影响工资的因素太多了。学历、工作经验、能力、人脉、机会、行业、地域,等等,都会影响工资,怎么确定每个因素影响了多少工资呢?别急,我们一个一个来分析。
方差分析就是研究类别型自变量和连续型因变量之间关系的一种统计分析方法。方差分析是不是特别适合解决我们刚才提到的问题?
工资是近似的连续型因变量(说近似,是因为虽然工资可以为任意实数,但现实中我们基本以整数为单位,扣完保险和公积金后是小数),学历、行业、地域等是类别型自变量。
我们先假设所有工资差异都是由一个因素引起的。你可能认为这样做和我们一开始讨论的多因素影响工资的情况矛盾,但根据大数定律和中心极限定理,在样本足够大的情况下,除我们分类标准以外因素的影响都可以变得微乎其微,因变量的值会依概率收敛于数学期望,即我们常用的算数平均值。所以下面我们可以大胆地分析职业这一单独因素对工资的影响了。
俗话说:女怕嫁错郎,男怕入错行。我们先看看职业对工资的影响有多大?
-
将工作目录设置为目标文件所在目录:”C:/DataAnalysis”(根据需要自行设定)
-
读取文件(salary_profession.csv)
-
salary_profession.csv中有什么数据呢?我们用summary()函数展示一下。
上述步骤的R语言代码和结果如下:
我们可以看到salary_profession.csv文件中含有序号X列、salary列和profession列,其中每个profession类型都有20条记录,共有60条记录。
注:根据大数定律,当样本量>=2000时才算足够大的样本量,此处受数据获取所限,每个职业对应的工资只有20个样本。
- 不同职业的工资情况是什么样的呢?我们先用箱线图来展示。
boxplot(因变量~自变量,x轴标签,y轴标签,标题)
注:$表示对数据框中向量的引用。
结果如下图所示,可以看到不同职业的平均工资是有差异的。
我们从箱线图中判断三个不同职业的工资是有差异的,但是真的有本质性差异吗?或者说在统计学上的差异性显著吗?我们用单因素方差分析的方法来分析差异的显著性。
oneway.test(因变量~自变量)
注:F值=组间方差/组内方差。
p-value=5.086*e^(-8)<0.001,说明即使在0.001的显著性水平上,三个职业间的平均工资也是有差异的。
在R语言中,除了oneway.test()函数可以进行单因素方差分析外,aov()函数也可以进行单因素方差分析。
二者的区别在于:oneway.test()函数可以使用Welch修正解决方差的非其次性,即不需要假设样本的方差齐性;但oneway.test()函数不能提供足够多的信息来辅助决策,也不能提供post-hoc检验。而aov()函数恰恰弥补了oneway.test()函数的缺陷。
下面我们用aov()函数分析职业对工资的影响。
aov(因变量~自变量)
p-value=1.26*e^(-7),说明三个不同职业的平均工资是有显著性差异的。
三个职业的平均工资分别是多少呢?我们用model.tables()给出拟合模型salary.aov的汇总信息。
从上面结果中可以看出,三个不同职业的平均工资不同。
三个不同职业的工资两两之间的差异在什么地方呢?我们用TukeyHSD()函数对拟合模型进行检验。
从结果中可以看出Data Scientist和BI Engineer的工资的方差差异(21795.25)是最大的,也就是说这两个职业间的工资差异较大。
注:本文中所使用的例子来自邱祐玮所著的《数据科学:R语言实现》。
若需要获取csv原文件,请关注“数学算法的世界”,并回复salary_profession获取。
数学算法的世界
数据分析|Python
R|SQL|Excel|科普