Weight Matrices from Distance Matrix

For posting your own programs to share with others

Moderators: EViews Gareth, EViews Moderator

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

Weight Matrices from Distance Matrix

Dear All,

Please see some code to create 5 commonly used spatial weighting matrices based on distances (k-nearest, radial distances, power distances, exponential distances and double-power distances). The idea is to use this in conjuction with a well specified distance matrix (in the code below, called distance_haversine):

Code: Select all

!rwd_max = 0.5
!pdw_weight=1
!epw_weight=2
!k_nearest=100
!dpd_weight=2
!dpd_max=0.5

matrix(@rows(distance_haversine),@rows(distance_haversine)) knearest_matrix = 0 ' k-Nearest Neighbor Weights.
vector(@rows(distance_haversine)) rankvect
for !p = 1 to @rows(distance_haversine)
rankvect(!p) = !p
next
for !a = 1 to (@rows(distance_haversine))
vector(@rows(distance_haversine)) sorted_ranks_{!a}
sorted_ranks_{!a}=@capplyranks(rankvect,@ranks(@rowextract(distance_haversine,!a) ,"a,","r"))
for !k = 2 to !k_nearest+1
knearest_matrix(!a,sorted_ranks_{!a}(!k))=1
next
d sorted_ranks_{!a}
next

matrix(@rows(distance_haversine),@rows(distance_haversine)) rwd_matrix = 0 'Radial Distance Weights.
matrix(@rows(distance_haversine),@rows(distance_haversine)) dpdw_matrix = 0 ' Double-Power Distance Weights.
matrix(@rows(distance_haversine),@rows(distance_haversine)) pwd_matrix = 0 'Power Distance Weights.
matrix(@rows(distance_haversine),@rows(distance_haversine)) ewd_matrix = 0 'Exponential Distance Weights
for !a = 1 to @rows(distance_haversine)
for !b = !a to @rows(distance_haversine)
if !a<>!b then
if distance_haversine(!a,!b)<!dpd_max then
dpdw_matrix(!a,!b)=(1-(distance_haversine(!a,!b)/!dpd_max)^{!dpd_weight})^{!dpd_weight}
dpdw_matrix(!b,!a)=dpdw_matrix(!a,!b)
endif
if distance_haversine(!a,!b)<!rwd_max then
rwd_matrix(!a,!b) = 1
rwd_matrix(!b,!a) = 1
endif
if distance_haversine(!a,!b)<>0 then
pwd_matrix(!a,!b) = distance_haversine(!a,!b)^(-{!pdw_weight})
pwd_matrix(!b,!a) = pwd_matrix(!a,!b)
ewd_matrix(!a,!b) = @exp(-{!epw_weight}*distance_haversine(!a,!b))
ewd_matrix(!b,!a) = ewd_matrix(!a,!b)
endif
endif
next
next

If there are any questions or requests, please don't hesitate to ask.

Charlie
Last edited by CharlieEVIEWS on Tue Feb 24, 2015 7:03 am, edited 1 time in total.

Did you use forum search?
Posts: 1518
Joined: Thu Nov 20, 2008 12:04 pm

Re: Weight Matrices from Distance Matrix

Very intuitive and straightforward. Thanks for sharing.

Amber
Posts: 31
Joined: Wed Aug 03, 2011 4:35 am

Re: Weight Matrices from Distance Matrix

Dear @CharlieEVIEWS,

Thank you for sharing, this is very useful. Are you happen to know how to implement the spatial autoregressive or spatial error model in Eviews?

Thanks!

Amber

CharlieEVIEWS
Posts: 202
Joined: Tue Jul 17, 2012 9:47 am

Re: Weight Matrices from Distance Matrix

A while back I was building add-ins to estimate these models in EViews using James LeSages matlab toolbox as a guide, but I remember hitting a barrier somewhere and forget exactly what it was. Possibly to do with a matrix decomposition function that EViews didnt provide off the shelf at the time: one that I couldn't quickly figure out how to program efficiently and moved on to something else...

I'll revisit this when I have a bit more time though - perhaps in the next few weeks - thanks for reminding me!

Charlie