微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行超过 10 K 的回归并存储系数

如何解决运行超过 10 K 的回归并存储系数

八年来,我拥有 73000 个社区的人口。我需要为每个提取线性趋势的斜率。所以我需要估计 73000 次 2021-08-08 00:00:00 模型。并将它们的斜率 (b) 存储在列表中。我有专门针对此类问题的 R 包吗?

解决方法

假设您将每个邻域的邻域数据作为列表的单独元素,则可以使用 sapply()。这是假设您想在每个社区运行完全不相关的回归。这是一个两个街区的例子:

nbr_list <- list(n1 = c(1,4,3,5,6),n2 = c(4,6,7,9,9))

get_slope <- function(y){
  slopeOut <- lm(y~I(1:8))$coefficients[2]
  slopeOut }

sapply(nbr_list,FUN=get_slope)
#> n1.I(1:8) n2.I(1:8) 
#> 0.5238095 0.7142857

reprex package (v0.3.0) 于 2021 年 2 月 23 日创建

,

tidyverse 的解决方案是使用包 dflibrary(dplyr) df %>% group_by(Chain,Product) %>% mutate(I = as.integer(row_number() == match(TRUE,Sale > 0))) -> result result 按组运行许多回归并将它们存储到列表列中,然后提取 beta。主要优点是您可以拥有更复杂的模型,并且整个回归输出都存储在同一个数据帧中,您只需要在之后检索它们。最好保留所有输出以备将来使用(例如,如果您只存储斜率并且接下来需要截距,则需要再次重新运行所有回归)。

嵌套解决方案如下:

  1. 按社区对您的数据进行分组。
  2. 将这些组嵌套到列表列中。
  3. 创建一个模型列,将 lm 函数映射到数据列表列。
  4. 取消嵌套模型列表列。
  5. 将其过滤为想要的预测系数。
broom

或者更简单,没有嵌套:

purrr
,

我本来打算告诉您使用 lme4::lmList(),但是如果您设置正确,普通的旧式 lm快得多。

样本数据

nn <- 73000
ny <- 8
set.seed(101)
dd <- data.frame(
    nbr=rep(1:nn,each=ny),yr=rep(1:ny,nn),y=rnorm(nn*ny)
)

使用 lm()

Y <- matrix(dd$y,nrow=8)  ## set up matrix of response variables
yr <- dd$yr[1:8]          ## predictor variables
system.time(mm2 <- lm(Y~yr))
cc2 <- coef(mm2)
head(cc2["yr",])
## [1]  0.088903516 -0.138058182  0.006353931  0.106540632 -0.021719822
## [6] -0.020777392

这或多或少是瞬时的(在快速机器上

使用 lme4::lmList()

这是我的第一个想法,可能更容易理解(并且会更普遍地工作,例如,如果您对每个组有不同的预测变量),但速度要慢 100-1000 倍。

library(lme4)
system.time(mm <- lmList(y~yr|nbr,data=dd)) ## fit models,34 seconds
system.time(cc <- coef(mm))  ## extract coefs,43 seconds
head(cc$yr)
## [1]  0.088903516 -0.138058182  0.006353931  0.106540632 -0.021719822
## [6] -0.020777392

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?