我仍然处于R的学习曲线(以及本论坛的新篇章),并且一直试图循环一个gam模型,在那里我试图评估不同的响应(因变量 - 在这种情况下是鱼类)到环境预测因子。所以基本上我想在循环中重新创建以下内容:
G1< -GAm(VAR1〜S(X1)+ S(×2))
g2< -gam(var2~s(x1)+ s(x2))
G3< -GAm(VAR2〜S(X1)+ S(×2))
我的数据框架由不同列中每个物种的丰富度组成,然后是单独列中的环境预测变量。我在本论坛中遵循了一些建议,使用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分数等)。有人有想法如何运行多个gams?或找出错误来源?
欢迎并赞赏所有想法!希望我不是模糊的。如果您需要任何进一步的信息,请告诉我。
Best,Rolo
答案 0 :(得分:0)
我不确定为什么它不起作用。但我为您提供了两种可能的解决方案,其中包含我创建的类似数据框架。可能有更优雅的解决方案,但这些工作:
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)