R 最快二元回归斜率系数

问题描述 投票:0回答:1

我尝试了一些线性回归,虽然标准的回归都很好(例如,

lm.fit
真的非常快),
https://www.rdocumentation.org/packages/RcppEigen/versions中的
fastLM /0.3.4.0.2/topics/fastLm 得到了蛋糕。 这确实快得惊人。 谢谢 Doug、Dirk、Romain 和 Yixuan。

唉,它的文档中有一条注释,二元回归的特殊形式可以更快地完成。 如果我只需要斜率,我应该使用 R 中的原生

cov(x,y)/var(x)
,还是应该在 Rcpp 中编写它,或者......?

r covariance
1个回答
0
投票

似乎

.lm.fit
在这种情况下获胜,尽管这可能取决于你的数据集的大小......我不知道你是否可以用 Rcpp 式的东西做得更好 - 如果你想做很多真正的事情小回归各种函数调用开销将变得重要......(
fastR
有一个快速协方差计算器,但它表示它在高维情况下具有竞争力/旨在用于高维情况...)

simfun <- function(n = 100) {
   data.frame(y = rnorm(n), x = rnorm(n))
}

set.seed(101)
dd <- simfun()

mylm <- function(x, y) { v <- var(cbind(x,y)); v[2,1]/v[1,1] }
mylm2  <- function(x, y) { cov(x,y) / var(x) }

library(RcppEigen)

with(dd, 
bench::mark(
   lm.fit(cbind(1, x), y)$coefficients[2],
   .lm.fit(cbind(1, x), y)$coefficients[2],
   fastLmPure(cbind(1, x), y)$coefficients[2],
   mylm(x, y),
   mylm2(x, y),
  check = FALSE 
)
)
  expression     min  median `itr/sec` mem_alloc `gc/sec` n_itr  n_gc total_time
  <bch:expr> <bch:t> <bch:t>     <dbl> <bch:byt>    <dbl> <int> <dbl>   <bch:tm>
1 lm.fit(cb… 24.68µs 26.45µs    36555.    7.34KB     14.6  9996     4    273.4ms
2 .lm.fit(c…  5.86µs  6.67µs   144591.    4.88KB     14.5  9999     1     69.2ms
3 fastLmPur… 12.85µs 13.99µs    70384.    3.27KB     14.1  9998     2      142ms
4 mylm(x, y) 10.05µs 11.16µs    86832.    1.61KB     26.1  9997     3    115.1ms
5 mylm2(x, … 22.68µs 24.32µs    40539.        0B     20.3  9995     5    246.6ms
# ℹ 4 more variables: result <list>, memory <list>, time <list>, gc <list>
© www.soinside.com 2019 - 2024. All rights reserved.