簡體   English   中英

將點誤差信息納入距離函數-如何在R中做到這一點?

[英]Incorporating point error information into a distance function--how to do it in R?

我一直在使用R中的代理包來實現一種距離度量,該度量通過每個點的傳播誤差來加權歐幾里得距離。 做到這一點的公式是

SQRT((X I - X j)的 2)+(Y I - Ÿj)的 2)+ ...(N I - N的j)的 2)÷SQRT((ΣXI 2 +ΣXĴ2)+(ΣY 2 +ΣYĴ2)+ ...(σNI 2 +σNĴ2))。

我能夠從基本的意義上使代理工作(請參閱R中的代理程序包,不能使其工作 ),並復制普通的歐幾里得距離功能,為業余愛好者們歡呼。

但是,一旦我開始為誤差加權距離編寫函數,我立即遇到一個困難:我需要讀取與點不同的誤差,並對它們進行不同的處理。

我知道R具有非常強大的功能,並且我敢肯定它可以做到這一點,但是對於我自己的一生,我不知道該怎么做。 看起來proxy的dist可以處理兩個矩陣輸入,但是我怎么告訴它矩陣X是點,矩陣Y是誤差,然后在最終合並為距離度量之前,先將其移至函數的適當部分?

我一直希望直接使用代理,但是我也意識到自己似乎無法使用。 我相信我能夠提出一個有效的功能。 一,距離功能:

DistErrAdj <- function(x,y) {
sing.err <- sqrt((x^2) + (y^2))
sum(sing.err)
}

其次,當然是

library(proxy)
pr_DB$set_entry(FUN=DistErrAdj,names="DistErrAdj")

然后,我從augix( http://augix.com/wiki/Make%20trees%20in%20R,%20test%20its%20stability%20by%20bootstrapping.html )那里已經好心編寫的代碼進行了修改,以適應我的需要,以機智:

boot.errtree <- function(x, q, B = 1001, tree = "errave") {
library(ape)
library(protoclust)
library(cluster)
library(proxy)
    func <- function(x,y) {
        tr = agnes((dist(x, method = "euclidean")/dist(q, method = "DistErrAdj")), diss = TRUE, method = "average")
        tr = as.phylo(as.hclust(tr))
        return(tr)
    }
    if (tree == "errprot") {
        func <- function(x,y) {
            tr = protoclust((dist(x, method = "euclidean")/dist(q, method = "DistErrAdj")))
            tr = as.phylo(tr)
            return(tr)
        }
    }
    if (tree == "errdiv") {
        func <- function(x,y) {
            tr = diana((dist(x, method = "euclidean")/dist(q, method = "DistErrAdj")), diss=TRUE)
            tr = as.phylo(as.hclust(tr))
            return(tr)
        }
    }
tr_real = func(x)
    plot(tr_real)
    bp <- boot.phylo(tr_real, x, FUN=func, B=B)
    nodelabels(bp)
    return(bp)
}

它似乎有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM