R は初めてで、長い質問があります。
シェープファイル/マップがあり、そのポリゴンとそれに隣接する各ポリゴンの属性に基づいて、そのマップ内のすべてのポリゴンの特定のインデックスを計算することを目指しています。
私は隣接行列を持っています - これは「1次クイーン隣接重み行列」と同じだと思いますが、よくわかりませんが、どのポリゴンが他のどのポリゴンと国境を接しているかを説明しています。
POLYID A B C D E
A 0 0 1 0 1
B 0 0 1 0 0
C 1 1 0 1 0
D 0 0 1 0 1
E 1 0 0 1 0
上記は、たとえば、ポリゴン 'C' と 'E' がポリゴン 'A' に隣接していることを示しています。ポリゴン 'B' はポリゴン 'C' のみに隣接します。
私が持っている属性テーブルには、行ごとに 1 つのポリゴンがあります。
POLYID TOT L10K 10_15K 15_20K ...
A 500 24 30 77 ...
ここで、TOT、L10K などは、インデックスの計算に使用する変数です。
データには 525 のポリゴン/行があるため、隣接行列を使用して、関心のあるインデックスの計算に組み込む行の属性を決定したいと考えています。今のところ、隣接するポリゴンの 1 つの「バンドル」に対応する行をサブセット化し、ループを使用してインデックスを計算できます (興味がある場合は、地元の所得分離の尺度である Centile Gap Index を計算しています)。 )。たとえば、デトロイト市立学校の「近隣」をサブセット化すると、次のようになります。
Detroit <- UNSD00[c(142,150,164,221,226,236,295,327,157,177,178,364,233,373,418,424,449,451,487),]
次に、列の限界比率と累計を記録します。
catprops <- vector()
for(i in 4:19)
{
catprops[(i-3)]<-sum(Detroit[,i])/sum(Detroit[,3])
}
catprops <- as.data.frame(catprops)
catprops[,2]<-cumsum(catprops[,1])
列 4:19 は、属性テーブルで必要なものです。
次に、次のコードを使用してインデックスを計算します。デトロイトのサブセットには 19 個のポリゴンがあるため、ループに「i in 1:19」があることに注意してください。
cgidistsum <- 0
for(i in 1:19)
{
pranks <- vector()
for(j in 4:19)
{
if (Detroit[i,j]==0)
pranks <- append(pranks,0)
else if (j == 4)
pranks <- append(pranks,seq(0,catprops[1,2],by=catprops[1,2]/Detroit[i,j]))
else
pranks <- append(pranks,seq(catprops[j-4,2],catprops[j-3,2],by=catprops[j-3,1]/Detroit[i,j]))
}
distpranks <- vector()
distpranks<-abs(pranks-median(pranks))
cgidistsum <- cgidistsum + sum(distpranks)
}
cgi <- (.25-(cgidistsum/sum(Detroit[,3])))/.25
必要以上の情報を提供してしまったことをお詫び申し上げます。これらの行の「バンドル」ごとに CGI を計算するために、隣接行列を活用したいと思います。
私がこれをどのように開始できるかをたまたま知っていれば、それは素晴らしいことです.
初心者の間違いをお詫びします。私はRを初めて使用します。
編集:
私はそれ以来、これにアプローチする方法を考え出しましたが、問題を明確にするために、またコメントで尋ねられた 1 つの質問に答えるために、ポリゴンの近隣は、それ自体と隣接するすべてのポリゴンの結合であると言いましょう。上記の例では、ポリゴン「A」の場合、ポリゴンの「A」、「C」、および「E」の結合になります。