Ich verwende die folgende Methode von Daniel Weidele, um eine Brainerd-Robinson-Ähnlichkeit für eine Reihe von Daten zu berechnen (Code unten). Meine Zeilen repräsentieren Orte und meine Spalten stellen das Alter von Personen dar, die an jedem Ort gefunden wurden. Ich verwende Ähnlichkeit, um zu messen, welche Orte ähnliche demographische Zusammensetzungen haben, und dann verwende ich die Ausgabe in einer Netzwerkanalyse.Ohne 0 von Brainerd-Robinson-Ähnlichkeit
Mein Problem ist, dass viele meiner Orte haben '0' Menschen in bestimmten Altersgruppen, und so zeigt der Ähnlichkeitsindex starke Verbindungen zwischen diesen Orten. Ich würde gerne zwei Iterationen des Modells ausführen, sowohl i) wo die '0's berücksichtigt werden und ii) wo' 0 'ignoriert werden, d. H., Ich gebe einfach Indizes zurück, die mit positiven Daten erzeugt wurden.
Ich habe verschiedene Methoden ausprobiert, um "0" aus der Analyse auszuschließen, und nichts hat bisher funktioniert. Irgendwelche Vorschläge dafür? Vielen Dank.
# function to load the observations
load = function() {
p <- read.csv("observations.csv")
rownames(p) <- p[,1]
p <- p[,c(2:6)]
return(p)
}
# function to compute the normalized Brainerd-Robinson similarity for observations x
BR <- function(x)
{
rd <- dim(x)[1]
results <- matrix(0,rd,rd)
for (s1 in 1:rd) {
for (s2 in 1:rd) {
results[s1,s2] <- 1 - (sum(abs(x[s1, ]/sum(x[s1,]) - x[s2, ]/sum(x[s2,]))))/2
}
}
rownames(results) <- rownames(x)
colnames(results) <- rownames(x)
return(results)
}
# load observations, compute Brainerd-Robinson similarity and write results to file
write.csv(BR(load()), "br.csv")
Wäre es sinnvoll für Ihre Daten, die Eingabe in allen Altersgruppen an Orten von 0 eine durchschnittliche machen? –
Ich hätte dann das selbe Problem, oder? Wenn alle 0 durch dasselbe n ersetzt werden, werden diese Werte immer noch als 100% 'ähnlich' markiert? – michael
Wenn ich alle meine '0' durch NA ersetzen würde, wäre es ein guter Weg, sie von der Analyse auszuschließen? – michael