Я намереваюсь использовать care::sbf
, чтобы сделать одномерный выбор объектов, когда мой ввод - это фрейм данных с несколькими переменными (он же, его столбцы), список объектов-кандидатов и метка (он же, категориальные переменные). После прочтения caret
документации по пакету я попытался использовать sbf
, sbfController
для выбора функции, но я столкнулся с ошибкой ниже:
Ошибка в contrasts<-
(*tmp*
, value = contr.funs [1 + isOF [nn]]):
контрасты могут применяться только к факторам с 2 или более уровнями
Может кто-нибудь указать мне, как решить эту проблему ошибка? Как правильно использовать caret::sbf
для выбора функции? Любая мысль?
Воспроизводимый пример :
Вот воспроизводимый пример на publi c gist , где я использовал его в качестве ввода.
моя текущая попытка :
library(caret)
library(e1071)
library(randomForest)
df=read.csv("df.csv", header=True)
sbfCtrl <- sbfControl(method = 'cv', number = 10, returnResamp = 'final', functions = caretFuncs, saveDetails = TRUE)
model <- sbf(form= ventil_status~ .,
data= df,
methods='knn',
trControl=trainControl(method = 'cv', classProbs = TRUE),
tuneGrid=data.frame(k=1:10),
sbfControl=sbfControl(functions = sbfCtrl,
methods='repeatedcv', number = 10, repeats = 10))
print(model)
print(model$fit$results)
> model <- sbf(ventil_status~ ., data=df, sizes=c(1,5,10,20),
+ method= 'knn', trControl=trainControl(method = 'cv', classProbs = TRUE),
+ tuneGrid = data.frame(k=1:10),
+ sbfControl=sbfCtrl)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :
contrasts can be applied only to factors with 2 or more levels
Я погуглил эту ошибку, но все равно не смог ее преодолеть. Любая идея, чтобы заставить вышеупомянутый код работать? Как правильно выбрать фильтр с помощью caret::sbf
?
. Мне нужно, чтобы выходной фрейм данных имел выбранные объекты с присоединенным к нему значением p. Итак, вот моя попытка:
newdf <- df[ , -which(names(df) %in% c("subject"))]
p_value_vector <- sapply(names(newdf), function(i)
tryCatch(
wilcox.test(newdf[newdf$ventil_status %in% "0", i],
newdf[newdf$ventil_status %in% "1", i],
na.action(na.omit))$p.value),
warning = function(w) return(NA),
error = function (e) return(NA)
)
ожидаемый вывод :
Я ожидаю, что выходной фрейм данных с выбранными функциями будет иметь значение p, возвращаемое wilcox.test
прилагается к соответствующим функциям. Любая идея, чтобы это произошло в г? Как правильно выбрать функцию, используя caret::sbf
? есть мысли?
вот мой R sessioninfo:
> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] ggpubr_0.2.5 magrittr_1.5 reshape2_1.4.3
[4] forcats_0.5.0 purrr_0.3.3 readr_1.3.1
[7] tibble_2.1.3 tidyverse_1.3.0 stringr_1.4.0
[10] dplyr_0.8.5 scales_1.1.0 tidyr_1.0.2
[13] aws.s3_0.3.20 randomForest_4.6-14 e1071_1.7-3
[16] mlbench_2.1-1 caret_6.0-86 ggplot2_3.3.0
[19] lattice_0.20-38