Получить прогнозы от модели clogitLasso ()?

Один Угловой проект - создать одно приложение, только одно. если вы хотите делиться вещами и разбивать свое приложение на части, вам нужны модули, а затем создавайте модули с необходимой архитектурой.

Имея несколько Угловых приложений в конце вашего конвейера, вам нужно будет скомпилировать для производства все эти приложений, а не только один

Рекомендуется использовать модули и ленивые модули загрузки

1
задан Tomka Koliada 30 January 2019 в 21:41
поделиться

1 ответ

Для clogitLasso() нет функции predict(), но я обдумывал это. Вы можете сделать матричное умножение данных на коэффициенты самостоятельно.

Например:

Сначала мы смоделируем некоторые данные. 360 наблюдений, в 180 парах случай / контроль. case кодируется 1/0, а set нумерует 180 пар. Есть два ковариаты: e1 - шум, и x1 связан с результатом, case.

library("clogitLasso")
set.seed(0)
N <- 360
mm <- data.frame(case=rep(c(1, 0), times=N/2))
mm$set <- rep(1:(N/2), each=2)
mm$e1 <- rnorm(n=N, mean=5, sd=10)
mm$x1 <- mm$case*10 + rnorm(n=N, mean=0, sd=3)

Чтобы получить прогнозы от clogitLasso, нам нужно самостоятельно нормализовать ковариаты (среднее = 0, sd = 1), прежде чем вводить данные в модель. (В противном случае clogitLasso переводит коэффициенты обратно в «исходный масштаб», который здесь бесполезен.)

mm[, c("e1", "x1")] <- scale(mm[, c("e1", "x1")], center=TRUE, scale=TRUE)

Затем создайте модель:

model <- clogitLasso(X=as.matrix(mm[, c("e1", "x1")]), y=as.matrix(mm$case), 
    strata=mm$set, standardize=FALSE)

Нам нужно выбрать, какое значение вес штрафа, для которого мы хотим проверить прогнозы - здесь мы выберем 10-е, просто потому что.

И мы умножаем исходные входные данные на коэффициенты («беты»), чтобы попытаться предсказать исходные результаты - значение case:

handMadePredictions <- as.matrix(mm[, c("e1", "x1")]) %*% model$beta[10, ]

Это линейная Предиктор, который нам нужно преобразовать обратно в шкалу вероятностей для прогнозирования:

logistic <- function(logOdds) {
  return(exp(logOdds) / (exp(logOdds) + 1))
}

handMadePredictions <- logistic(handMadePredictions)

Исходные данные - case - представляли собой серию чередующихся единиц и нулей. Мы можем видеть, что эта модель достаточно хорошо предсказывала эти результаты, исходя из исходных данных. Либо проверяя round(handMadePredictions), либо с помощью матрицы путаницы:

table("predicted"=round(handMadePredictions), "Case/control"=mm$case)

         Case/control
predicted   0   1
        0 172  12
        1   8 168

Обратите внимание , что в этом примере с игрушкой нет никаких стратовых эффектов - связь между [ 1116] и case одинаковы, независимо от того, в каком set находятся точки данных. В этой упрощенной ситуации нет необходимости в условной логистической регрессии, обычная логистическая регрессия будет работать просто отлично. Но я не смог получить правдоподобных результатов прогноза из clogitLasso(), когда есть эффекты пласта, что является совершенно другим вопросом.

0
ответ дан eac2222 30 January 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: