【译文】因子分析在2016欧洲杯数据中的应用

作者 Hamze Dokoohaki

译者 钱亦欣

本文我将演示如何对2016年欧洲杯第一轮小组赛的数据进行因子分析(FA)。同时,我假设你对于因子分析的背景知识已经有了足够了解,所以我在此就把论述重点放在了应用上。

维基百科把因子分析定义为“ 通过维数更低的潜在变量(因子)来描述可观测变量的相关关系的一种统计方法”。通过这个定义,我们需要寻找一些潜在的变量来描述数据。本文中我把这些潜在的因子成为得分,并用它们来预测下一轮各个球队的表现。

我从EUFA网站上获取了相关数据,你可以点击这里下载。

让我们先加载包并导入数据

library(ggplot2)
library(dplyr)
library(corrplot)
library(psych)
library(MASS)

dataset<-read.csv("Dataset_16.csv")
dataset$Standing<-as.factor(dataset$Standing)
d_stan = as.matrix(scale(dataset[,3:25]))

随后,我需要先把变量标准化以去除不同量纲的影响,然后调用psych包中的函数就能实现因子分析的建模过程。我选择使用3个因子来解释数据,并将因子依照"quartimax"方法进行旋转。(相较于主成分分析(PCA), 因子分析最大的优点之一就是你可以旋转因子,使一些变量在某些因子上的载荷为0或者接近为0,这样因子会更有实际意义)。结果表明,第三个因子包含的信息基本被囊括在第二个因子中了,增加该因子并不能提高整体解释效力,因此我将因子个数改为两个重新建模,并用"factor.scores"函数来计算因子得分。

# 因子分析
FA <- fac(cor(d_stan),2, rotate = "promax", fm = "minres")
scor <- factor.scores((dataset[,3:25]), FA)
FA.dat <- dataset %>% mutate(score1 = scor$scores[, 1], score2 = scor$scores[, 2])

有趣的是,通过绘制这两个因子的散点图,我们能发现一些有意义的规律。几乎所有输球的球队都位于散点图的第三象限。

FA.dat %>% 
  ggplot(aes(x = score1, y = score2)) +
  theme_classic(base_size = 15) +
  geom_point(aes(color = Standing), size = 4) +
  geom_text(aes(label = Team, y = score2 - 0.1), size = 6) +
  labs(x = "FA1- (Score on attempts and passes)", y = "FA2-(Goal Score)") +
  geom_vline(xintercept = 0, color = "red", size = 1.2) +
  geom_hline(yintercept = 0, color = "red", size = 1.2)

绘制的图形如下:

接下来的步骤中,我绘制了两类因子得分和原始变量的相关关系图。由图可知,第一个因子与球队创造机会,主导比赛的能力高度相关。第二个因子与球队的进球能力高度相关。因此,之前散点图中的表示每个球队的点位置越靠右,意味着球队更能主导比赛,更靠上则得分能力越强。

corrplot(cor(FA.dat[, 3:ncol(FA.dat)]), mar = c(1, 0, 0, 0), tl.cex = 0.9, method = "square", type = "lower", tl.col = "black")

输出的图如下:

尽管本文粗略的分析可能无法满足你的需求,但它对接下来威尔士对阵北爱尔兰的比赛做出了较好的预测。

在我的git上你可以找到数据和R代码

注:原文刊载于datascience+网站

链接:http://datascienceplus.com/what-can-we-learn-from-the-statistics-of-the-euro-2016-application-of-factor-analysis/