r语言 - 使用lm.circular()时的内存问题



我正在尝试使用循环包在R中运行循环回归。我的数据集有点大,大约有85000行和6个变量。当我尝试运行模型时,我得到一条错误消息:"错误:无法分配大小为53.3 Gb的矢量。"我更像是一个统计学家,而不是一个程序员,所以我不知道如何解决这个问题,除了看起来很奇怪,它抛出了这么大的内存分配,因为我的数据集不是那么大。我在下面附上了一个虚构的数据集和代码。谢谢你。

library(circular)
set.seed(12)
n = 80000
df <- data.frame(y = rnorm(n,2,.2),
x1 = rnorm(n,100,2),
x2 = rnorm(n,0,1),
x3 = rnorm(n,9,.2),
x4 = rnorm(n,0,1),
x5 = rnorm(n,1,.1))
y <- circular(df$y, type = "angles", units = "radians")
x <- model.matrix(y ~., data = df)
m1 <- lm.circular(y = y, x = x, type = "c-l", init = c(1,.01,.5,.5,.5,.5))

该实现尝试使用

设置一些大小为n x n的对角矩阵。
A <- diag(k * A1(k), nrow = n)
g.p <- diag(apply(x, 1, function(row, betaPrev) 2/(1 + (t(betaPrev) %*% 
row)^2), betaPrev = betaPrev), nrow = n)

(在circular:::LmCircularclRad中)不使用任何稀疏矩阵技巧。对于您的示例,这些矩阵每个将占用50 GB的内存,并且分配失败。

我不认为你能做什么来避免这种情况,除了建议一个更有效的方法来执行所需的计算。通常使用对角矩阵的线性代数可以用更少的内存使用来完成,但是您必须仔细查看这段代码,看看这里是否存在这种情况。

最新更新