如何重新计算矩阵以获得正确的值?
How to recalculate a matrix to get correct values?
我在 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
我知道它的价值真的很低,但我觉得不应该是这样。如何获得正确的价值观?
尝试将以下行添加到您的代码中
df <- `diag<-`(df, 0)
或
replace(df, df <= sqrt(.Machine$double.eps), 0)
我在 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
我知道它的价值真的很低,但我觉得不应该是这样。如何获得正确的价值观?
尝试将以下行添加到您的代码中
df <- `diag<-`(df, 0)
或
replace(df, df <= sqrt(.Machine$double.eps), 0)