0

我仍在 R 的学习曲线中(并且在这个论坛中是新的),并且一直在尝试循环一个 gam 模型,在该模型中我试图评估对环境预测变量的不同响应(因变量 - 在这种情况下是鱼类)。所以基本上我想在一个循环中重新创建以下内容:

g1<-gam(var1~s(x1)+s(x2))

g2<-gam(var2~s(x1)+s(x2))

g3<-gam(var2~s(x1)+s(x2))

我的数据框由单独列中每个物种的丰度组成,然后是单独列中的环境预测因子。我遵循了这个论坛中的一些建议,使用 melt 和 dlply 按物种迭代 gam 模型。我使用了以下代码:

melt.x<-melt(FullMatrix, id=c("PLAND_50","FragIndex_50"),measure.var=c("CALLI_SPP","CARIDEA",  "EUC_ARG","FAR_DUO","HAE_SCI","LAG_RHO","LUC_PAR","LUT_GRI","OPS_BET","SPH_BAR","SYN_SPP"), variable.name="Nekton", value.name="Abundance") 

.上面的代码创建了一个data.frame,每个物种观察一行

attach(melt.x)

gams_50<-dlply(melt.x, .var=c("Nekton"), .fun=function(x){
gam(scale(Abundance)~s(PLAND_50,bs="cr")+s(FragIndex_50,bs="cr")+te(PLAND_50,FragIndex_50), gamma=1.4)
})

lapply(gams_50, summary)

代码运行没有错误,然而,当我检查结果时,我注意到不同物种的结果是相似的(即,相同的调整 R、变量 p 值、GCV 分数等)。有人知道如何运行多个游戏吗?或找出错误的来源?

欢迎和赞赏所有想法!希望我没有含糊其辞。如果您需要任何进一步的信息,请告诉我。

最好的,罗洛

4

1 回答 1

0

我不确定为什么它不起作用。但我为您提供了 2 种可能的解决方案,其中包含我创建的类似数据框。可能有更优雅的解决方案,但这些工作:

library (plyr) 
library(mgcv)

## Creation of an artificial data frame

sp_a  <- rnorm (100, mean = 3, sd = 0.9)

sp_b  <- rnorm (100, mean = 7, sd = 2.3)


var_env_1 <- rnorm (100, mean = 1, sd = 0.3)

var_env_2 <- rnorm (100, mean = 5, sd = 1.6)


data <- data.frame (sp_a, sp_b, var_env_1, var_env_2  ) 

## solution 1

data_2 <- melt.data.frame (data, measure.vars = c("sp_a", "sp_b"), variable_name = "Species") 

dlply ( data_2, .(Species), function (x) { summary (gam(value ~ s (var_env_1 ) + s (var_env_2), data = x  ) ) }  )

## solution 2

## Loop

for (i in names (data)[1:2] ) {

  assign ( paste ("m",i,sep = "_") , gam ( get (i) ~ s (var_env_1 ) + s (var_env_2 ) , data = data))

  print( summary ( get (paste ("m",i,sep = "_") ) ) )

}

# The last print is equivalent to do this:

summary(m_sp_a)

summary(m_sp_b)
于 2014-05-07T16:25:24.403 回答