【问题标题】:How to recalculate a matrix to get correct values?如何重新计算矩阵以获得正确的值?
【发布时间】:2021-04-14 09:05:48
【问题描述】:

我在 data.frame (54x54) 中有相似度矩阵,下面有一部分

        k2m1    k2m2    k3m1    k3m2    k3m3    k4m1    k4m2    k4m3    k4m4    k5m1    k5m2    k5m3    k5m4    k5m5    k6m1    k6m2
k2m1 1.00000 0.70593 0.98712 0.67291 0.84659 0.83849 0.69555 0.94776 0.29571 0.83640 0.78021 0.78101 0.80930 0.29568 0.90375 0.66605
k2m2 0.70593 1.00000 0.62491 0.99506 0.93949 0.88436 0.97591 0.55784 0.44880 0.88685 0.94409 0.93483 0.35098 0.44874 0.75674 0.96503
k3m1 0.98712 0.62491 1.00000 0.58903 0.77023 0.76720 0.61293 0.97078 0.26117 0.76834 0.70287 0.70255 0.87783 0.26114 0.85845 0.58731
k3m2 0.67291 0.99506 0.58903 1.00000 0.91326 0.87418 0.98249 0.51427 0.44762 0.85752 0.94062 0.93468 0.31851 0.44756 0.71141 0.97317
k3m3 0.84659 0.93949 0.77023 0.91326 1.00000 0.93244 0.91640 0.71039 0.41196 0.96470 0.93509 0.92326 0.48356 0.41191 0.90513 0.88415
k4m1 0.83849 0.88436 0.76720 0.87418 0.93244 1.00000 0.87680 0.65148 0.35668 0.89307 0.95398 0.93431 0.48784 0.35664 0.80183 0.85987

当我将其转换为距离矩阵时:

df <- 1 - df

我得到一些 1-1 减法为“0”,但有些是“2.2204e-16”,见下文:

         k2m1       k2m2       k3m1      k3m2     k3m3     k4m1     k4m2     k4m3    k4m4     k5m1     k5m2     k5m3    k5m4    k5m5
k2m1 0.000000 2.9407e-01 1.2878e-02 0.3270884 0.153409 0.161507 0.304450 0.052237 0.70429 0.163605 0.219794 0.218985 0.19070 0.70432
k2m2 0.294070 2.2204e-16 3.7509e-01 0.0049388 0.060515 0.115635 0.024087 0.442162 0.55120 0.113154 0.055910 0.065169 0.64902 0.55126
k3m1 0.012878 3.7509e-01 1.1102e-16 0.4109739 0.229773 0.232802 0.387071 0.029223 0.73883 0.231656 0.297130 0.297452 0.12217 0.73886
k3m2 0.327088 4.9388e-03 4.1097e-01 0.0000000 0.086735 0.125816 0.017506 0.485726 0.55238 0.142484 0.059376 0.065321 0.68149 0.55244
k3m3 0.153409 6.0515e-02 2.2977e-01 0.0867352 0.000000 0.067559 0.083599 0.289610 0.58804 0.035305 0.064912 0.076741 0.51644 0.58809
k4m1 0.161507 1.1564e-01 2.3280e-01 0.1258165 0.067559 0.000000 0.123199 0.348521 0.64332 0.106927 0.046022 0.065694 0.51216 0.64336

我知道这是一个非常低的价值,但我认为它不应该是这样的。如何获得正确的值?

【问题讨论】:

    标签: r dataframe precision calculation


    【解决方案1】:

    尝试将以下行添加到您的代码中

    df <- `diag<-`(df, 0)
    

    或

    replace(df, df <= sqrt(.Machine$double.eps), 0)
    

    【讨论】:

    • 嗨@ThomasIsCoding,我不是本地程序员,也不是流利的R,只是一名生物学家。我发现第一个解决方案只是将对角线上的值替换为“0”,第二个解决方案适用于所有最小值,无论它们位于数据框中。后者效果更好,因为有一些相似之处,系数等于 1。它不会改变树,但让我感觉更好:) 非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多