Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中的“lm”型模型中循环“fitted”对象?_R_Function_For Loop_Vectorization - Fatal编程技术网

如何在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()