我在具有 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"
希望有人可以帮助我理解这一点。
谢谢,
戴安娜