На самом деле, это зависит от того, что вы хотите получить. Если вы выполняете логистическую регрессию только для прогнозов, вы можете использовать любой контролируемый метод классификации, подходящий для ваших данных. Другая возможность: дискриминантный анализ (lda () и qda () из пакета MASS)
r <- lda(y~x) # use qda() for quadratic discriminant analysis
xx <- seq(min(x), max(x), length=100)
pred <- predict(r, data.frame(x=xx), type='response')
yy <- pred$posterior[,2]
color <- c("red","blue")
plot(y~x,pch=19,col=color[pred$class])
abline(lm(y~x),col='red',lty=2)
lines(xx,yy, col='blue', lwd=5, lty=2)
title(main='lda implementation')
С другой стороны, если вам нужны доверительные интервалы вокруг ваших прогнозов или стандартных ошибок в ваших оценках, большинство алгоритмов классификации вам не помогут. Вы можете использовать обобщенные аддитивные (смешанные) модели, для которых доступно несколько пакетов. Я часто использую пакет mgcv Саймона Вуда. Обобщенные аддитивные модели обеспечивают большую гибкость, чем логистическая регрессия, поскольку вы можете использовать сплайны для моделирования ваших предикторов.
set.seed(55)
require(mgcv)
n <- 100
x1 <- c(rnorm(n), 1+rnorm(n))
x2 <- sqrt(c(rnorm(n,4),rnorm(n,6)))
y <- c(rep(0,n), rep(1,n))
r <- gam(y~s(x1)+s(x2),family=binomial)
xx <- seq(min(x1), max(x1), length=100)
xxx <- seq(min(x2), max(x2), length=100)
yy <- predict(r, data.frame(x1=xx,x2=xxx), type='response')
color=c("red","blue")
clustering <- ifelse(r$fitted.values < 0.5,1,2)
plot(y~x1,pch=19,col=color[clustering])
abline(lm(y~x1),col='red',lty=2)
lines(xx,yy, col='blue', lwd=5, lty=2)
title(main='gam implementation')
Есть еще много чего сделать:
op <- par(mfrow=c(2,1))
plot(r,all.terms=T)
par(op)
summary(r)
anova(r)
r2 <- gam(y~s(x1),family=binomial)
anova(r,r2,test="Chisq")
...
Я бы порекомендовал книгу Саймона Вуда о обобщенных аддитивных моделях