我正在尝试在R中做最好的子集回归。使用leaps()
或regsubsets()
(来自leaps
包),如果我所有的独立(解释性)变量都可以很好地工作是数字。但是,如果我包括一个因素,它将失败并显示错误消息:
jumps.setup(x,y,wt = wt,nbest = nbest,nvmax = NCOL(x)+ int,的错误: 外部函数调用中的NA / NaN / Inf(arg 3) 另外:警告消息: 在jumps.setup(x,y,wt = wt,nbest = nbest,nvmax = NCOL(x)+ int,: .Fortran
中使用的char向量中只有第一个字符串
我已经对所有数据集进行了爬网,并且绝对没有任何NA
/ NaN
/ Inf
值;我还尝试生成人为因素值,而不是使用数据集中的值,因此得到相同的结果。如果我在R之外创建虚拟变量来表示因子值,则它运行得很好,因此它与数据本身无关。我尝试过使用带或不带标签的因子水平,并在原始数据中使用数字或字符因子值进行尝试:在每种情况下,结果相同。这是我使用的方法之一:
zoo1 <- within(panda,AltitudeZoo1 <- relevel(factor(Altitude),"2134"))
但在线文档声称可以在leaps()
中使用因素,例如this document。我发现各种报告,包括StackOverflow中的报告,都大致相同的错误消息(通常是抱怨的“ arg”数字不同),但都与randomForest
例程有关。
我使用leaps()
还是regsubsets()
都没关系。
有什么想法吗?解决方法是回到在R之外创建虚拟变量的方法,但这很烦人。
这是一个可复制的示例:首先是代码
reprex = read.csv("reprexdata.csv",head = T)
library(leaps)
##creating dummy variable
reprex$xfactordata.f<-factor(reprex$xfactordata)
##checking dummy variables work ok with simple regression
m<-lm(reprex$y~reprex$x1data+reprex$x2data+reprex$xfactordata.f)
summary(m)
##now try best subsets regression
y<-reprex$y
x <- reprex[,c (2,3,5)] ## picks up x1data,x2data,xfactordata.f
Z <- leaps(x,y,method = "adjr2",nbest = 1) ## running leaps subset regression
Z
接下来,我测试了上面代码的数据,该数据适当地产生了先前报告的错误(33行):
ydata x1data x2data xfactordata
139.3983228 2 0.555555556 2134
159.4909669 1 0.28125 2134
162.979101 0 0 1780
158.523721 0 0 1780
167.9430665 1 0.526509081 2134
150.4105583 1 0.21875 2134
136.6799004 2 8.428819444 2134
142.9603016 1 0.026041667 2134
149.3782133 1 0.364583333 2134
162.3022502 0 2.725694444 2084
159.8686527 0 1.085069444 2084
129.5367811 0 14.04513889 2084
133.8219284 0 8.697916667 2084
152.7590267 2 2.81421023 2134
167.6079507 1 0.251736111 1780
157.4867615 2 0.915798611 2134
146.8897681 2 1.40625 2134
151.4678525 1 0.769842804 2134
174.3412577 2 2.612847222 2084
150.0527068 2 0.885416667 2134
139.3348421 1 2.560763889 2134
159.4110442 2 1.66626408 2134
164.2695334 2 0.958333333 2134
154.5591851 1 1.980372102 2134
160.5290024 1 1.225 2134
154.4028751 1 1.370983414 2134
144.0339001 1 0.520833333 2134
145.5653995 2 0 2134
161.8175311 1 1.271701389 2134
139.338698 1 3.8875 2134
163.2222006 1 0.703125 2084
146.2958403 1 0 2134