数据科学从业者的学习日记。数据挖掘和机器学习,R 和 Python,理论和实践并行。个人公众号:Data Scientist Development(微信ID:louwill12)
昨天万众期待的2017 NBA总决赛G1,你一定都看过了吧?不是骑士不尽力,而是对面有高达。这场比赛的结果是书包和打卡图书馆的双星首先闪耀。前两天的数学建模课是多元统计,所以复习了一些主成分分析和典型相关分析的知识。今天小编就用R语言做一个简单的典型相关分析,看看这些球员的身体数据和技术数据是如何相关的。
1典型相关分析的统计原理
简单地说,典型相关分析就是在复杂变量关系中以降维的形式研究两组变量之间的相关性。通常,为了研究两组变量X=(x1,x2,…xp),Y=(y1,y2,…,yq)之间的相关性,最原始的方法是计算两者groups 变量之间的所有相关系数,共有pq个相关系数,主要矛盾很难把握,计算起来很麻烦。这时候,我们可以利用主成分分析的思想,找出两组变量的某种线性组合,讨论线性组合之间的相关性,问题就简化了很多。在实际问题中,这种方法也被广泛使用。比如我们要研究q个质量指标(y1,y2,…,yq)和p个原材料指标X=(x1,x2,…xp ),可以用典型相关分析法来处理它。
典型相关分析的核心思想如下:
首先,在每组变量中找到第一对线性组合,使它们具有最大的相关性,然后在每组变量中找到第二对线性组合,使它们分别与第一对相关该组中的线性组合。一对线性组合是不相关的,而第二对具有第二大的相关性,以此类推,直到提取出两组变量之间的相关性。
至于典型相关分析的数学推导,小编这里就不贴了。总之,推导最终应该转化为优化问题。最近发现几乎每个问题都需要优化。
2 NBA球员的典型相关分析
至于典型相关分析的工具实现,大家可以用SPSS来做。 SPSS中没有典型相关分析的菜单选项,需要在语句窗口中调用Canonical correlation.sps宏函数。有点繁琐,所以今天我们只用R语言的一段代码就可以实现SPSS的繁琐操作。小编利用Rvest从NBA中文网简单抓取部分NBA球员的体能数据和技术统计数据,筛选后提取出NBA联盟10位当红巨星的数据。这些数据包括自 2015-16 赛季以来的球员姓名、身高、体重、臂展、得分、助攻、篮板、抢断、投篮命中率和球队胜场等变量。小编将这些变量指标分为两组变量:体能变量组和技术统计变量组。 R语言中的cancor函数可以实现典型相关分析。我们看一下cancor函数的代码:
cancor(x,y,xcenter=TRUE,ycenter=TRUE)
其中x和y是两个不同的变量数据矩阵,xcenter和ycenter取逻辑值,指的是样本是否去中心化。通过cancor函数,我们可以简单的看出NBA球员的体能数据和技术统计数据之间有多大的相关性。
nbaplayer<-read.csv("D:/Rdata/datasets/nbaplayer.csv")
nba<-scale(nbaplayer[,2:10])
ca<-cancor(nba[,1:3],nba[,4:9])
ca
读入原始数据,然后进行缩放归一化,然后将数据分成两组变量,放入cancor函数中。 ca的结果如下:
$cor
[1] 0.9916247 0.8867111 0.8023318
$xcoef
[,1] [,2] [,3]
height -0.7366761 -0.1910185 -0.6036883
weight 0.5825631 0.3859985 -0.2647233
armlet 0.3238704 -0.4418187 0.6941731
$ycoef
[,1] [,2] [,3]
scores 0.01132183 -0.1950769 0.40835815
rebounds 0.01085479 -0.6941907 0.12475701
assists 0.16098246 0.1524297 -0.29155895
steals -0.10015342 0.4211629 -0.24876921
FG 0.27541733 0.3482109 -0.56970961
wingames -0.31661763 -0.4412749 0.06668427
$xcenter
height weight armlet
6.772360e-16 -6.397660e-16 1.765255e-15
$ycenter
scores rebounds assists
2.624637e-16 4.510281e-18 -1.694391e-16
从计算结果可以看出,cancor函数对两组变量提取了三组相关系数,两组变量各自的线性组合为:
ui vj 是它们各自变量组的线性组合灰色关联度分析r语言,即主成分。所以我们知道两组变量的三组线性组合之间的相关系数为 0.99、0.88、0.80 。我们这里还没有完成典型相关分析,还需要对三组的典型相关系数做显着性检验,以确定最终选择哪一组典型变量作为两组之间相关性的代表。
写一个显着性检验函数:
corcoef.test<-function(r, n, p, q, alpha=0.1){
m<-length(r); Q<-rep(0, m); lambda <- 1
for (k in m:1){
lambda<-lambda*(1-r[k]^2);
Q[k]<- -log(lambda)
}
s<-0; i<-m
for (k in 1:m){

}
s<-0; i<-m
for (k in 1:m){
Q[k]<- (n-k+1-1/2*(p+q+3)+s)*Q[k]
chialpha){
i<-k-1; break
}
s<-s+1/r[k]^2
}
i
}
其中 r 是相关系数的数量,n 是样本大小,p 和 q 是典型相关变量的数量,alpha 是置信水平。使用这个自编译函数,我们可以对三组相关系数进行显着性检验:
corcoef.test(r=ca$cor,n=10,p=3,q=3)
[1] 3
从结果可以得出,虽然前两组的相关系数很大,两组变量之间的相关性明显,但在0.的置信水平下无法通过显着性检验@>1,所以我们选择第三组作为两组变量之间相关性的代理。计算结果表明,NBA球员的身体素质与其个人技术统计表现密切相关。詹姆斯·黄和库里之所以拥有令人印象深刻的技术统计数据,与他们自身出色的身体素质是分不开的。当然,现在灰色关联度分析r语言,职业运动肯定是日复一日年复一年的刻苦训练。
本来想做一个pls偏最小二乘回归,但是发现数据支持不是很好,自变量也不好选,所以放弃了。有人可能会说你的分析没有技术含量和实际意义。 NBA球员的身体素质普遍都这么高,但并不是所有人都能像威少哈登那样恐怖。没错,不过小编的举动只是为了测试一下R语言典型相关分析的实现方法,目的是锻炼实际的数据分析能力,各位JR们,一笑而过吧。最后放一张图,祝两支队伍在G2打出更精彩的表现。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 欧资源网