【发布时间】:2013-12-15 14:43:57
【问题描述】:
需要使用Branch and bound 方法来选择最佳模型。来自leaps 包的leaps() 效果很好,只有当数据没有NA 值时,否则会抛出错误:
#dummy data
x<-matrix(rnorm(100),ncol=4)
#convert to 0,1,2 - this is a genetic data, NA=NoCall
x<-matrix(round(runif(100)*10) %% 3,ncol=4)
#introduce NA=NoCall
x[1,1] <-NA
#response, case or control
y<-rep(c(0,1,1,0,1),5)
leaps(x,y)
Error in leaps.setup(x, y, wt = wt, nbest = nbest, nvmax = NCOL(x) + int, :
NA/NaN/Inf in foreign function call (arg 4)
仅使用 complete.cases() 不是一个选项,因为我会丢失 80% 的数据。
可以处理NAs 的leap 的替代品是什么?我正在编写自己的函数来做类似的事情,但它变得又大又笨重,我觉得我在重新发明轮子......
更新:
我试过使用stepAIC(),遇到同样的数据丢失问题:
Error in stepAIC(fit) :
number of rows in use has changed: remove missing values?
【问题讨论】:
-
对您的数据估算 NA 是否合理?
stepAIC()(前后)真的不行吗? -
插补不是一种选择。
stepAIC()是否经过所有可能的组合? -
没有
MASS::stepAIC()像step()一样前进,后退或两者兼而有之。对于大多数数据集,通常会找到与leaps()相同的模型(我认为???)。 -
好的,需要大图说明;您如何考虑比较基于不同数据集构建的两个模型?或者这是问题的一部分?
-
不过,这部分是统计问题,因为 AIC 无法比较使用不同数据集构建的模型。因此,要比较具有和不具有某些变量的模型,您需要删除这些变量缺少值的行。您可能需要“重新考虑您的建模策略”,引用Ben Bolker。否则,您可能还想查看 AIC 的变体,快速 Google 搜索会找到 recent JASA article,这可能是一个很好的起点。