добавление квадратичного c члена к логистической c регрессии - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь смоделировать регрессию логистики c с парой переменных. Я вижу, что у одной из моих переменных есть квадратичный c тренд, изображая ответ этой переменной и подгоняя к ней кривую лёсса. Итак, я хочу добавить термин quadrati c в мою регрессионную модель logisti c, чтобы смоделировать эту переменную с квадратичным c трендом. У меня возникли проблемы с выяснением, как это сделать наилучшим / наиболее точным способом.

Пример ниже:

Создать df:

set.seed(1)
df <- data.frame(response = c(rep(0,times=30),rep(1,times=20)),
                 var1 = runif(50,min=12,max=30),
                 var2 = c(runif(20,min=0,max=25),runif(10,min=30,max=50),runif(20,min=15,max=40)),
                 var3 = var2^2) # note that this is just var2 squared

График по второй переменной для просмотра квадратичного c тренда

ggplot(df,aes(x=var2,y=response)) +
  geom_point() +
  geom_smooth(method="loess")+
  coord_cartesian(ylim = c(0,1))

test a несколько различных формул моделей

formulas <- list(response ~ var1 + var2,              # both vars linear
                 response ~ var1 + var2 + I(var2^2),  # add quad term for var2
                 response ~ var1 + I(var2^2),         # only quad term for var2
                 response ~ var1 + var2 + var3,       # add var3, which is var2^2
                 response ~ var1 + var3)              # only var1 and var3

# build a df of some model selection criteria:
selection <-  purrr::map_df(formulas, ~{   
  mod <- glm(.x, data= df, family="binomial")
  data.frame(formula = format(.x), 
             AIC = round(AIC(mod),2), 
             BIC = round(BIC(mod),2),
             R2adj = round(DescTools::PseudoR2(mod,which=c("McFaddenAdj")),4)
  )
}) %>% arrange(desc(AIC))

просмотр критериев выбора:

> selection
                             formula   AIC   BIC  R2adj
1        response ~ var1 + I(var2^2) 65.88 71.62 0.0211
2             response ~ var1 + var2 65.26 70.99 0.0304
3      response ~ var1 + var2 + var3 64.69 72.33 0.0389
4             response ~ var1 + var3 63.18 68.91 0.0613
5 response ~ var1 + var2 + I(var2^2) 45.09 52.74 0.3300

В основном мне интересно - может кто-нибудь объяснить мне, почему они все разные? Что я должен использовать, чтобы использовать один термин с шаблоном квадратичного c? Почему я получаю такие разные результаты?

1 Ответ

4 голосов
/ 11 февраля 2020

Я получаю разные результаты для вас:

> selection
                             formula  AIC   BIC   R2adj
1 response ~ var1 + var2 + I(var2^2) 40.4 48.05  0.3997
2      response ~ var1 + var2 + var3 40.4 48.05  0.3997
3             response ~ var1 + var2 70.5 76.23 -0.0475
4        response ~ var1 + I(var2^2) 72.6 78.34 -0.0788
5             response ~ var1 + var3 72.6 78.34 -0.0788

Что имеет смысл для меня. Так что я не знаю, что ты сделал. Может быть, вы изменили данные?

Редактировать : Я думаю, что у вас есть плавающий вектор var3 вне df, который не совпадает с тем, который вы думаете. Я имею в виду, это не var2 ^ 2. Создание фрейма данных в базе R отличается от использования сторонних пакетов, таких как dplyr, который позволяет создавать новые переменные из других переменных, «обещанных» для создания в фрейме данных. Вам, вероятно, следует использовать функцию tibble:

set.seed(1)
df <- tibble(response = c(rep(0,times=30), rep(1,times=20)),
             var1 = runif(50,min=12,max=30),
             var2 = c(runif(20,min=0,max=25), runif(10,min=30,max=50), runif(20,min=15,max=40)),
             var3 = var2^2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...