如何在R中的“lm”型模型中循环“fitted”对象?
我的最终目标是计算任意数量的已安装对象的如何在R中的“lm”型模型中循环“fitted”对象?,r,function,for-loop,vectorization,R,Function,For Loop,Vectorization,我的最终目标是计算任意数量的已安装对象的zoo(请参见下面的函数pc),如下图所示的fit1和fit2 不过,我想知道如何循环fit对象?具体来说,如果用户提供了两个安装对象,例如fit1和fit2(以下),如何计算每个安装对象的zoo library(rstanarm) data(kidiq) d <- kidiq fit1 <- stan_glm(kid_score ~ mom_iq, data = d,
zoo
(请参见下面的函数pc
),如下图所示的fit1
和fit2
不过,我想知道如何循环fit
对象?具体来说,如果用户提供了两个安装对象,例如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))
lappy(list(fit1,fit2),pc)
应该可以工作。注意,确保我理解这个问题;什么不适用于循环或lappy
?
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)
}
compute=function(){
for(i in ls()){
if(class(eval(parse(text=i)))=="lm"){
print(paste("zoo for",i,pc(eval(parse(text=i)))))
}
}
}
compute()