楼主: dongjinchi
1111 2

[mata问题求助] max(W)报错问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

82%

还不是VIP/贵宾

-

威望
0
论坛币
980 个
通用积分
10.3067
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
136 点
帖子
5
精华
0
在线时间
72 小时
注册时间
2022-11-1
最后登录
2025-1-26

楼主
dongjinchi 学生认证  发表于 2024-6-25 20:55:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我使用如下代码:
encode Name, gen(name)
spset name, coord(latitude longitude )
spset, modify  coordsys(latlong)

spmat idistance W longitude latitude,id(name) replace
spmat getmatrix W mataW
spmat eigenvalues W
spmat getmatrix W, eig(lambda)

mata:
        mataW_n = mataW/max(lambda)
end


但是总会报错:
  mataW_n = mataW/max(lambda)
                minmax():  3253  nonreal found where real required
                   max():     -  function returned error
                 <istmt>:     -  function returned error
(0 lines skipped)。


似乎是max(lambda)出现了问题,但是我查了mata的help文件有max()函数,也可应用于矩阵。
我即使使用mata的eigensystem()函数得到的特征向量L后,使用max(L)也依然会出现这个问题   

求各位大神如何解决这个问题。

万分感谢~!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:max Eigenvalues eigenvalue longitude function stata mata 特征向量

沙发
赵安豆 发表于 2024-6-25 21:05:28
你的代码中出现的错误可能是因为`lambda`矩阵(或向量)中包含非实数元素(如复数或者缺失值),而`max()`函数只能处理实数值。在计量空间自相关和地理加权回归等分析中,如果数据点之间存在复杂的距离或权重关系,这可能会发生。

为了解决这个问题,你可以先检查并确保`lambda`中的所有元素都是实数。可以使用以下步骤来诊断和修复:

1. **检查`lambda`的元素**:
   在Mata环境中打印`lambda`矩阵的所有元素,以查看是否存在非实数值或缺失值。
   
   ```mata
   mata:
      mataW_n = mataW/max(lambda)
      print lambda
   end
   ```

2. **处理非实数和缺失值**:
   如果发现`lambda`中存在非实数值或缺失值,你需要先将它们处理成有效(实数)值。你可以选择用0、1或其他适当值替换这些元素。

   ```mata
   mata:
      lambda = J(rows(lambda), cols(lambda), .) :*(lambda ==.)
      lambda = real(lambda) :+ imag(lambda)
      mataW_n = mataW/max(lambda)
   end
   ```
   
   这里的`J()`函数用于创建一个与`lambda`大小相同的矩阵,其中所有元素都是`.(Stata中的缺失值表示)`。然后将这个矩阵和`lambda`逐元素相乘,结果中非实数值的位置将被替换为`.(缺失值)。`随后,我们通过`real()`和`imag()`函数分别获取`lambda`的实部和虚部,并加在一起,这样可以确保所有元素都是实数。

3. **避免除以0**:
   在计算最大值时,如果`max(lambda)`恰好为0,那么你将尝试执行一个除法运算,这会抛出错误。在实际中,权重矩阵的特征值不应该正好是0(除非有特殊情况),但是作为预防措施,你可以添加一个小的正值(例如1e-8)以避免这种极端情况。

   ```mata
   mata:
      lambda = J(rows(lambda), cols(lambda), .) :*(lambda ==.)
      lambda = real(lambda) :+ imag(lambda)
      real_max_lambda = max(lambda) + 1e-8 // 小的正值以避免除以0的情况
      mataW_n = mataW/real_max_lambda
   end
   ```

通过上述步骤,你可以解决`max()`函数在处理非实数或缺失值时可能出现的问题。希望这能帮助你解决问题!如果还有其他疑问,请随时提问。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



藤椅
dongjinchi 学生认证  发表于 2024-6-26 00:50:23
lambda中没有复数、缺失值且非零

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 17:47