前言:
如今看官们对“协方差相关系数计算例题”大约比较注意,你们都想要了解一些“协方差相关系数计算例题”的相关文章。那么小编同时在网上搜集了一些有关“协方差相关系数计算例题””的相关文章,希望我们能喜欢,兄弟们一起来了解一下吧!今天的内容应该算是比较简单的,如果看着看着觉得复杂了,那绝对是被我乱整给整复杂的
咱提个简单明了的问题先,知道协方差矩阵不?或者相关系数矩阵也行,反正这俩长得差不多
R里头提供的cov和cor可以直接产生协方差或相关系数的矩阵,但有点了解的亲们应该知道,这种显示方式从表格形式来说是一种宽格式,而且对角线两边的数是重复的,也就是说它虽然显示得好看,但要后续做提取啥的还是有点小繁琐的,尤其是当我们希望提取出数值的同时还要带上相关的标题,那更是格式转着转着,一不小心就找不着了
上例子:
从cov和cor的帮助文件里,咱可以看到一点端倪,那就是它其实支持两种输入方式,一种是像上面这样把整个二维表放进去作为x,这时计算出来的是协方差矩阵,还有一种是同时输入x和y,但两者都是向量,这样计算结果就只有一个数值
如果像上边那样需要3列数据间的协方差,但又不想用宽格式来显示的话,那咱需要的表至少得包含两部分:
1) 由三列数据的列标题两两组合得到的信息列
2) 由标题组合计算出来的协方差
先上手做第一部分,3列标题两两组合,意味着是3个中抽取两个,用函数choose可以先预判下这个组合的长度(这个不是必要步骤,可以省略),而用函数combn可以直接生成组合后的矩阵
Index <- names(Table1[,c(-1,-3)]) #抽取出3列的标题
COVlist <- combn(x = Index,m = 2) #两两组合,抽取数为2
输出的形式行列方向是反的,所以后边做的时候都加了转置函数t()
接下来写得有点长,做完才发觉自己不知不觉的就挖了个坑把自己埋了
#按列名称从Table1中提取数据的function
Pickout <- function(x) {Table1[,colnames(Table1) == x]}
Inputlist <- apply(t(COVlist),c(1,2),Pickout) #把Table1提取出来的6列组成3+3的一个list
COVwithPick <- function (x) {cov(Inputlist[,,1][,x],Inputlist[,,2][,x])}
#做个提取指定列的function计算协方差cov
Value <- apply(data.frame(c(1:3)),1,COVwithPick)
#把标题和协方差计算结果合并到一起
COVresult <- data.frame(t(COVlist),Value)
做倒是做出结果来了,3列两两组合出三个协方差,就是步骤嘛,看着有点费事
啊咧~~~早知道费这劲我还用啥组合数列呀,唉~~~~
标签: #协方差相关系数计算例题