簡體   English   中英

使用for循環或套用運行多個GAMM模型

[英]Running multiple GAMM models using for loop or lapply

有人可以幫我在for循環中或lapply中運行多個GAMM模型:在按列排列的大型數據框中,我有一組10個響應和20個預測變量。

我想將GAMM模型應用於每種預測變量-響應組合,並在表格中總結其系數和顯着性檢驗。

模型<-gamm(AnimalCount〜s(溫度),data = dat,family = poisson(link = log),random = list(省=〜1))

我認為一種方法是創建一個“矩陣”列表,其中行和列的數量分別對應於響應(i)和預測變量(j)的數量。 然后,您可以將每個模型結果存儲在單元格[i,j]中。 讓我說明一下:

## make up some data
library(mgcv)
set.seed(0) 
dat <- gamSim(1,n=200,scale=2)
set.seed(1)
dat2 <- gamSim(1,n=200,scale=2)
names(dat2)[1:5] <- c("y1", paste0("x", 4:7))
d <- cbind(dat[, 1:5], dat2[, 1:5])

現在,組合數據具有2個響應(y,y1)和8個預測變量(x0〜x7)。 我認為您可以通過將響應和預測變量存儲在單獨的數據框中來簡化過程:

d_resp <- d[ c("y", "y1")]
d_pred <- d[, !(colnames(d) %in% c("y", "y1"))]

## create a "matrix" list of dimensions i x j
results_m <- vector("list", length=ncol(d_resp)*ncol(d_pred))
dim(results_m) <- c(ncol(d_resp), ncol(d_pred))

for(i in 1:ncol(d_resp)){
  for(j in 1:ncol(d_pred)){
    results_m[i, j][[1]] <- gamm(d_resp[, i] ~ s(d_pred[, j]))
  }
}

# flatten the "matrix" list
results_l <- do.call("list", results_m)

您可以使用sapply / lapply創建數據框以匯總系數等。假設您要提取固定效果的截距和斜率並存儲在數據框中。

data.frame(t(sapply(results_l, function(l) l$lme$coef$fixed)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM