【问题标题】:analyzing multiple dependent variables (different species same predictors) in a gam model using dlply使用 dlply 分析 gam 模型中的多个因变量(不同物种相同的预测因子)
【发布时间】:2014-06-18 08:26:55
【问题描述】:

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

g1

g2

g3

我的数据框由单独列中的每个物种的丰度组成,然后是单独列中的环境预测因子。我遵循了这个论坛中的一些建议,使用 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 分数等)。有人知道如何运行多个游戏吗?或找出错误来源?

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

最好的,罗洛

【问题讨论】:

    标签: r iteration gam


    【解决方案1】:

    我不确定它为什么不起作用。但我为您提供了 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)
    

    【讨论】:

      猜你喜欢
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2021-01-06
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多