有哪些替代 leap() 函数且能够处理缺失值的方法?

3
需要应用分支定界方法来选择最佳模型。从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%的数据。

除了leap之外,有什么可以处理NA的替代方法吗?我正在编写自己的函数来做类似的事情,但它变得又大又笨重,感觉自己在重新发明轮子...

更新: 我已经尝试使用stepAIC(),面临着同样的缺失数据问题:

Error in stepAIC(fit) : 
  number of rows in use has changed: remove missing values?

对于您的数据,输入NA是否合理?而stepAIC()(前向和后向)真的不好吗? - Stephen Henderson
填补缺失值不是一个选项。stepAIC() 函数是否会遍历每种可能的组合? - zx8754
1
不像step()函数一样,MASS::stepAIC()函数不进行前向、后向或双向搜索。对于大多数数据集,通常会找到与leaps()函数相同的模型(我想是这样的吧???)。 - Stephen Henderson
1
好的,需要一个大局观澄清;您考虑如何比较建立在不同数据集上的两个模型?或者这是问题的一部分吗? - Aaron left Stack Overflow
@Aaron担心这篇文章会变成统计数据,我将提供更多细节:有大约50个变量,意图是构建最佳模型(首选AIC,但可以是任何东西)。计算50个变量的所有可能组合是不可行的,因此考虑使用分支和界限法。理想情况下,我需要一个函数(data, glm(outcome~all combinations), bootstrap=1000, return(best model(AIC)))。 - zx8754
2
这部分内容涉及到统计问题,因为AIC不能比较使用不同数据集构建的模型。因此,为了比较具有和不具有某些变量的模型,您需要删除那些变量缺失值的行。引用Ben Bolker的话,“您可能需要重新考虑您的建模策略”。否则,您也可以研究AIC的变体,通过快速的谷歌搜索,可以找到一篇最近的JASA文章,这可能是一个很好的起点。 - Aaron left Stack Overflow
2个回答

1

感谢您提到bestglm包,我之前不知道它的存在。但是这个包也需要删除NA行,而我正试图避免这种情况。 - zx8754

0
这是一个统计问题,因为AIC不能比较使用不同数据集构建的模型。因此,要比较具有和不具有某些变量的模型,您需要删除那些变量缺失值的行。您可能需要“重新考虑您的建模策略”,引用Ben Bolker的话。否则,您也可以研究AIC的变体,快速谷歌搜索会出现最近的JASA文章,这可能是一个很好的起点。
{{link1:- Aaron}}

我在使用 bestglm(train, IC="AIC") 时遇到了完全相同的错误。我的数据框中没有空值,而是一些零值。 - SIslam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接