刚刚有个小伙伴问了这样的一个问题:
![]()
也就是使用 spatwmat 命令添加 eigenval(E) 选项(用于生成特征值矩阵)之后就报错了。
这个问题的根源在于提供的 13.dta 数据不是一个对称的矩阵,所以根本的解决办法就是检查 13.dta 为什么不是对称的。例如这里的 13.dta 数据是这样的:
![]()
显然不是对称的。
除了把数据替换成对称数据外,我们还可以使用 Stata 对数据进行矫正以使其对称。
* 安装 spatwmat: |
首先读取这个不对称的 13.dta 数据:
use 13.dta, clear |
然后是 mata 的 makesymmetric() 函数进行矫正:
mata: |
其中 st_data() 函数是可以把 dta 数据读取为 mata 的矩阵,st_store() 则是把 mata 的矩阵输出为 dta 数据;., .表示所有行和所有列。
然后把得到的对称数据保存为 14.dta:
save 14.dta, replace |
使用 14.dta 运行最初的代码就不会报错了:
spatwmat using 14.dta, name(W) standardize eigenval(E) |
然后运行 mat list W 和 mat list E 就可以看到运行结果了。
点击这里跳转到 RStata 短书平台获取附件:spatwmat 命令的报错:matrix not symmetric 如何解决?Stata 如何把非对称矩阵转换成对称矩阵?
评论