2014-02-05 29 views
0

我試圖用一個for-loop創建一系列GAM模型的變化無脊椎物種捕獲率的摘要使用一個平滑的術語年(DOY)和一個包含天氣的線性預測器(其中有許多)。我已經運行功能和輸出模型摘要:創建一個for循環,其中我確定數據按列R

gamlin <- function(x) { 
    m <- gam(Log10E ~ s(DOY) + x, data=eggseasongam) 
    return(summary(m)) 
} 

我認爲,我想利用上述的for循環,將依次成爲爲x列4至173的天氣預測,但我正在努力做到這一點。任何建議將非常感激。

謝謝, 邁克

回答

0

2的方法把我的頭頂部可能是:

t<-data.frame(c1=rnorm(10),c2=rnorm(10), c3=rnorm(10)) 

1-使用formula,它允許您提供一個字符串作爲一個公式

> f<-function(d,x) lm(formula(paste("c1",x,sep="~")), data=d) 
> f(t,"c2") 

Call: 
lm(formula = formula(paste("c1", x, sep = "~")), data = d) 

Coefficients: 
(Intercept)   c2 
    -0.1567  -0.4654 

2-備選直接加入色譜柱

> f2<-function(d,x) lm(c1 ~ d[,x], data=d) 
> f2(t,"c2") 

Call: 
lm(formula = c1 ~ d[, x], data = d) 

Coefficients: 
(Intercept)  d[, x] 
    -0.1567  -0.4654 

一旦你上的方法解決了動態迴歸功能,您可以把它放在一個for循環

for(col in 4:173) f(t,col) 

機會,你想以某種方式使用效果,而不是僅僅打印摘要(也許把這些係數放在一個數據框中並對它們進行圖形化,或者沿着這些線條進行繪製。在這種情況下,我建議您查看plyrreshape包和specficially內的每個

功能meltddply在這種情況下,你可以做如下

library(melt) 
library(plyr) 

yvar<-t[,1] 
xvars<-melt(t[,-1]) 
> head(xvars) 
    variable  value 
1  c2 -0.8200263 
2  c2 -1.5359220 
3  c2 -0.2107913 
4  c2 -0.2950263 
5  c2 0.8231989 
6  c2 -0.5971358 

betas<-ddply(xvars, .(variable), summarize, beta=coefficients(lm(yvar ~ value))[2])