step/stepAIC 在函数调用内部构建的 glms
step/stepAIC on glms constructed inside function calls
我遇到了与 visibility/environment 相关的问题。简而言之,不能使用 step/stepAIC:
简化在函数内部构造的 glms
foo = function(model) {
m = glm(y~x, family=model$family, data = dframe)
return(m)
}
y = rbinom(100, 1, 0.5)
x = y*rnorm(100) + rnorm(100)
dframe = data.frame(y, x)
m = glm(y~x, family='binomial', data = dframe)
m2 = foo(m)
library(MASS)
summary(m2)
print(m2$family)
m3 = stepAIC(m2, k = 2)
这会导致以下错误:
Error in glm(formula = y ~ 1, family = model$family, data = dframe) :
object 'model' not found
尽管 m2 看起来很合适,而且这个系列已经定义好了。对不起,如果这个例子有点做作。
找到解决方案-原始glm需要用do.call构造。
foo = function(model) {
form.1<-as.formula(y ~ x)
dat = model$data
fam = model$family
m <- do.call("glm", list(form.1, data=dat, family=fam))
##m = glm(y~x, family='binomial', data = model$dframe)
return(m)
}
y = rbinom(100, 1, 0.5)
x = y*rnorm(100) + rnorm(100)
dframe = data.frame(y, x)
m = glm(y~x, family='binomial', data = dframe)
m2 = foo(m)
library(MASS)
summary(m2)
print(m2$family)
m3 = stepAIC(m2, k = 2)
我遇到了与 visibility/environment 相关的问题。简而言之,不能使用 step/stepAIC:
简化在函数内部构造的 glmsfoo = function(model) {
m = glm(y~x, family=model$family, data = dframe)
return(m)
}
y = rbinom(100, 1, 0.5)
x = y*rnorm(100) + rnorm(100)
dframe = data.frame(y, x)
m = glm(y~x, family='binomial', data = dframe)
m2 = foo(m)
library(MASS)
summary(m2)
print(m2$family)
m3 = stepAIC(m2, k = 2)
这会导致以下错误:
Error in glm(formula = y ~ 1, family = model$family, data = dframe) :
object 'model' not found
尽管 m2 看起来很合适,而且这个系列已经定义好了。对不起,如果这个例子有点做作。
找到解决方案-原始glm需要用do.call构造。
foo = function(model) {
form.1<-as.formula(y ~ x)
dat = model$data
fam = model$family
m <- do.call("glm", list(form.1, data=dat, family=fam))
##m = glm(y~x, family='binomial', data = model$dframe)
return(m)
}
y = rbinom(100, 1, 0.5)
x = y*rnorm(100) + rnorm(100)
dframe = data.frame(y, x)
m = glm(y~x, family='binomial', data = dframe)
m2 = foo(m)
library(MASS)
summary(m2)
print(m2$family)
m3 = stepAIC(m2, k = 2)