J'utilise la méthode suivante de Daniel Weidele pour calculer une similarité Brainerd-Robinson pour un ensemble de données (code ci-dessous). Mes rangées représentent des lieux et mes colonnes représentent l'âge des personnes trouvées à chaque endroit. J'utilise la similarité pour mesurer les endroits qui ont des compositions démographiques similaires les uns aux autres, puis j'utilise la sortie dans une analyse de réseau. Mon problème est que beaucoup de mes places ont des '0' personnes dans certaines catégories d'âge, et donc l'index de similarité montre des liens forts entre ces endroits. Je voudrais exécuter deux itérations du modèle, à la fois i) où les '0 sont pris en compte et ii) où' 0 'sont ignorés, c'est-à-dire si je retourne juste les indices générés sur les données positives.Excluant 0 de similarité Brainerd-Robinson
J'ai essayé différentes méthodes d'exclusion de '0' de l'analyse et rien n'a fonctionné jusqu'ici. Des suggestions pour cela? Merci.
# 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")
Serait-il logique de vos données, à l'entrée d'une moyenne pour tous les âges dans les lieux de 0? –
J'aurais alors le même problème, n'est-ce pas? Si tous les 0 sont remplacés par le même n, alors ces valeurs seront toujours marquées comme 100% 'similaires'? – michael
Si je devais remplacer tous mes '0' par NA, y aurait-il une bonne façon de les exclure de l'analyse? – michael