【发布时间】:2018-03-13 17:59:39
【问题描述】:
我的最终目标是为任意数量的拟合对象计算 zoo(参见下面的函数 pc),例如如下所示的 fit1 和 fit2。
不过,我想知道如何循环 fit 对象?具体来说,如果用户提供了 2 个拟合对象,例如 fit1 和 fit2(下面),如何为每个拟合对象计算 zoo?
library(rstanarm)
data(kidiq)
d <- kidiq
fit1 <- stan_glm(kid_score ~ mom_iq,
data = d,
prior = normal(0, 2.5),
prior_intercept = normal(0, 10),
prior_aux = normal(0, 10))
fit2 <- stan_glm(kid_score ~ mom_iq,
data = d,
prior = normal(0, 2.5),
prior_intercept = normal(0, 10),
prior_aux = cauchy(0, 100))
要对fit 对象进行矢量化或循环的函数:
pc <- function(fit){
y <- rstanarm::get_y(fit)
ypred <- rstanarm::posterior_linpred(fit, transform = TRUE)
if(family(fit)$family == "binomial" && ncol(y) == 2) {
trials <- rowSums(y)
y <- y[, 1]
ypred <- ypred %*% diag(trials)
}
e <- -1 * sweep(ypred, 2, y)
var_ypred <- apply(ypred, 1, var)
var_e <- apply(e, 1, var)
zoo <- var_ypred / (var_ypred + var_e)
return(zoo)
}
【问题讨论】:
-
请注意我理解这个问题;什么不适用于循环或
lapply?
标签: r function for-loop vectorization