R:多重回归错误(需要时缺少true / false)

时间:2015-02-04 17:00:52

标签: r regression phylogeny

失败的运行的我的R sessionInfo():

R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils    
[5] datasets  methods   base     

other attached packages:
[1] caper_0.5.2     mvtnorm_1.0-2   MASS_7.3-35    
[4] gsubfn_0.6-6    proto_0.3-10    picante_1.6-2  
[7] nlme_3.1-118    vegan_2.2-1     lattice_0.20-29
[10] permute_0.8-3   ape_3.2        

loaded via a namespace (and not attached):
[1] cluster_1.15.3 grid_3.1.2     Matrix_1.1-4  
[4] mgcv_1.8-3     parallel_3.1.2 tcltk_3.1.2   
[7] tools_3.1.2 

我正在努力隔离哪些变量导致交互时的特定失败。 (更新:没有具体的预测因子,只是物种数量确定的超过阈值的预测因子数量)


我有一个错误,似乎是R中“caper”包的内部错误。确切的错误是:

Error in if (any(stRes > robust)) { : missing value where TRUE/FALSE needed

Where the error occurs on this line of code:
crunchMod <- crunch(f, data = contrasts)

使用下面dataSet1.txt的7个预测变量,我发现回归与))^2)^3完美匹配。使用下面dataSet2.txt的12个预测变量,我发现只有“)”有效,而)^2)^3都会产生上述错误。以下是重现错误所需的最少代码:

library(caper)
library(ape)

setwd("Your_Directory")
caperDS <- read.table("dataSet1.txt", header = TRUE) #Also include "dataSet2.txt"

myTrees = read.nexus("Tree1.tre") #Also include "Tree2.tre"

contrasts <- comparative.data(myTrees, caperDS, Species)
f <- as.formula(paste(paste(names(caperDS)[2],"~"), paste(paste("(",paste(names(caperDS)[3:ncol(caperDS)], collapse="+"))),")^3")) #Vary this between ")", ")^2" and ")^3"
crunchMod <- crunch(f, data = contrasts)
print(summary(crunchMod))

由于占用的空间,我已经修改了我之前提供的数据。由于现在很明显这个错误是一个普遍的问题(见下文),你可以在http://cran.r-project.org/web/packages/caper/vignettes/caper.pdf

中找到要检查的数据集。

1 个答案:

答案 0 :(得分:0)

好的,所以我做了很多实验,答案几乎肯定是我在crunch()函数中放了太多的预测因子而且它“破了”。它可以接受的预测变量的数量取决于数据集中存在多少个主题。

我得出了这个结论,因为我删除的预测因子并不重要;只需随意删除一些就足够了。但是,我不明白为什么crunch()函数会从这种情况中产生错误而不是和平地退出(假设行为是有意的)。如果有人可以在评论/后续回答中进一步阐述这一点,我将不胜感激。