Найти общее количество комбинаций значений, доступных в векторе в R - PullRequest
0 голосов
/ 03 декабря 2018

Все имена входных переменных (11 элементов) приведены здесь в этом векторе, называемом х. "qua" - имя выходной переменной.

    x <- c("fa", "va", "ca", 
           "rs", "chl", "fsd",
           "tsd", "den",   "pH", 
           "sul", "alc")

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

           var_aic <- data.frame(matrix(NA, ncol = 2, byrow = FALSE))
           colnames(var_aic) <- c("Variable", "AIC") 
           # var_aic variable defined null to store values later.

           # Now trying to store AIC of of all the models possible with its               
           # variables name taken into the account.

           for(i in 1:11){
             x <- as.formula(paste("qua ~ ", x[i]))
             model <- polr(x,  train, Hess = TRUE)
             temp <- data.frame(z[i],AIC(model))
             colnames(temp) <- c("Variable", "AIC")
             var_aic <<- rbind(var_aic, temp)
           }

Теперь я хочу построить функцию, которая даст мне результат, такой как

         **Variable                AIC**
           fa                     1460.9
           va                     1399.4
           ca                     1678
           rs                     1460.9
           chl                    1399.4
           fsd                    1678
           tsd                    1460.9
           den                    1399.4
           pH                     1678
           sul                    1460.9
           alc                    1399.4
           fa + va                1233
           fa + ca                1800

           # Also i dont want fa + fa,..... repetitions of the same variable.

У меня естьпроблема в выполнении этой части.Так что я должен изменить или добавить, чтобы он работал?

1 Ответ

0 голосов
/ 03 декабря 2018
combi <- lapply(1:length(x), 
  function(y) apply(combn(x, y), 2, paste, collapse=" + ")
)    

combi.v <- unlist(combi)

length(combi.v) == sum(choose(length(x), 1:length(x)))
# TRUE

tail(combi.v)
# [1] "fa + va + ca + rs + fsd + tsd + den + pH + sul + alc"      
# [2] "fa + va + ca + chl + fsd + tsd + den + pH + sul + alc"     
# [3] "fa + va + rs + chl + fsd + tsd + den + pH + sul + alc"     
# [4] "fa + ca + rs + chl + fsd + tsd + den + pH + sul + alc"     
# [5] "va + ca + rs + chl + fsd + tsd + den + pH + sul + alc"     
# [6] "fa + va + ca + rs + chl + fsd + tsd + den + pH + sul + alc"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...