楼主: danbaidong
15057 16

[问答] 请问如何获得相关系数矩阵的行列名? [推广有奖]

  • 6关注
  • 7粉丝

已卖:1468份资源

副教授

23%

还不是VIP/贵宾

-

威望
0
论坛币
34755 个
通用积分
16.7446
学术水平
9 点
热心指数
26 点
信用等级
7 点
经验
67874 点
帖子
297
精华
0
在线时间
1067 小时
注册时间
2007-5-26
最后登录
2025-11-1

楼主
danbaidong 学生认证  发表于 2013-6-10 07:38:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如题,用R做相关分析,输出的结果是什么属性呢?矩阵(matrix)?数组(array)?那么如获得其中任何一个相关系数对应的变量名呢?
比如说,我对X1 X2 X3做了相关分析,得到一个矩阵形式的表,现在我想用代码输出下面的文字”X1和X2显著相关“,这个结论的话可以根据相关系数的出来,但是怎么能自动的传递X1,X2这两个变量名到输出函数呢?貌似有点乱,希望大家能看懂……
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:相关系数矩阵 相关系数 matrix array 相关分析 matrix 如何 皮尔逊相关系数 偏相关系数 pearson相关系数 相关系数检验 spearman相关系数 复相关系数 相关系数矩阵

沙发
Ben910128 发表于 2013-6-10 12:24:06
我也在学习R,试着把输出的矩阵转换成一个数据框,然后用attach(),names()函数调用。
x1 <- 1:10
x2 <- 2:11
x3 <- 10:1
df<- data.frame(x1,x2,x3)
data.cor <- cor(df)
attach(df)
p <- 0.5
for(i in 1:3){
   for(j in 1:3)
   {
       if(data.cor[i,j] >= p)
       {
       points <- c(names(df),names(df[j]))
       print(points)
       }
   }   
}


希望能有所帮助。

藤椅
danbaidong 学生认证  发表于 2013-6-10 14:28:44
Ben910128 发表于 2013-6-10 12:24
我也在学习R,试着把输出的矩阵转换成一个数据框,然后用attach(),names()函数调用。
x1
多谢老兄回答了。但是我试了,不行,直接提示rcor.test的结果不能转化为data frame.

板凳
hugebear 发表于 2013-6-11 08:08:12
如果输出结果是矩阵,直接用colnames()就好

报纸
danbaidong 学生认证  发表于 2013-6-11 10:10:19
hugebear 发表于 2013-6-11 08:08
如果输出结果是矩阵,直接用colnames()就好
输出结果确实是矩阵,我用class()看了的,返回值是matrix。我是4个变量的相关分析,得到的是一个4*4的矩阵,但是最上面的一行和最左边的一列都是变量名。我现在想首先从矩阵中找到符合条件的相关系数(比如>0.5的),然后获取对应的变量名(就是说满足条件的值是哪两个变量的相关关系),然后以一定的格式输出。

地板
hugebear 发表于 2013-6-11 13:33:09
把数据和你的程序运行结果贴出来胜于千言万语。。。。

7
Ben910128 发表于 2013-6-11 19:50:54
danbaidong 发表于 2013-6-10 14:28
多谢老兄回答了。但是我试了,不行,直接提示rcor.test的结果不能转化为data frame.
那直接调用最初的数据框呢,是不是可以试试?

8
danbaidong 学生认证  发表于 2013-6-12 14:16:42
hugebear 发表于 2013-6-11 13:33
把数据和你的程序运行结果贴出来胜于千言万语。。。。
#读入数据#请注意把附件数据的扩展名改为csv,因为论坛不让上传csv格式的文件,故楼主改成了xls
testdata <- read.csv("test.csv")
testdata
#ltm包及相关检验
library(ltm)
#临时数据框
testmat <- cbind(height = testdata$height, shoe = testdata$shoe, hand = testdata$hand)
#相关检验
rcor.test(testmat)
以上代码执行后会得到如下结果:

       height shoe   hand  
height  *****  0.867  0.574
shoe   <0.001  *****  0.516
hand    0.001  0.004  *****

upper diagonal part contains correlation coefficient estimates
lower diagonal part contains corresponding p-values


我想要的输出形式是:
height和shoe显著相关,相关系数是0.867;
height和hand显著相关,相关系数是0.574;
shoe和hand显著相关,相关系数是0.516。
因为现在变量少还好,如果变量很多,即便是相关分析得到的表格装得下,看起来也不方便,如果可以用文字的形式把显著相关的变量及其系数列出来,似乎更有利于信息的传达,尤其是给非专业人士看的时候。故有此问。希望大家可以指点在下一二。

test.xls
下载链接: https://bbs.pinggu.org/a-1349377.html

525 Bytes

data for the post

9
danbaidong 学生认证  发表于 2013-6-12 14:18:17
Ben910128 发表于 2013-6-11 19:50
那直接调用最初的数据框呢,是不是可以试试?
我对这个问题作了补充,欢迎继续讨论,谢谢!

10
Ben910128 发表于 2013-6-12 17:37:40
danbaidong 发表于 2013-6-12 14:18
我对这个问题作了补充,欢迎继续讨论,谢谢!
我明白楼主要做一件什么事情了。我觉得楼主是不是在处理基于相关系数的变量分类问题是产生的这个想法?不过我觉得,当数据比较多时,用字符串的方式输出结果没有以列表的方式输出简洁。不过按照楼主的要求给出代码,最后我是直接做了一个函数,更具有普遍性。应该这样就可以吧。
  1. testdata <- read.csv(file.choose())
  2. test <- data.frame(height = testdata[["height"]], shoe = testdata[["shoe"]], hand = testdata[["hand"]])
  3. testcor <- cor(test)
  4. testcor
  5. result.cor <- function(data)
  6.               {
  7.                p <- 0.5
  8.                n <- ncol(data)
  9.                data.df <- as.data.frame(data)
  10.                for(i in 1:n)
  11.                   {
  12.                    for(j in i:n)
  13.                        {
  14.                         if(data.df[i, j] >= p)
  15.                           {
  16.                            while(i != j)
  17.                                 {
  18.                                  result <- paste(names(data.df[i]), "和", names(data.df[j]),
  19.                                                  "显著相关,相关系数是", data.df[i, j])
  20.                                  print(result)
  21.                                  break
  22.                                  }
  23.                           }  
  24.                        }
  25.                   }
  26.                }
  27. result.cor(testcor)
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
danbaidong + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 00:01