1

我在具有 64 位操作系统和 7.8 GB RAM 的 PC 上使用 spdep 包的 errorsarlm() 函数。我的管理员分配的配额是 12 GB。

我的 errorsarlm() 的输入是:

1) 一个非对称权重矩阵,从 .gwt 转换而来(通过 nb2listw 函数;1.7 mb)。对于 85684 个区域(观察次数),它是 ak=4 最近邻矩阵:

Characteristics of weights list object:
Neighbour list object:
Number of regions: 85684
Number of nonzero links: 342736
Percentage nonzero weights: 0.004668316
Average number of links: 4
Non-symmetric neighbours list
Link number distribution:
    4
85684
Weights style: W
Weights constants summary:
      n         nn    S0       S1       S2
W 85684 7341747856 85684 34664.44 377277.6
Characteristics of weights list object:

2) 一个 246.3 mb 的 CSV 数据集,我在 errorsarlm() 模型中使用了 80 个变量。每个变量有 85684 个观测值。

当我基于 80 个变量运行简单线性回归 (lm) 时,我没有任何问题。但是,当我使用默认参数运行 errorsalm 模型时,我会立即收到以下消息:

'Error in matrix(0, nrow = n, ncol = n) : too many elements specified'

traceback() 告诉我:

6: matrix(0, nrow = n, ncol = n)
5: listw2mat(listw)
4: eigenw(get("listw", envir = env))
3: eigen_setup(env, which = which)
2: jacobianSetup(method, env, con, pre_eig = con$pre_eig, trs = trs, 
       interval = interval)
1: errorsarlm(Lnp_N ~ Lnlivings_ + Yearofcon_ + Garden + Lnkirche_N + 
       Station_N + Bus_N + LnschuleA_ + Lnind200_N + Dem_N + Slope_N + 
       Aspect_N + Income_N + InhaHa_N + Lnlake_N + Lnriver_N + Riversize5 + 
       Riversize6 + Riversize7 + Riversize8 + Riversize9 + Riversize1 + 
       Greensp_N + Lnpark_N + Lnhighw_N + Lnbadi_N + LakeNat + LakeAlt_N + 
       LakeArea_N + Zh + Be + Lu + Ur + Sz + Ow + Nw + Gl + Zg + 
       Fr + So + Bs + Bl + Sh + Ar + Ai + Sg + Gr + Ag + Ti + Vd + 
       Vs + Ne + Ju + Tg + Q052 + Q053 + Q054 + Q061 + Q062 + Q063 + 
       Q064 + Q071 + Q072 + Q073 + Q074 + Q081 + Q082 + Q083 + Q084 + 
       Q091 + Q092 + Q093 + Q094 + Q101 + Q102 + Q103 + Q104, heddata, 
       w4n)

使用矩阵 nb 对象的 sum(card()) 进行矩阵密度检查,该对象是从带有 read.gwt2nb 的 .gwt 转换而来的,它告诉我:

[1] 342736

由于错误消息的立即出现,内存使用量不会增加。是否有某种我已经超过的 spdep 允许的最大矩阵大小?还是有不同的解释?

当我在我的errorsarlm()中包含method="LU"和时,模型运行良好并给出结果。method "MC"

希望有人可以帮助我理解这一点。

谢谢,

戴安娜

4

0 回答 0