R 如何从矩阵中只保留一个高度相关的值?

R 如何从矩阵中只保留一个高度相关的值?,r,matrix,correlation,R,Matrix,Correlation,我在这个网站上创建了我的相关矩阵(在标签LDmatrix下),下面粘贴了246个SNP 并加载了它: calc.rho=read.table("ro246_matrix.txt") calc.rho=data.matrix(calc.rho) 我想做的是从这个矩阵中只提取相关性小于0.8的对 我可以通过: keeprows<-apply(calc.rho,1,function(x) return(sum(x>0.8)<3)) ro246.lt.8<-calc.rho[k

我在这个网站上创建了我的相关矩阵(在标签LDmatrix下),下面粘贴了246个SNP 并加载了它:

calc.rho=read.table("ro246_matrix.txt")
calc.rho=data.matrix(calc.rho)
我想做的是从这个矩阵中只提取相关性小于0.8的对

我可以通过:

keeprows<-apply(calc.rho,1,function(x) return(sum(x>0.8)<3))
ro246.lt.8<-calc.rho[keeprows,keeprows]
ro246.lt.8[ro246.lt.8 == 1] <- NA
(mmax <- max(abs(ro246.lt.8), na.rm=TRUE))
[1] 0.566
或者这是一个更直接的可复制示例:

calc.rho<-matrix(c(0.903,0.268,0.327,0.327,0.327,0.582,
0.928,0.276,0.336,0.336,0.336,0.598,
0.975,0.309,0.371,0.371,0.371,0.638,
0.975,0.309,0.371,0.371,0.371,0.638,
0.975,0.309,0.371,0.371,0.371,0.638,
0.975,0.309,0.371,0.371,0.371,0.638),ncol=6,byrow=TRUE)
rnames<-c("rs56192520","rs3764410","rs145984817","rs1807401",
"rs1807402","rs35350506")
rownames(calc.rho)<-rnames
cnames<-c("rs9900318","rs8069906","rs9908521","rs9908336",
"rs9908870","rs9895995")
colnames(calc.rho)<-cnames

calc.rho您的可复制示例不是真正的相关矩阵,因此我更愿意使用R amd中可用的数据集
mtcars
来制作相关矩阵。但您应该能够将其应用于数据集

数据(mtcars)
my_数据头(res2)
#一个tibble:6x3
核糖核酸酶
1英里每加仑1英里
2英里每加仑排量-0.848
每加仑马力3英里-0.776英里
每加仑4英里,阻力0.681
重量为5英里每加仑-0.868英里
6 mpg qsec 0.419
然后,您可以创建一个新的
列表
对象,该对象将同时包含
rnames
col

res4%rowwise()%%>%do(i=sort(c(.$rnames,.$col)))
#这是res4的输出
>主管(res4)
i1 i2 i3 i4 i5 i6
“mpg”“mpg”“disp”“mpg”“hp”“mpg”
我们使用
res4
res2
中创建了一个名为
comparison
的新列,它将是
rnames
col
顺序的融合。我们将使用这个新列过滤行(使用
distinct
)最后,我们应用一个
过滤器
,只保留高于0.5的值(但如果需要,可以执行0.8),并删除等于1的值(自比较)

res2%>%
突变(比较=0(res4[seq(1,长度(res4),by=2)],res4[seq(2,长度(res4),by=2)])%>%
不同(比较,.keep_all=T)%>%
过滤器(Corr>0.5&Corr!=1)
这是最终输出

#一个tible:4 x 4
核糖核酸酶
1英里每加仑0.681英里每加仑
2显示马力0.791显示马力
3显示重量0.888显示重量
4马力重量0.659马力重量

也许有更简单的方法可以获得相同的输出,但至少这一种方法应该适用于您的数据。

请创建一个最小的可复制示例。共享一个10x0或15x15的相关矩阵,足够大,足以说明问题,您会更快地得到帮助。谢谢!我粘贴了矩阵的一个线程。有其他方法吗这个?我又增加了一个例子这个过程可能会使你的结果变得不可靠,但是有了这个警告,你可以一次处理一个变量,例如(colSums(calc.rho)显示rs9900318与其他变量的平均相关性最高。删除它并重新计算相关矩阵。在相关矩阵中,不再存在超过0.8的任何相关性。
calc.rho<-matrix(c(0.903,0.268,0.327,0.327,0.327,0.582,
0.928,0.276,0.336,0.336,0.336,0.598,
0.975,0.309,0.371,0.371,0.371,0.638,
0.975,0.309,0.371,0.371,0.371,0.638,
0.975,0.309,0.371,0.371,0.371,0.638,
0.975,0.309,0.371,0.371,0.371,0.638),ncol=6,byrow=TRUE)
rnames<-c("rs56192520","rs3764410","rs145984817","rs1807401",
"rs1807402","rs35350506")
rownames(calc.rho)<-rnames
cnames<-c("rs9900318","rs8069906","rs9908521","rs9908336",
"rs9908870","rs9895995")
colnames(calc.rho)<-cnames