2017-09-15 55 views
-1

저는 r에 매우 익숙하며 함수를 작성하는 데 어려움이 있습니다. GAM에 적합한 것을 만들려고합니다. 선형 모델에 대한 예제를 발견했습니다. 완벽하게 작동합니다. 그러나 GAM에 동일한 구조를 사용하려고하면 오류가 발생합니다.is.data.frame (data)의 오류 : 'data =' 'object를 찾을 수 없습니다.

선형 모델 :

library(mgcv) 
library(ggplot2) 
theme_set(theme_bw()) 
set.seed(100) 
dd <- data.frame(x=1:100,y=round(rnorm(100,mean=100),1), z=round(runif(100,1,4),1)) 
lm(y~x, weights=z, data=dd)$call 
lm(formula = y ~ x, data = dd, weights = z) 

f2 <- function(f,w,d){ 
    do.call("lm", list(formula=as.formula(f), weights=as.name(w), data=as.name(d))) 
} 
f2("y~x", "z", "dd")$call 
lm(formula = y ~ x, data = dd, weights = z) 

와 GAM 버전

set.seed(100) 
dd <- data.frame(x=1:100,y=round(rnorm(100,mean=100),1)) 
gam(y ~ s(x, k=64, bs='ad'), data = dd, method = 'REML', select = 'TRUE')$call 
gam(formula = y ~ s(x, k=64, bs='ad'), data = dd, method = 'REML', select = 'TRUE') 

f2 <- function(f,m,s,d){ 
    do.call("gam", list(formula=as.formula(f),method=as.name(m),select=as.name(s),data=as.name(d))) 
    } 

f2("y ~ s(x, k=64, bs='ad')", "method = 'REML'", "select = 'TRUE'", "data = dd")$call 

# Error in is.data.frame(data) : object 'data = dd' not found occurs 

gam(formula = y ~ s(x, k = 64, bs = "ad"), data = dd) 
+1

어 "gam"함수에서, 어떤 패키지입니까? – PoGibas

+0

왜 do.call ("gam", list (formula = as.formula (f), method = m, select = s, data = d))와'f2 ("y ~ s (x, k = 64, bs = 'ad') ", 'REML', TRUE, dd)'? – r2evans

+0

죄송합니다, 방금 패키지를 추가했습니다. GAM은 일반화 된 추가 모델입니다. 필자의 경우에는 산점도 (scatterplot)가 있으며 GAM은 y 값을 매끄럽게하기 때문에 x와 y의 관계는 비선형 적입니다. –

답변

0

전화 :

f2 <- function(f, m, s, d){ 
    do.call("gam", list(formula=as.formula(f),method = "REML",select = s, data = as.name(d))) 
} 
f2("y ~ s(x, k=64, bs='ad')", "REML", TRUE, d = "dd")$call 

결과 :

gam(formula = y ~ s(x, k = 64, bs = "ad"), data = dd, method = "REML", 
    select = TRUE) 
+0

쿨, 고마워요! 하나의 다른 (아마 엄청나게 어리석은 질문) : 결과를 어떻게 돌려서 내 코드로 사용할 수 있습니까? –