我正试图找出一种方法来计算R中的斜率和截距,我不必使用lm()
。我不想使用lm()
的原因是它计算的参数比我的目的要多得多,因此比我的方法需要更长的时间。这可以在这里说明:
## Data
set.seed(10)
x <- seq(1,1000000,by=0.15)
y <- rnorm(length(x))
## Using lm()
## Time it
start <- Sys.time()
lmResult <- lm(y ~ x)
a_lm = as.numeric(coef(lmResult)["x"])
Sys.time()-start
在我的机器上大约需要10秒钟。如果我通过手动计算这样的平方和来计算斜率(a_hand
),我意识到节省了大量时间 - 大约50次:
## By hand
## Time it
start <- Sys.time()
sxx = sum(x^2)
sxy = sum(x*y)
sy = sum(y)
sx = sum(x)
n = length(x)
a_hand = (n*sxy-sy*sx)/(n*sxx-sx*sx)
Sys.time()-start
然而,我想知道是否有人可以推荐一种方式来实现更多的时间节省。具体来说,我想知道在基数R中是否存在较轻的权重函数,我可以使用它来计算系数而不计算lm()
计算的所有其他参数。我发现了什么,所以答案可能就是不。