实际上,这取决于您想要获得什么。如果仅对预测执行逻辑回归,则可以使用适合您数据的任何监督分类方法。另一种可能性:判别分析(来自软件包MASS的lda()和qda())
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')
另一方面,如果您需要预测的置信区间或估计的标准误,则大多数分类算法都无法为您提供帮助。您可以使用通用的加性(混合)模型,该模型提供了许多软件包。我经常使用Simon Wood的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")
...
我会推荐西蒙·伍德(Simon Wood)关于广义加法模型的书