【问题标题】:plotting loess with standard errors in R causes integer overflow在 R 中用标准误差绘制黄土会导致整数溢出
【发布时间】:2012-10-29 02:37:37
【问题描述】:

我正在尝试在 R 中将 predictloess 对象一起使用。有 112406 个观察值。在stats:::predLoess 中有一个特定的行,它试图将N*M1N=M1=112406 相乘。这会导致整数过低,并且函数会爆炸。执行此操作的代码行如下(从predLoess 源复制):

L <- .C(R_loess_ise, as.double(y), as.double(x), as.double(x.evaluate[inside, 
]), as.double(weights), as.double(span), as.integer(degree), 
as.integer(nonparametric), as.integer(order.drop.sqr), as.integer(sum.drop.sqr), 
as.double(span * cell), as.integer(D), as.integer(N), as.integer(M1), 
double(M1), L = double(N * M1))$L

有没有人解决这个问题或找到解决这个问题的方法?我正在使用 R 2.13。这个论坛的名字很适合这个问题。

【问题讨论】:

  • 如果你能破解代码,你能把那一段改成L = double(as.double(N)*M1)吗?
  • R 2.13 已经过时了。快速浏览新闻栏目可以看到后续版本中对loess()predict.loess 的改进。尝试更新到 R 2.15.2 并查看问题是否仍然存在
  • 不幸的是,我在集群上运行 R,在这件事上没有太多选择。我可能会尝试在本地复制此数据集并进行绘图,因为它太小了
  • 好吧,即使您无法运行新版本等,您也可以将predLoess (dump() 的代码写入文件,编辑,将名称更改为@987654335 @ 避免混淆,source() ...(快速浏览表明问题仍然存在于 R-devel 中)
  • 我正在运行 r-devel,所以我只是看了一眼文件的源代码,发现 L=double(N*M1) 仍然存在,并且使用 N=M=112406 测试此语句仍然会导致溢出。

标签: r double stack-overflow loess


【解决方案1】:

听起来您正在尝试对所有 N=112406 观察结果进行预测。首先,你真的需要这样做吗?例如,如果您需要图形输出,那么在数据范围内的小网格上进行预测会更快。

如果您确实需要 112406 个预测,您可以将数据拆分为子集(例如每个子集的大小为 1000)并独立获取每个子集的预测。这样可以避免在predLoess 内部形成一个巨大的矩阵。

【讨论】:

  • 您能否详细说明您的第一点?您是否建议通过expand.grid 形成newdata 并在其上运行预测?
  • @Alex 是的,类似的。我假设你的模型没有太多维度,所以expand.grid 无论如何都不会产生巨大的输出。
猜你喜欢
  • 2012-09-23
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多