Я пытаюсь сделать наилучшую регрессию подмножеств в R. Используя либо leaps()
, либо regsubsets()
(из пакета leaps
), он работает отлично, если все мои независимые (пояснительные) переменные являются числовыми. Но если я включу фактор, он завершается с сообщением об ошибке:
Ошибка в leaps.setup (x, y, wt = wt, nbest = nbest, nvmax = NCOL (x) + int,: NA / NaN / Inf в вызове сторонней функции (arg 3) Дополнительно: Предупреждение: В leaps.setup (x, y, wt = wt, nbest = nbest, nvmax = NCOL (x) + int,: только первыйстрока в символьном векторе, используемом в .Fortran
Я просканировал весь свой набор данных, и в нем абсолютно отсутствуют значения NA
/ NaN
/ Inf
;также попытался сгенерировать искусственные значения факторов вместо того, чтобы использовать значения из моего набора данных, и я получил тот же результат.Если я создаю фиктивные переменные вне R для представления значений факторов, то он работает отлично, поэтому ничего нельзя сделатьс самими данными. Я пробовал это с метками и без меток для уровней факторов, а также с числовыми или символьными значениями коэффициентов в исходных данных: одинаковый результат в каждом случае. Вот один из способов, которые я использовал:
zoo1 <- within(panda, AltitudeZoo1 <- relevel(factor(Altitude), "2134"))
Все же документация по заявкам онлайнэти факторы могут быть использованы в leaps()
, например в этом документе . Я обнаружил различные сообщения, в том числе в StackOverflow, о примерно одинаковом сообщении об ошибке (обычно различающемся числом, на которое жаловался аргумент "), но все они касаются процедуры 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