R:多元回归错误(在需要的地方缺少 true/false)

R: Multiple Regression Error (Missing true/false where needed)

我的失败运行的 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))

由于花费了 space,我已经编辑了之前提供的数据。由于现在很明显这个错误是一个普遍问题(见下文),您可以在 http://cran.r-project.org/web/packages/caper/vignettes/caper.pdf

中找到要检查引用的数据集

好的,所以我做了很多实验,答案几乎可以肯定是我在 crunch() 函数中放入了太多预测变量,它 "broke"。它可以接受的预测变量的数量取决于数据集中存在的受试者数量。

我得出这个结论是因为我删除了哪些预测因素并不重要;随机删除一些就足够了。但是,我不明白为什么 crunch() 函数会在这种情况下产生错误而不是和平退出(假设行为是有意的)。如果有人可以在 comment/subsequent 的回答中进一步详细说明,我将不胜感激。