Итерация моделей без жесткого кодирования с помощью R - PullRequest
0 голосов
/ 02 июля 2018

У меня есть этот код

#  [1] "X6"  "X5"  "X7"  "X4"  "X3"  "X8"  "X19" "X9"  "X10" "X16"    
formula = result ~ X3+X4+X5+X6+X7+X8+X9+X10+X16+X19
full_magnetude_model = glm.fit <- glm(formula, data = train)
full_magnetude_predict = predict(full_magnetude_model, newdata=test)

# Comparing results
full_magnetude_results <- ifelse(full_magnetude_predict > 0.5, 1, 0)
true_results = test$result

# results
table(full_magnetude_results,true_results)

Он работает правильно, но результаты работают по разным формулам, и мне нужно сделать то же самое для:

#  [1] "X6"  "X5"  "X7"  "X4"  "X3"  "X8"  "X19" "X9"  "X10" "X16"    
#  [1] "X6"  "X5"  "X7"  "X4"  "X3"  "X8"  "X19" "X9"  "X10"    
#  [1] "X6"  "X5"  "X7"  "X4"  "X3"  "X8"  "X19" "X9"      
#  [1] "X6"  "X5"  "X7"  "X4"  "X3"  "X8"  "X19"     
#  [1] "X6"  "X5"  "X7"  "X4"  "X3"  "X8"      

и так далее, я могу сделать это вручную, но есть ли умный способ сделать это?

Обновление

полный код: https://github.com/martin-varbanov96/fmi_summer_2018/blob/master/fmi_6ti_sem/Pril_stat/project/main.R

Идея состоит в том, чтобы составить список формул и применить мой код для каждого элемента списка

1 Ответ

0 голосов
/ 02 июля 2018

Вероятно, не полный ответ, но это должно дать представление:

terms=c("X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "X16", 
        "X19")

lapply(10:6,function(x) {
  formula <- as.formula(paste("result ~ ", paste0(terms[1:x],collapse="+")))
  formula
})

Дает:

[[1]]
result ~ X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X16 + X19
<environment: 0x0000000016fbec50>

[[2]]
result ~ X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10 + X16
<environment: 0x0000000016fc29a0>

[[3]]
result ~ X3 + X4 + X5 + X6 + X7 + X8 + X9 + X10
<environment: 0x00000000170f44b0>

[[4]]
result ~ X3 + X4 + X5 + X6 + X7 + X8 + X9
<environment: 0x00000000170f8a98>

[[5]]
result ~ X3 + X4 + X5 + X6 + X7 + X8
<environment: 0x00000000170fd1d0>

Lapply будет повторять столько же, сколько диапазон (от 10 до 6), передавая его анонимной функции, этот х будет использоваться для выбора необходимых терминов.

Идея состоит в том, чтобы построить ваши формулы из необходимых терминов, при этом каждый раз удаляя их по одному, вставляя их как показано в документации ?as.formula и получая формулу. Остальной код можно использовать как есть, результирующий список будет содержат таблицы вместо формул в этом примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...