简介:这份文档面向需要开展空间自相关分析的 Stata 用户与相关专业学生,围绕莫兰指数(Moran's I)的计算流程提供一套可直接参照的操作指引,适合在区域经济、地理与社会经济数据研究中快速完成空间权重处理与指标测算。压缩包共1个 docx 文件,约14KB,篇幅精简,内容以命令与注释结合的方式组织,便于边看边在软件中复现。文档覆盖程序包安装、权重文件读取与命名、数据载入及权重标准化,并进一步说明全局莫兰指数、局部莫兰指数与莫兰散点图的实现方式,其中包含多变量批量计算和带汉字标识散点图的处理思路,可帮助读者理解结果含义并排查常见路径、变量名与权重设置问题。已有1971人学习下载,适合具备 Stata 基础、希望系统掌握空间自相关分析流程的读者参考。
1. 莫兰指数安装现场:findit spmat 装完仍报错的起点
某开发者把权重文件W.dta和数据文件data.dta放在D:/program,打开 Stata 就敲spatgsa rho2015, weights(W) moran,结果第一行就报command spatgsa is unrecognized。他回头执行findit spmat装了包,以为莫兰指数就能算,接着又卡在W not found、weights() not allowed、spmat summarize W, links输出全零。Stata 计算莫兰指数不是装一个包就结束,而是findit spmat、权重文件整理、spatwmat标准化、spatgsa/spatlsa调用四段路要接上。装不好时,命令能跑但权重错位,Moran's I 看着有数,解释却完全反了。这篇适合刚拿到W.dta和data.dta、准备在 Stata 里复现全局与局部莫兰指数的人,也适合被weight和weights单复数坑过的熟手。
2. Stata 计算莫兰指数的环境清单:findit spmat 与四个命令包
2.1 Stata 本体与工作目录:先固定路径再谈安装
Stata 计算莫兰指数的第一步不是急着装包,而是把工作目录和文件路径固定下来。项目正文里权重文件是D:\program\W.dta,数据文件是D:\program\data.dta,这两个文件必须在同一个可读目录里,否则后面spatwmat using会报找不到文件。Stata 对 Windows 路径的斜杠方向不敏感,但中文目录、空格目录和过长路径容易在 do-file 里翻车,我一般统一写成正斜杠D:/program/W.dta,do-file 开头先cd到工作目录。这样后面所有use和spatwmat using都能少写一长串盘符,也方便把整套命令迁移到另一台机器。
// 查看当前工作目录 pwd // 切换到权重文件和数据文件所在目录 cd "D:/program" // 列出目录下的 dta 文件,确认 W.dta 和 data.dta 都在 dir *.dta这段代码的逻辑是先把 Stata 的当前目录切到资源所在位置,再用dir *.dta做一次文件存在性检查。pwd不带参数,只回显当前路径;cd后面必须跟完整目录,路径里有空格时要用英文双引号包住;dir *.dta的通配符只列出 dta 文件,避免把无关文件混进视线。参数上没有什么玄学,关键是路径要和你实际存放位置一致,不要照抄D:/program却忘了改成自己的目录。常见做法是把这三行放在 do-file 最前面,后面所有命令都用相对路径,例如use "W.dta", clear,这样换机器时只改一行cd。
环境清单里还要确认 Stata 能正常识别命令包。项目正文只写了findit spmat,但莫兰指数这条链路里还会用到spatwmat、spatgsa、spatlsa,它们不一定随spmat一次装全。装完后不要凭感觉,直接用which逐个查。which返回命令路径说明已安装,返回command not found就继续findit对应命令。这个检查比反复重启 Stata 更直接,也是我装完任何 Stata 外部命令后的固定动作。
// 逐个确认莫兰指数相关命令是否已经装好 which spmat which spatwmat which spatgsa which spatlsawhich的参数就是命令名,不带选项。逻辑说明:spmat负责把 dta 里的变量整理成空间权重对象,spatwmat负责从权重文件读入并标准化权重,spatgsa算全局莫兰指数,spatlsa算局部莫兰指数和散点图。四个命令缺一个,后面就会在对应步骤断掉。参数上不用改,但要注意命令名大小写,Stata 命令一般小写;如果which spatgsa提示找不到,不要继续硬跑spatgsa,先回findit spatgsa安装。安装时保持网络可用,安装完成后用which再验一遍,别把“窗口里出现过安装链接”当成装好了。
2.2 findit spmat 找包与安装:命令包不是装一次就万事大吉
项目正文第一步写的是findit spmat,这行命令的作用是让 Stata 在本地和可访问的资源里搜索spmat相关包。执行后结果窗口会出现若干条目,常见做法是点进标题里带spmat的条目,按提示点击安装链接。这里不要只看第一屏就关掉,安装完成后回命令窗口敲which spmat,确认命令真的落地。findit本身不安装,它只负责找;真正的安装动作在结果窗口的链接里。装完spmat后再用同样方式补spatwmat、spatgsa、spatlsa,不要假设它们会自动跟着来。
// 搜索 spmat 程序包,按结果窗口提示安装 findit spmat // 搜索全局和局部莫兰指数相关命令 findit spatwmat findit spatgsa findit spatlsa这段代码没有复杂参数,findit后面跟关键词即可。逻辑上先找spmat,再找另外三个命令,是因为项目正文的安装入口是findit spmat,但实际计算链路需要后三个命令。参数说明:findit支持模糊搜索,关键词不要加引号;如果搜索结果太多,可以在结果窗口里按标题筛选。安装时注意看结果窗口的提示,有些包会提示依赖项,按顺序装完再重启 Stata。常见坑是只装了spmat就去跑spatgsa,报command not found后又以为 Stata 版本不对,其实只是包没装全。
安装完成后,建议把命令包检查写进 do-file 开头,作为一次性的环境自检。这样以后换电脑或重装 Stata,跑一遍就知道缺什么。下面这段不是安装命令,而是安装后的确认清单,返回结果里每个命令都有路径才算齐。
// 安装后的命令自检:四个命令都要有返回路径 which spmat which spatwmat which spatgsa which spatlsa逻辑说明:which查的是命令解析路径,不是版本号,所以不要拿它判断版本新旧。参数上无需额外选项。如果某个命令返回command not found,回到上一步findit对应命令重新安装;如果返回的是built-in或某个 ado 文件路径,说明命令可用。安装过程中不要同时开多个 Stata 实例改同一份 ado 目录,容易留下半装状态;装完重启一次 Stata,再跑which,能少掉很多“明明装了却找不到”的黑匣子问题。
2.3 权重文件 W.dta 和数据 data.dta 的结构检查
装完命令只是环境就绪,真正决定莫兰指数能不能算对的是两个 dta 文件的结构。W.dta是空间权重文件,data.dta是分析数据文件,项目正文后面用spmat dta W var*, replace和spatwmat using D:\program\W.dta, name(W) standardize分别处理它们。安装前先分别打开看一眼,确认变量名、行数和 ID 能对上。常见的翻车不是命令写错,而是权重文件里的变量前缀不是var,或者数据文件里的rho2015实际叫Rho2015,命令跑下去才报变量不存在。先describe再list in 1/5,比事后猜省时间。
// 打开权重文件,检查变量名和前三行 use "D:/program/W.dta", clear describe list in 1/5逻辑说明:use把权重文件读进内存,clear清掉之前的数据,避免旧数据干扰;describe看变量名、存储类型和标签;list in 1/5看前五行实际值。参数上clear很重要,尤其是你刚打开过data.dta又忘了清内存时,权重文件会读不进来。检查重点:权重变量是否以var开头,行数是否与数据文件一致,是否存在全零行。如果变量名不是var前缀,后面spmat dta W var*就要改成实际前缀,不能照抄。
// 打开数据文件,检查 rho 变量和 DMUname 是否存在 use "D:/program/data.dta", clear describe list in 1/5 count逻辑说明:describe确认rho2011到rho2015这些变量名,list看前五行,count看总行数。参数上count不带条件时返回观测数,这个数和权重文件的行数要能对上。常见做法是先把两个文件的行数记下来,如果data.dta有 30 行而W.dta只有 29 行,后面莫兰指数会错位,散点图也会缺一个点。ID 对齐也要看,项目正文后面用id(DMUname)做汉字标识,所以data.dta里要有DMUname,权重文件里的顺序也要能对应。对不上时先别跑spatgsa,先把 ID 和行顺序整理好。
3. 权重文件配置:spmat dta 到 spatwmat standardize 的落地顺序
3.1 打开权重文件:use W.dta 的路径与 clear
第三步之前的权重配置从use "D:/program/W.dta", clear开始。项目正文写的是use "D:\program\W.dta", clear,在 Stata 里反斜杠通常也能识别,但在 do-file 里容易和转义符混在一起,我一般改成正斜杠。clear不能省,因为上一步可能刚打开过数据文件,内存里还有旧数据,直接use会报no; data in memory would be lost。如果你习惯在同一个 do-file 里来回切换权重文件和数据文件,每次use都带clear,这是最省心的习惯。
// 打开权重文件,清空内存中的旧数据 use "D:/program/W.dta", clear // 确认当前数据集就是权重文件 describe逻辑说明:use读取 dta,clear允许覆盖内存;describe再次确认变量结构。参数上路径必须指向实际权重文件,不要用data.dta代替。常见误用是先把data.dta打开,然后直接spmat dta W var*,结果把数据变量当成权重变量,spmat summarize出来一堆无意义链接。正确顺序是先在W.dta上做权重对象整理,再回到data.dta上读权重并算莫兰指数。这个顺序乱了,后面W not found就会反复出现。
3.2 spmat dta 整理变量前缀:var* 通配和 replace 的取舍
项目正文第二步的核心命令是spmat dta W var*, replace。这条命令把当前数据集里以var开头的变量收进名为W的空间权重对象,replace表示如果内存里已经有同名W对象就覆盖。这里最容易错的是var*这个通配符:它要求权重文件里的变量名确实以var开头,如果你的权重变量叫w1 w2 w3,这行命令会找不到匹配变量,或者只匹配到空集合。执行前先用describe看变量名,前缀不对就改成实际前缀,例如w*,不要硬套原文。
// 将当前权重文件中以 var 开头的变量整理成空间权重对象 W spmat dta W var*, replace // 查看权重对象的基本信息 spmat summarize W, links逻辑说明:spmat dta从当前内存数据集读取变量,W是生成的空间权重对象名,var*是变量前缀通配,replace覆盖同名对象。参数上replace要谨慎:如果你前面已经调好一个W对象,后面又跑一次不同前缀的spmat dta W ... , replace,旧对象会被覆盖。常见做法是先用spmat summarize W, links看链接数,再决定要不要replace。links选项会输出链接统计,重点看非零链接数是否合理;如果links为 0,说明变量前缀选错、权重列全零,或者当前数据集根本不是权重文件。这个检查是后面spatwmat之前的一道闸门,别跳过。
3.3 spmat summarize 检查 links:权重有没有断链
spmat summarize W, links是权重配置里最值得多看一眼的命令。项目正文把它放在spmat dta后面,目的就是确认权重对象W的链接情况。links会给出链接数、非零元素等信息,你可以据此判断权重文件是不是被正确读成矩阵。如果链接数明显小于观测数,或者某些行完全没有链接,后面全局莫兰指数可能仍然能出数,但局部莫兰指数和散点图会暴露问题。我一般会把spmat summarize W, links的输出和count的行数对一下,至少确认权重矩阵不是空的。
// 统计权重 W 的链接信息 spmat summarize W, links // 对照数据文件行数,确认权重矩阵规模 use "D:/program/data.dta", clear count逻辑说明:spmat summarize的第一个参数是权重对象名,links是选项,不是变量。参数上不要把W写成w,Stata 对对象名大小写敏感;也不要在spmat summarize后面加逗号再写links以外的无关选项。常见坑是links输出正常但行数对不上,这通常是权重文件和数据文件的观测顺序不一致,不是命令语法问题。遇到这种情况,先回到两个 dta 文件里检查 ID 和排序,不要急着改spatgsa的变量列表。
3.4 在数据文件里读权重:spatwmat standardize 参数
权重对象整理完,回到数据文件算莫兰指数之前,还要用spatwmat把磁盘上的W.dta读成计算用的权重,并做标准化。项目正文第三步写的是spatwmat using D:\program\W.dta,name(W) standardize。这条命令的using指向权重文件,name(W)指定内存中的权重名,standardize做行标准化。注意它读的是磁盘文件,不是上一步spmat dta生成的对象;如果你在上一步改过变量名但没有把结果写回W.dta,这里读到的仍是原文件。常见做法是确保W.dta就是最终权重文件,再执行这行。
// 打开数据文件 use "D:/program/data.dta", clear // 从磁盘读取权重文件 W.dta,命名为 W,并做行标准化 spatwmat using "D:/program/W.dta", name(W) standardize逻辑说明:use先切换到分析数据,spatwmat using读取权重文件,name(W)让后面的spatgsa和spatlsa用weights(W)或weight(W)调用,standardize对权重矩阵按行标准化。参数上using后面必须跟完整路径或当前目录下的文件名;name(W)的W要和后面命令里的权重名一致;standardize不加也能算,但行标准化后权重解释更直观,散点图也更常用。常见误用是把name(W)写成name(w),后面调用weights(W)就找不到对象。路径里如果含空格,记得用英文双引号包住。
4. 莫兰指数计算配置:spatgsa 全局与 spatlsa 局部的参数取舍
4.1 全局莫兰指数:spatgsa 单变量与批量变量
全局莫兰指数用spatgsa,项目正文第四步写的是spatgsa rho2015, weights(W) moran。这里的rho2015是分析变量,weights(W)是权重选项,moran指定计算 Moran's I。spatgsa的权重选项是复数weights(),不是weight(),这是和局部命令最容易混的地方。默认情况下项目正文提到“此命令默认单尾”,实际输出里重点看 Moran's I、期望值、标准差、z 值和 p 值。单变量跑通后再批量,不要一上来就把 2011 到 2015 全塞进去,否则变量名错一个,整行都报错。
// 计算 rho2015 的全局莫兰指数 spatgsa rho2015, weights(W) moran // 批量计算 2011 至 2015 年的全局莫兰指数 spatgsa rho2011 rho2012 rho2013 rho2014 rho2015, weights(W) moran逻辑说明:spatgsa后面跟一个或多个变量名,逗号后weights(W)指定权重对象,moran指定统计量。参数上变量名必须与data.dta里的实际变量一致,大小写也要一致;weights(W)里的W必须与spatwmat的name(W)对应。批量写法只是把变量名并列,命令结构不变。常见坑是逗号写成中文逗号,或者weights少写 s,Stata 会直接报选项不允许。跑完单变量后先看 p 值是否在合理范围,再跑批量;如果单变量就报variable rho2015 not found,先回describe查变量名,不要怀疑权重。
4.2 局部莫兰指数:spatlsa 的变量选择与权重名
局部莫兰指数用spatlsa,项目正文第五步写的是spatlsa rho2015,weights(W) moran。这里要注意,原文第五步用的是复数weights(W),但第六步散点图用的是单数weight(W)。在常见 Stata 语法里,spatlsa的权重选项通常是单数weight(),spatgsa才是复数weights()。如果你照第五步跑出option weights() not allowed,把weights(W)改成weight(W)即可。这个单复数问题很典型,不是权重对象坏了,也不是 Stata 版本问题,纯粹是选项名没对上。
// 计算 rho2015 的局部莫兰指数 spatlsa rho2015, weight(W) moran逻辑说明:spatlsa的第一个参数是分析变量,weight(W)指定权重对象,moran指定局部 Moran's I。参数上weight是单数,W要与spatwmat的name(W)一致;变量rho2015要在当前数据文件中存在。常见做法是先跑单变量局部指数,确认输出里有每个观测的局部值,再画散点图。如果命令报weights() not allowed,说明你用了全局命令的复数选项;如果报W not found,说明spatwmat还没执行或权重名不一致。局部指数依赖权重对象,顺序不能颠倒。
4.3 莫兰散点图:graph(moran) 与 symbol(id) 的标识
莫兰散点图还是用spatlsa,项目正文第六步写的是spatlsa rho2015 ,weight(W) moran graph (moran) symbol(n)。graph(moran)指定画莫兰散点图,symbol(n)用观测编号作为点符号。带汉字标识的版本是spatlsa rho2015 ,weight(W) moran id(DMUname) graph (moran) symbol(id),其中id(DMUname)用DMUname作为标签,symbol(id)让点符号跟随 ID。画图前确认DMUname是字符变量且没有大量缺失,否则图上会出现空白标签。导出图片用graph export,路径写清楚,replace覆盖旧图。
// 画莫兰散点图,点符号使用观测编号 spatlsa rho2015, weight(W) moran graph(moran) symbol(n) // 带汉字标识的莫兰散点图 spatlsa rho2015, weight(W) moran id(DMUname) graph(moran) symbol(id) // 将当前图形导出为 PNG graph export "D:/program/moran_rho2015.png", replace逻辑说明:graph(moran)是画图选项,symbol(n)和symbol(id)控制点符号,id(DMUname)控制标签变量。参数上graph和括号之间不要多写空格也可以,但graph(moran)里的moran不要拼错;symbol(id)依赖id(DMUname)的标签,两个选项要配套。graph export的replace表示同名文件覆盖,路径必须存在。常见坑是图上标签重叠严重,这时可以先用symbol(n)看整体分布,再用symbol(id)出带汉字的版本;如果中文字体显示异常,检查 Stata 图形字体设置,不要急着改命令。散点图不是装饰,它能看到局部莫兰指数的异常点,跑完全局和局部后用它做一次目视检查很值。
5. 排查与避坑:Stata 莫兰指数命令报错的 5 条血泪记录
5.1 报错 command spatgsa is unrecognized:只装了 spmat
现象:执行findit spmat并安装后,跑spatgsa rho2015, weights(W) moran仍然报command spatgsa is unrecognized。原因:findit spmat只解决spmat相关命令,spatgsa、spatlsa、spatwmat是另外的命令包,不会因为装了spmat就自动齐全。解决:分别用findit spatgsa、findit spatlsa、findit spatwmat搜索安装,装完用which逐个确认。不要只重启 Stata,重启解决不了缺包。
// 缺什么搜什么,装完再用 which 验证 findit spatgsa findit spatlsa findit spatwmat which spatgsa which spatlsa which spatwmat逻辑说明:findit负责搜索,安装动作在结果窗口完成;which负责验证。参数上命令名不要加引号,安装完成后如果which仍找不到,检查 Stata 的 ado 路径是否被改动,或者是否装到了另一个 Stata 版本目录。常见做法是装完一组命令后重启一次 Stata,再跑which,这样能排除缓存影响。
5.2 报错 option weights() not allowed:spatlsa 用了复数
现象:spatlsa rho2015, weights(W) moran报option weights() not allowed,但同样的weights(W)在spatgsa里能跑。原因:全局命令spatgsa用复数weights(),局部命令spatlsa用单数weight(),项目正文第五步和第六步也正好体现了这个差异。解决:局部命令改成weight(W),全局命令保留weights(W)。这不是权重对象的问题,改一个字母就能过。
// 全局莫兰指数:weights 复数 spatgsa rho2015, weights(W) moran // 局部莫兰指数:weight 单数 spatlsa rho2015, weight(W) moran逻辑说明:两条命令的变量和权重名相同,只有选项单复数不同。参数上不要为了省事把全局命令也改成单数,spatgsa不认;也不要把局部命令写成复数,spatlsa不认。常见坑是复制粘贴时只改命令名没改选项,报错后误以为权重矩阵坏了。
5.3 报错 W not found:spatwmat 没跑或名字不一致
现象:spatgsa rho2015, weights(W) moran报W not found或matrix W not found。原因:在跑全局莫兰指数前没有执行spatwmat using ... name(W) standardize,或者name()里的名字和weights()里的名字不一致,比如一个写W一个写w。解决:先打开数据文件,再跑spatwmat,确认输出里出现权重对象W,然后立刻跑spatgsa。不要中间又use另一个文件把内存清掉。
// 先读数据,再读权重,顺序不要反 use "D:/program/data.dta", clear spatwmat using "D:/program/W.dta", name(W) standardize spatgsa rho2015, weights(W) moran逻辑说明:spatwmat把权重对象放进内存,spatgsa才能调用;name(W)和weights(W)必须大小写一致。参数上using指向磁盘上的W.dta,不是data.dta。常见做法是这三行连着跑,不要在中途插入其他use命令。如果仍报W not found,用spatwmat的输出确认对象名,再检查weights()里有没有多空格。
5.4 报错 variable rho2015 not found:变量名或数据文件不对
现象:spatgsa rho2015, weights(W) moran报variable rho2015 not found。原因:当前内存里的数据文件不是data.dta,或者变量名实际是Rho2015、rho_2015、moran2015之类。解决:先describe看变量列表,再用ds rho*或describe rho*模糊查找;确认变量名后改命令。不要用rename硬改,除非你清楚后续批量变量都要跟着改。
// 查看 rho 开头的变量 describe rho* // 确认当前数据文件 describe using "D:/program/data.dta"逻辑说明:describe rho*在当前内存数据集里按通配符查变量;describe using直接看磁盘文件结构,不把数据读进内存。参数上通配符*可以匹配任意后缀,rho*能列出rho2011到rho2015。常见坑是变量名里有空格或大小写不一致,Stata 变量名区分大小写,rho2015和Rho2015不是同一个。改命令前先确认数据文件路径,别在W.dta里找rho2015。
5.5 结果异常或散点图空白:links 异常、行数不一致或权重没标准化
现象:spatgsa能出数,但 Moran's I 明显不合理,或者spatlsa散点图空白、点数量不对。原因:spmat dta W var*的变量前缀选错,spmat summarize W, links输出链接数异常;或者W.dta与data.dta行数不一致,权重和数据错位;也可能是spatwmat忘了standardize。解决:回到权重文件跑spmat summarize W, links,对照data.dta的count;检查两个文件的 ID 顺序;在spatwmat后加standardize重新读权重。
// 检查权重链接 use "D:/program/W.dta", clear spmat dta W var*, replace spmat summarize W, links // 检查数据行数 use "D:/program/data.dta", clear count // 重新读权重并标准化 spatwmat using "D:/program/W.dta", name(W) standardize逻辑说明:前两段分别检查权重链接和数据行数,最后一段重新建立标准化权重。参数上links是spmat summarize的选项,standardize是spatwmat的选项,不要混用。常见做法是先把links输出里的非零链接数和count行数记下来,如果差距很大,先整理权重文件,不要硬跑莫兰指数。权重错位时结果可能看起来“有数”,但解释方向会反,这种坑比报错更难发现。
6. 装完怎么验证:rho2015 从全局到散点图的最小闭环
装完命令包、配好权重后,不要直接批量跑 2011 到 2015。我一般先用一个变量rho2015做最小闭环:全局莫兰指数、局部莫兰指数、莫兰散点图三步都出结果,再扩大变量列表。验证时重点看三处:全局输出的 Moran's I 和 p 值是否合理,局部输出是否有每个观测的局部值,散点图是否有点且标签不空。下面这段顺序可以直接抄,路径按自己的目录改。
// 最小闭环:rho2015 的全局、局部和散点图 use "D:/program/data.dta", clear spatwmat using "D:/program/W.dta", name(W) standardize // 全局莫兰指数 spatgsa rho2015, weights(W) moran // 局部莫兰指数 spatlsa rho2015, weight(W) moran // 莫兰散点图,先看整体点分布 spatlsa rho2015, weight(W) moran graph(moran) symbol(n) // 带汉字标识的散点图 spatlsa rho2015, weight(W) moran id(DMUname) graph(moran) symbol(id)这段代码的逻辑是先建立权重对象,再按全局、局部、散点图的顺序调用。参数上spatgsa用weights(W),spatlsa用weight(W),这是验证时最值得盯的差异;symbol(n)和symbol(id)是两种点符号,先跑symbol(n)看整体,再跑symbol(id)看标签。验证时如果全局能出数、局部报错,优先查单复数;如果局部能出数、散点图空白,查DMUname是否有缺失或图形窗口是否被遮挡。
| 验证点 | 命令 | 看什么 |
|---|---|---|
| 权重对象 | spatwmat using "D:/program/W.dta", name(W) standardize | 是否成功建立W,路径是否指向权重文件 |
| 全局莫兰指数 | spatgsa rho2015, weights(W) moran | Moran's I、z 值、p 值是否合理 |
| 局部莫兰指数 | spatlsa rho2015, weight(W) moran | 是否输出每个观测的局部值,有无缺失 |
| 散点图 | spatlsa rho2015, weight(W) moran graph(moran) symbol(n) | 点是否出现,分布是否明显异常 |
| 汉字标识 | spatlsa rho2015, weight(W) moran id(DMUname) graph(moran) symbol(id) | 标签是否为空、是否重叠严重 |
这张表不用背,验证时按行跑一遍就行。全局和局部都通过后,再把spatgsa rho2011 rho2012 rho2013 rho2014 rho2015, weights(W) moran放进去批量算,最后用graph export "D:/program/moran_rho2015.png", replace把图导出来。从那以后我每次装完 Stata 莫兰指数环境,都强制先跑rho2015这一条最小闭环,再碰批量变量;权重文件换一次、路径改一次,也先走一遍spmat summarize W, links和spatwmat standardize。这套 do-file 顺序和权重检查表我整理在资源包里,需要复现时直接取用。希望帮到你。
本文还有配套的精品资源,点击获取