这是我进行重采样和重塑的for循环版本,
B <- 999
n <- nrow(butterfly)
estMat <- matrix(NA, B+1, 2)
estMat[B+1,] <- model$coef
for (i in 1:B) {
resample <- butterfly[sample(1:n, n, replace = TRUE),]
re.model <- lm(Hk ~ inv.alt, resample)
estMat[i,] <- re.model$coef
}
我试图避免 for 循环,
B <- 999
n <- nrow(butterfly)
resample <- replicate(B, butterfly[sample(1:n, replace = TRUE),], simplify = FALSE)
re.model <- lapply(resample, lm, formula = Hk ~ inv.alt)
re.model.coef <- sapply(re.model,coef)
estMat <- cbind(re.model.coef, model$coef)
虽然有效,但并未提高效率。我可以进行矢量化吗?
抱歉,对StackOverflow不太熟悉。这是数据集 butterfly 。
colony alt precip max.temp min.temp Hk
pd+ss 0.5 58 97 16 98
sb 0.8 20 92 32 36
wsb 0.57 28 98 26 72
jrc+jrh 0.55 28 98 26 67
sj 0.38 15 99 28 82
cr 0.93 21 99 28 72
mi 0.48 24 101 27 65
uo+lo 0.63 10 101 27 1
dp 1.5 19 99 23 40
pz 1.75 22 101 27 39
mc 2 58 100 18 9
hh 4.2 36 95 13 19
if 2.5 34 102 16 42
af 2 21 105 20 37
sl 6.5 40 83 0 16
gh 7.85 42 84 5 4
ep 8.95 57 79 -7 1
gl 10.5 50 81 -12 4
答案 0 :(得分:0)
(假设butterfly$inv.alt <- 1/butterfly$alt
)
由于resample
不是重新采样的data.frame的列表,您可以通过以下方式获得错误:
resample <- replicate(B, butterfly[sample(1:n, replace = TRUE),], simplify = FALSE)
以下应能工作:
re.model <- lapply(resample, lm, formula = Hk ~ inv.alt)
要从模型列表中提取系数,可以使用re.model$coef
。正确的系数路径为:re.model[[1]]$coef
,re.model[[2]]$coef
,...。您可以使用以下代码来获取所有系数:
re.model.coef <- sapply(re.model, coef)
然后您可以将其与观察到的系数结合起来
estMat <- cbind(re.model.coef, model$coef)
实际上,您可以将它们全部放入replicate
:
re.model.coef <- replicate(B, {
bf.rs <- butterfly[sample(1:n, replace = TRUE),]
coef(lm(formula = Hk ~ inv.alt, data = bf.rs))
})
estMat <- cbind(re.model.coef, model$coef)