Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别R中不对称矩阵中对角线上方或下方的所有单元格_R_Matrix_Diagonal - Fatal编程技术网

识别R中不对称矩阵中对角线上方或下方的所有单元格

识别R中不对称矩阵中对角线上方或下方的所有单元格,r,matrix,diagonal,R,Matrix,Diagonal,我四处寻找这个问题的解决方案,我发现最接近的是:,但这对我不起作用 我在R中有一个矩阵,有两列,3000多行 head(diag_calc) X Y [1,] 0.4991733 0.05358506 [2,] 1.1758962 0.70707194 [3,] 0.2197383 -0.00148791 [4,] 0.6389240 0.24411083 [5,] 0.8708275 0.16959840 [6,] 0.9784328

我四处寻找这个问题的解决方案,我发现最接近的是:,但这对我不起作用

我在R中有一个矩阵,有两列,3000多行

head(diag_calc)
        X            Y
[1,] 0.4991733   0.05358506
[2,] 1.1758962   0.70707194
[3,] 0.2197383  -0.00148791
[4,] 0.6389240   0.24411083
[5,] 0.8708275   0.16959840
[6,] 0.9784328   0.10341456
当我将它们相互勾画时,它们看起来是这样的:

我想识别所有包含对角线两端点的行。我试着在X的第三个四分位数和Y的第一个四分位数中标记点,并将它们涂成橙色。我倒过来把它们涂成紫色。然而,这个指标并没有捕捉到我的系统中真正的生物变异性,而且似乎在对角线的极端(从我标记的四分位的拐点开始)识别细胞将提供更好的结果

我试过使用R基的diag、upper.tri和lower.tri,但这些都不起作用,我想这是因为我的矩阵是不对称的。Diag可以计算每条对角线穿过的拐点。因此:

diag_calc <- Ad_SF7_fc_scored_NK %>%
      select(one_of("X", "Y")) %>%
      as.matrix(.) 

diag(diag_calc) -> diag_test

diag_test
[1] 0.4991733 0.7070719
diag_calc%
选择(X、Y中的一个)%>%
as.矩阵(.)
诊断(诊断计算)->诊断测试
诊断试验
[1] 0.4991733 0.7070719
我可以通过在生成矩阵时交换X和Y变量来获得另一个拐点

是否有人对可能使用的方法有解决方案或建议


谢谢

这里有一种方法可以继续假设你是如何定义对角线的。首先创建可再现的数据并获得分位数:

set.seed(42)
X <- rnorm(500, 1.5, .5)
Y <- rnorm(500)
Xq <- quantile(X)
Yq <- quantile(Y)
df <- data.frame(X, Y)
set.seed(42)

使用
diag
upper.tri
lower.tri
在3000x2数据矩阵上没有意义。例如,
diag
只返回行1/col1和行2/col2。尝试绘制数据,然后添加
abline(v=分位数(diag\u calc$Y)[2:4],lty=3)
abline(h=分位数(diag\u calc$X)[2:4],lty=3)
。这将你的数据分成4x4块。我还需要量化每个对角线每一个极端的点数,因此我需要在实际数据矩阵中识别这些单元格。你是如何定义绘图上的对角线的?谢谢Carlson博士!这个问题比我预料的要困难得多。这是一个很好的解决方案!
plot(X~Y, df, pch=20)
abline(v=Yq[2:4], lty=3)
abline(h=Xq[2:4], lty=3)
diag <- lm(Xq[c(2, 4)]~Yq[c(2, 4)])
points(Yq[c(2, 4)], Xq[c(2, 4)], cex=2, col="red", lwd=2)
abline(diag)
b <- coef(diag)[2]
a1 <- Xq[4] - b * Yq[2]
a2 <- Xq[2] - b * Yq[4]
abline(a1, b)
abline(a2, b)
res1 <- X - (a1 + b * Y)
res2 <- (a2 + b * Y) - X
clr <- c("black", "purple", "darkorange")
idx <- ifelse(res1 > 0, 3, ifelse(res2 > 0, 2, 1))
plot(X~Y, pch=20, col=clr[idx])
abline(a1, b, col="red")
abline(a2, b, col="red")
position <- c("inside", "below", "above")
df$outlier <- position[idx]
head(df)
#           X            Y outlier
# 1  2.185479  1.029140719  inside
# 2  1.217651  0.914774868   below
# 3  1.681564 -0.002456267  inside
# 4  1.816431  0.136009552  inside
# 5  1.702134 -0.720153545  inside
# 6  1.446938 -0.198124330  inside
# 7  2.255761 -1.029208806   above
# 8  1.452670 -0.966955896  inside
# 9  2.509212 -1.220813089   above
# 10 1.468643  0.836207704  inside