Автоматически создавать формулы для всех возможных линейных моделей

Скажем, у меня есть обучающий набор в кадре данных с столбцами ColA , ColB , ColC и т. Д. Один из этих столбцов обозначает двоичный class, например, Class столбца, с значениями «да» или «нет».

Я пытаюсь использовать некоторые бинарные classификаторы, например:

 library(klaR) mynb <- NaiveBayes(Class ~ ColA + ColB + ColC, train) 

Я хотел бы запустить вышеуказанный код в цикле, автоматически генерируя все возможные комбинации столбцов в формуле, то есть:

 mynb <- append(mynb, NaiveBayes(Class ~ ColA, train) mynb <- append(mynb, NaiveBayes(Class ~ ColA + ColB, train) mynb <- append(mynb, NaiveBayes(Class ~ ColA + ColB + ColC, train) ... mynb <- append(mynb, NaiveBayes(Class ~ ColB + ColC + ColD, train) ... 

Как я могу автоматически генерировать формулы для каждой возможной линейной модели, содержащей столбцы кадра данных?

Скажем, мы работаем с этим нелепым примером:

 DF <- data.frame(Class=1:10,A=1:10,B=1:10,C=1:10) 

Затем вы получаете имена столбцов

 Cols <- names(DF) Cols <- Cols[! Cols %in% "Class"] n <- length(Cols) 

Вы строите все возможные комбинации

 id <- unlist( lapply(1:n, function(i)combn(1:n,i,simplify=FALSE) ) ,recursive=FALSE) 

Вы вставляете их в формулы

 Formulas <- sapply(id,function(i) paste("Class~",paste(Cols[i],collapse="+")) ) 

И вы зацикливаетесь на них, чтобы применить модели.

 lapply(Formulas,function(i) lm(as.formula(i),data=DF)) 

Будьте осторожны: если у вас больше, чем несколько столбцов, это быстро станет очень тяжелым для памяти и приведет к буквально тысячам моделей. У вас есть 2 ^ n - 1 разные модели, n - число столбцов.

Убедитесь, что это то, что вы хотите, в целом такого рода сравнение моделей настоятельно рекомендуется. Забудьте о любых выводах, когда вы это сделаете.

Вот замечательный пост в блоге Марка Хекмана, в котором подробно описывается, как построить все возможные модели регрессии, учитывая набор объясняющих переменных и переменную ответа. Однако, как указал Йорис, я бы строго предостерег от использования такого подхода, поскольку (а) число регрессий возрастает экспоненциально и (б) статистические эксперты не рекомендуют вести промысел данных такого рода, поскольку это чревато всеми видами рисков.

 vars<-c('a','b','c','d') library(gregmisc) indexes<-unique(apply(combinations(length(vars), length(vars), repeats=T), 1, unique)) gen.form<-function(x) as.formula(paste('~',paste( vars[x],collapse='+'))) formulas<-lapply(indexes, gen.form) formulas 

Формирует:

R> формулы

[[1]] ~ a

[[2]] ~ a + b

[[3]] ~ a + c

[[4]] ~ a + d

[[5]] ~ a + b + c

[[6]] ~ a + b + d

[[7]] ~ a + c + d

[[8]] ~ a + b + c + d

[[9]] ~ b

[[10]] ~ b + c

[[11]] ~ b + d

[[12]] ~ b + c + d

[[13]] ~ c

[[14]] ~ c + d

[[15]] ~ d

  • условие имеет длину> 1, и только первый элемент будет использоваться в if else statement
  • Получить «встроенные nul (s), найденные во вводе» при чтении csv, используя read.csv ()
  • Как удалить все объекты, кроме одного из рабочей области в R?
  • Перечислить списки в R
  • используя substitute для получения имени аргумента с помощью
  • Как вставить элементы в вектор?
  • Удалите повторяющиеся пары столбцов, сортируйте строки на основе двух столбцов
  • листинг содержимого файла данных R без загрузки
  • Извлечение строк для первого вхождения переменной в фрейм данных
  • Замените все значения 0 на NA
  • Возьмите сумму переменной, если комбинация значений в двух других столбцах уникальна
  • Interesting Posts

    Выполнение команды терминала из приложения Cocoa

    Отключить расширения режима разработчика в Chrome

    Как я могу обновить внешний вид JFreeChart после того, как он станет видимым?

    Каков правильный цикл цикла C #, для (;;) или while (true)?

    Получить представление корня из текущей активности

    Документ Word имеет очень странное «скрытое» формирование после преобразования из PDF в .docx

    Как удаленно проверять офисную версию?

    Как удалить строку из текстового файла на C #?

    Создайте ведро в Amazon S3

    Мое регулярное выражение подходит слишком много. Как заставить его остановиться?

    Несогласованная ошибка доступности со следующим кодом c #. Зачем?

    Программный переход на другой controller / сцену просмотра

    MS Word: добавление строки до и после текста

    Что происходит с объявленной, неинициализированной переменной в C? Имеет ли это значение?

    Как автоматически автофокусировать камеру Android?

    Давайте будем гением компьютера.