Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Generating Moran Scatterplot and Lisa Cluster Map

    Dear Statlist,

    I'm currently following the useful presentation of Maurizio Pisati, titled "Exploratory spatial data analysis using Stata". I have generated my measures of local spatial autocorrelation, and would now like to plot them on a scatterplot and map them. However, I'm running into some issues when trying to generate a scatterplot. As the presentation states;
    We use Stata command genmsp { a simple wrapper to spatlsa
    (source code in Appendix) { to generate the variables required for
    drawing the Moran scatterplot and the corresponding cluster map
    (Anselin 1995)
    I have tried to following the code which is outlined but I'm not sure if my commands are correct

    Code:
    *Setting the matrix
    spatwmat using leamatrix.dta, name(W) standardize
    *Testing for spatial autocorrelation
    spatgsa count pop19p unemploymentrate higherpropsp, w(W) moran geary
    *Testing for local spatial autocorrealtion
    spatlsa count, w(W) moran id(geogdesc) sort
    *Generating the scatterplot
    program genmsp, sortpreserve
    version 12.1
    syntax varname, Weights(name) [Pvalue(real 0.05)]
    unab Y : `varlist'
    tempname W
    matrix `W' = `weights'
    tempvar Z
    qui summarize `Y'
    qui generate `Z' = (`Y' - r(mean)) / sqrt( r(Var) * ( (r(N)-1) / r(N) ) )
    qui cap drop std_`Y'
    qui generate std_`Y' = `Z'
    tempname z Wz
    qui mkmat `Z', matrix(`z')
    matrix `Wz' = `W'*`z'
    matrix colnames `Wz' = Wstd_`Y'
    qui cap drop Wstd_`Y'
    qui svmat `Wz', names(col)
    qui spatlsa `Y', w(`W') moran
    tempname M
    matrix `M' = r(Moran)
    matrix colnames `M' = __c1 __c2 __c3 zval_`Y' pval_`Y'
    qui cap drop __c1 __c2 __c3
    qui cap drop zval_`Y'
    qui cap drop pval_`Y'
    qui svmat `M', names(col)
    qui cap drop __c1 __c2 __c3
    qui cap drop msp_`Y'
    qui generate msp_`Y' = .
    qui replace msp_`Y' = 1 if std_`Y'<0 & Wstd_`Y'<0 & pval_`Y'<`pvalue'
    qui replace msp_`Y' = 2 if std_`Y'<0 & Wstd_`Y'>0 & pval_`Y'<`pvalue'
    qui replace msp_`Y' = 3 if std_`Y'>0 & Wstd_`Y'<0 & pval_`Y'<`pvalue'
    qui replace msp_`Y' = 4 if std_`Y'>0 & Wstd_`Y'>0 & pval_`Y'<`pvalue'
    lab def __msp 1 "Low-Low" 2 "Low-High" 3 "High-Low" 4 "High-High", modify
    lab val msp_`Y' __msp
    end
    exit
    graph twoway(scatter Wstd_Y std_Y
    if pval_Y >=0.05,
    msymbol(i) mlabel(name) mlabsize(*0.6) mlabpos(c))
    (scatter Wstd_Y std_Y
    if pval_Y < 0.05,
    msymbol(i) mlabel(name) mlabsize(*0.6) mlabpos(c)
    mlabcol(red))
    (lfit Wstd_Y std_Y),
    yline(0, lpatttern(--)) xline(0, lpattern(--))
    xlabel(-2(1)4, labsize(*0.8)) xline(0, lpattern(--))
    ylabel(-2(1)3, angle(0) labsize(*0.8))
    ytitle("{it:Wz}") legend(off) scheme(s1color)
    MY variable is count and the weight matrix is called W.

    I wonder should the above section be amended to;

    Code:
    syntax count, Weights(W) [Pvalue(real 0.05)]
    unab Y : `count'
    tempname W
    matrix `W' = `W'
    tempvar Z
    Any help would be appreciated

    Sean
    Last edited by Sean O'Connor; 08 Apr 2016, 04:56.

  • #2
    Dear Sean,

    I don't think we need to modify anything in the source code. Try to run the code as provided in the ppt file, then type "genmsp count, w(W)".
    Hope this helps.

    Jungseok



    Comment

    Working...
    X