Distanzmatrix für hierarchische Clusteranalyse
Verfasst: Di Okt 20, 2020 11:42 am
Hallo,
wie kann man eine andere Formel zur Berechnung der Distanzmatrix in die Funktion "dist" einfügen oder
wie kann man auf schnellere Art eine Distanzmatrix erzeugen?
Die Funktion "dist" mit "binary"
verwendet die Formel (b+c)/(a+b+c). Mit a (1-1) und b,c (0-1) bzw. (1-0).
Für meine Zwecke wäre z.B. (b+c)/(2a+b+c) und andere Formeln besser geeignet.
Folgende Zeilen ermöglichen zwar die Berechung einer Distanzmatrix, allerdings benötigt die Berechnung 5 Stunden für eine 1500x1500 Matrix.
Wenn es einen schnelleren Weg gibt, kann mir bitte jemand den Code zur Verfügung stellen?
Vielen Dank.
Anna
Edit: Moderator hat code-Tags eingefügt, bigben
wie kann man eine andere Formel zur Berechnung der Distanzmatrix in die Funktion "dist" einfügen oder
wie kann man auf schnellere Art eine Distanzmatrix erzeugen?
Die Funktion "dist" mit "binary"
Code: Alles auswählen
d <- dist(tabname, method = "binary", diag = FALSE, upper = FALSE)
Für meine Zwecke wäre z.B. (b+c)/(2a+b+c) und andere Formeln besser geeignet.
Folgende Zeilen ermöglichen zwar die Berechung einer Distanzmatrix, allerdings benötigt die Berechnung 5 Stunden für eine 1500x1500 Matrix.
Wenn es einen schnelleren Weg gibt, kann mir bitte jemand den Code zur Verfügung stellen?
Code: Alles auswählen
LW = function (x, y) {
a.11 = sum(x == 1 & y == 1)
b.10 = sum(x == 1 & y == 0)
c.01 = sum(x == 0 & y == 1)
return ((b.10 + c.01) / (2*a.11 + b.10 + c.01))
}
input.variables = tabname
d = matrix(data = NA, nrow = nrow(input.variables), ncol = nrow(input.variables))
for (x in 1:nrow(input.variables)) {
for (y in 1:nrow(input.variables)) {
if (y == x) {
d[x,y] = 0
} else if (x != y) {
d[x,y] = LW(input.variables[x,], input.variables[y,])
}
}
}
colnames(d) = rownames(input.variables)
rownames(d) = rownames(input.variables)
distanzLW <- as.dist(d, diag = TRUE, upper = FALSE)
Anna
Edit: Moderator hat code-Tags eingefügt, bigben