【发布时间】:2021-06-17 03:26:01
【问题描述】:
我四处寻找解决这个问题的方法,我发现最接近的是:Get upper triangular matrix from nonsymmetric matrix,但这对我不起作用。
我在 R 中有一个 2 列和 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
我可以通过在生成矩阵时交换 X 和 Y 变量来获得另一个拐点。
有人对潜在的使用方法有解决方案或建议吗?
谢谢!
【问题讨论】:
-
在 3000x2 数据矩阵上使用
diag、upper.tri和lower.tri没有意义。例如diag只返回 row1/col1 和 row2/col2。尝试绘制您的数据,然后添加abline(v=quantile(diag_calc$Y)[2:4], lty=3)和abline(h=quantile(diag_calc$X)[2:4], lty=3)。这会将您的数据分成 4x4 块。 -
我还需要量化每个对角线的每个极端点的数量,因此我需要在实际数据矩阵中识别这些单元格。
-
你是如何定义绘图上的对角线的?