Bonjour,
J'ai un petit problème de calcul de matrice à vous confier.
dans le cadre d'une analyse géographique multi-critères, je dispose de données diverses: la pente, l'altitude, ainsi que la densité de population sur un secteur donné.
A partir de cela, je dois définir des aires d'aménagement optimales en appliquant des poids à chaque variable de manière relative.
Ainsi, la pente sera deux fois plus importante à prendre en compte par exemple que l'altitude, la population 4 fois plus que la pente.
Cela doit aboutir à une matrice dont les dimensions en colonnes et en lignes sont identiques et dont la diagonale égale 1. La diagonale constitue une sorte de miroir, un axe symétrique de part et d'autre de laquelle on trouve l'inverse des valeurs d'un côté.
Sachant que la matrice de poids relatifs a été établie de cette façon:
Comment aboutir rapidement à ceci (fonction déjà existante?)
Pour l'instant ma méthode est assez la laborieuse:
je définis la matrice de poids mat1
etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part mat1[2,1]=2
Puis je trouve la réciproque de la matrice de laquelle j'inverse les valeurs
je remplace les valeurs nulles des matrices par 0 pour pouvoir effectuer la somme de la matrice et de sa réciproque
Code : Sélectionner tout - Visualiser dans une fenêtre à part mat2=1/t(mat2)
Je définis la diagonale égale à 1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 mat[sapply(mat, is.na)]=0 mat2[sapply(mat2, is.na)]=0 mat3=mat+mat2
Assez laborieux tout de même: je pense vraiment qu'il existe une fonction pour ça...
Code : Sélectionner tout - Visualiser dans une fenêtre à part diag(mat3)=1
Partager