1

R のプロキシ パッケージを使用して、個々の点の伝播誤差によってユークリッド距離を重み付けする距離測定を実装しています。これを行う式は

sqrt((x i - x j ) 2 ) + (y i - y j ) 2 ) + ...(n i - n j ) 2 ) ÷ sqrt((σx i 2 + σx j 2 ) + (σy i 2 + σy j 2 ) + ...(σn i 2 + σn j 2 ))。

基本的な意味でプロキシを機能させることができ(Rのプロキシパッケージを参照してください。機能させることはできません)、プレーンなユークリッド距離機能を複製しました。

しかし、誤差加重距離の関数を書き始めると、すぐに問題が発生しました。ポイントとは別のものとして誤差を読み取り、それらを別個に処理する必要があります。

私は R が非常に強力な機能を持っていることを知っており、これを行うことができると確信していますが、私の人生では、方法がわかりません。プロキシは 2 つのマトリックス入力を処理できるように見えますdistが、マトリックス X がポイントでマトリックス Y がエラーであることをどのように伝えれば、最終的に距離測定に結合される前にそれぞれが関数の適切な部分に移動しますか?

4

1 に答える 1

0

プロキシを直接使用することを望んでいましたが、できないように見えることにも気付きました。機能する機能を思いつくことができたと思います。まず、距離関数:

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)
}

うまくいくようです。

于 2013-07-31T20:41:31.710 に答える