Подгонка биномиального GLM по вероятностям (т.е. использование логистической регрессии для регрессии, а не классификации) - PullRequest
0 голосов
/ 23 октября 2018

Я хочу использовать логистическую регрессию для фактического выполнения регрессии, а не классификации.

Моя переменная ответа числовая от 0 до 1, а не категориальная.Эта переменная ответа не связана с любым видом биномиального процесса.В частности, нет «успеха», «количества испытаний» и т. Д. Это просто реальная переменная, принимающая значения от 0 до 1. В зависимости от обстоятельств.

Вот минимальный пример, иллюстрирующий то, что яхотите достичь

dummy_data <- data.frame(a=1:10, 
                         b=factor(letters[1:10]), 
                         resp = runif(10))
fit <- glm(formula = resp ~ a + b, 
           family = "binomial",
           data = dummy_data)

Этот код выдает предупреждение, а затем завершается неудачей, потому что я пытаюсь уместить «неправильный» тип данных:

В eval (семейство $ initialize):нецелые #successes в биномиальном glm!

Тем не менее я думаю, что должен быть способ, так как с помощью family говорится:

Для биномиального и квазибиномиальногоВ семьях ответ может быть указан одним из трех способов: [...] (2) В качестве числового вектора со значениями от 0 до 1, интерпретируемого как доля успешных случаев (с общим числом случаев, заданным весами).

Каким-то образом тот же код работает с использованием "quasibinomial" в качестве семейства, что заставляет меня думать, что может быть способ заставить его работать с биномиальным glm.

Я понимаю вероятностьвыводится сПредположение, что $ y_i $ находится в $ {0, 1} $, но, глядя на математику, кажется, что логарифмическое правдоподобие все еще имеет смысл с $ y_i $ в $ [0, 1] $.Я не прав?

1 Ответ

0 голосов
/ 23 октября 2018

Это потому, что вы используете биномиальное семейство и даете неправильный вывод.Поскольку выбранное семейство является биномиальным, это означает, что результат должен быть либо 0, либо 1, а не значением вероятности.

Этот код работает нормально, поскольку ответ равен либо 0, либо 1.

dummy_data <- data.frame(a=1:10, 
                         b=factor(letters[1:10]), 
                         resp = sample(c(0,1),10,replace=T,prob=c(.5,.5)) )

fit <- glm(formula = resp ~ a + b, 
           family = binomial(),
           data = dummy_data)

Если вы хотите смоделировать вероятность напрямую, вам следует включить дополнительный столбец с общим числом случаев.В этом случае вероятность, которую вы хотите смоделировать, интерпретируется как вероятность успеха, учитывая количество наблюдений в столбце весов.

 dummy_data <- data.frame(a=1:10, 
                         b=factor(letters[1:10]), 
                         resp = runif(10),w=round(runif(10,1,11)))

fit <- glm(formula = resp ~ a + b, 
           family = binomial(),
           data = dummy_data, weights = w)

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

  1. resp - это доля единиц в n испытаниях.

  2. для каждого значения в resp, соответствующее значение вw - количество испытаний.

...