Các lựa chọn thay thế cho hồi quy logistic trong R


55

Tôi muốn có nhiều thuật toán thực hiện nhiệm vụ tương tự như hồi quy logistic. Đó là các thuật toán / mô hình có thể đưa ra dự đoán cho phản ứng nhị phân (Y) với một số biến giải thích (X).

Tôi sẽ rất vui nếu sau khi bạn đặt tên cho thuật toán, nếu bạn cũng sẽ chỉ ra cách triển khai nó trong R. Đây là một mã có thể được cập nhật với các mô hình khác:

set.seed(55)
n <- 100
x <- c(rnorm(n), 1+rnorm(n))
y <- c(rep(0,n), rep(1,n))
r <- glm(y~x, family=binomial)
plot(y~x)
abline(lm(y~x), col='red', lty=2)
xx <- seq(min(x), max(x), length=100)
yy <- predict(r, data.frame(x=xx), type='response')
lines(xx, yy, col='blue', lwd=5, lty=2)
title(main='Logistic regression with the "glm" function')

Chúng ta có phải giả định rằng bạn đang xem xét một nhóm dự đoán cố định, tức là bạn quan tâm đến việc dự đoán đáng tin cậy được đưa ra dự đoán , hoặc bạn cũng quan tâm đến một số hình phạt trên ? kXj(j=1k)
chl

Tôi thừa nhận rằng vì lợi ích cá nhân của tôi, hình phạt sẽ không cần thiết và vì lợi ích của kiến ​​thức ở đây tôi sẽ nói cả hai đều là câu trả lời có liên quan :)
Tal Galili

Để tham khảo trong tương lai: bạn có thể đã có thể diễn đạt câu hỏi này theo cách mà chúng tôi đã cho phép nó như một câu hỏi không phải CW. Xem meta.stats.stackexchange.com/questions/290/ từ
Shane

Cảm ơn bạn đã liên kết Shane. Một cuộc thảo luận rất thú vị mà bạn đã mở ở đó. Sau khi đọc câu trả lời của Thomasas, tôi tin rằng đây vẫn phải là một wiki cộng đồng, vì ý định của tôi là tìm kiếm càng nhiều lựa chọn thay thế càng tốt (điều mà tôi nghi ngờ bất kỳ ai cũng có thể cung cấp). Tuy nhiên, một lần nữa, cảm ơn bạn đã hướng dẫn tôi đến chủ đề đó!
Tal Galili

Điều này thực sự không quá rộng để có thể trả lời được - hiện tại nó có 6 câu trả lời (5 câu trả lời). Hơn nữa, câu hỏi được đánh giá cao & rất được ưa chuộng, và là CW. Nó sẽ vẫn mở, IMO.
gung - Phục hồi Monica

Câu trả lời:


28

Phổ biến ngay bây giờ là RandomForest và gbm (được gọi là MART hoặc Gradient Boosting trong máy học văn học), rpart cho các cây đơn giản. Cũng phổ biến là bayesglm, sử dụng MAP với các linh mục để chuẩn hóa.

install.packages(c("randomForest", "gbm", "rpart", "arm"))

library(randomForest)
library(gbm)
library(rpart)
library(arm)

r1 <- randomForest(y~x)
r2 <- gbm(y~x)
r3 <- rpart(y~x)
r4 <- bayesglm(y ~ x, family=binomial)

yy1 <- predict(r1, data.frame(x=xx))
yy2 <- predict(r2, data.frame(x=xx))
yy3 <- predict(r3, data.frame(x=xx))
yy4 <- predict(r4, data.frame(x=xx), type="response")

24

Trên thực tế, điều đó phụ thuộc vào những gì bạn muốn có được. Nếu bạn chỉ thực hiện hồi quy logistic cho các dự đoán, bạn có thể sử dụng bất kỳ phương pháp phân loại được giám sát nào phù hợp với dữ liệu của mình. Một khả năng khác: phân tích phân biệt (lda () và qda () từ gói 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')

Mặt khác, nếu bạn cần khoảng tin cậy xung quanh dự đoán hoặc lỗi tiêu chuẩn trong ước tính của bạn, hầu hết các thuật toán phân loại sẽ không giúp bạn. Bạn có thể sử dụng các mô hình phụ gia tổng hợp (hỗn hợp), trong đó có một số gói có sẵn. Tôi thường sử dụng gói mgcv của Simon Wood. Các mô hình phụ gia tổng quát cho phép linh hoạt hơn so với hồi quy logistic, vì bạn có thể sử dụng các spline để mô hình hóa các dự đoán của mình.

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')

Còn rất nhiều việc phải làm:

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")

...

Tôi muốn giới thiệu cuốn sách của Simon Wood về các mô hình phụ gia tổng quát


14

Tôi đồng ý với Joe và sẽ thêm:

Bất kỳ phương pháp phân loại nào về nguyên tắc có thể được sử dụng, mặc dù nó sẽ phụ thuộc vào dữ liệu / tình huống. Chẳng hạn, bạn cũng có thể sử dụng một SVM, có thể với mô hình C-SVM phổ biến. Đây là một ví dụ từ kernlab bằng cách sử dụng hàm nhân cơ sở xuyên tâm:

library(kernlab)
x <- rbind(matrix(rnorm(120),,2),matrix(rnorm(120,mean=3),,2))
y <- matrix(c(rep(1,60),rep(-1,60)))

svp <- ksvm(x,y,type="C-svc")
plot(svp,data=x)

12

Có khoảng 100 mô hình phân loại và hồi quy có thể huấn luyện thông qua gói caret . Bất kỳ mô hình phân loại nào cũng sẽ là một lựa chọn cho bạn (trái ngược với mô hình hồi quy, đòi hỏi phải có phản hồi liên tục). Ví dụ để đào tạo một khu rừng ngẫu nhiên:

library(caret)
train(response~., data, method="rf")

Xem họa tiết đào tạo mô hình caret đi kèm với bản phân phối để biết danh sách đầy đủ các mô hình có sẵn. Nó được chia thành các mô hình sử dụng kép và phân loại (cả hai mô hình bạn có thể sử dụng) và chỉ hồi quy (mà bạn không thể). caret sẽ tự động đào tạo các tham số cho mô hình bạn đã chọn cho bạn.


7

Naive Bayes là một phương pháp tốt để đào tạo dữ liệu để tìm phản hồi nhị phân.

library(e1071)
fitNB <- naiveBayes(y~x)
predict(fitNB, x)

3

Có hai biến thể của hồi quy logistic chưa được phác thảo. Đầu tiên, hồi quy logistic ước tính xác suất bằng cách sử dụng hàm logistic là phân phối logistic cumulativ (còn được gọi là sigmoid). Bạn cũng có thể ước tính xác suất bằng cách sử dụng các hàm xuất phát từ các bản phân phối khác. Cách phổ biến nhất ngoài hồi quy logistic là hồi quy probit có nguồn gốc từ phân phối chuẩn. Để thảo luận chi tiết hơn giữa sự khác biệt của probit và logit, vui lòng truy cập trang web sau.

Sự khác biệt giữa mô hình logit và probit

set.seed(55)
n <- 100
x <- c(rnorm(n), 1+rnorm(n))
y <- c(rep(0,n), rep(1,n))
r <- glm(y~x, family=binomial(link="probit"))
plot(y~x)
abline(lm(y~x),col='red',lty=2)
xx <- seq(min(x), max(x), length=100)
yy <- predict(r, data.frame(x=xx), type='response')
lines(xx,yy, col='red', lwd=5, lty=2)
title(main='Probit regression with the "glm" function')

Sự thay thế thứ hai chỉ ra một tuần của chức năng hậu cần mà bạn đã thực hiện. Nếu bạn có kích thước mẫu nhỏ và / hoặc thiếu giá trị thì hàm logistic không được khuyến khích. Do đó một hồi quy logistic chính xác là một mô hình tốt hơn. Tỷ lệ cược log của kết quả được mô hình hóa dưới dạng kết hợp tuyến tính của các biến dự đoán.

elrm(formula = y ~ x)

Hơn nữa, có những lựa chọn thay thế khác muốn được đề cập:

  1. Bảng dự phòng hai chiều
  2. Phân tích chức năng phân biệt hai nhóm.
  3. Khách sạn T2.

Nhận xét cuối cùng: Hồi quy logistic giống như một mạng nơ ron nhỏ không có các lớp ẩn và chỉ có một điểm trong lớp cuối cùng. Do đó, bạn có thể sử dụng triển khai các gói mạng thần kinh như nnettrong R.

Biên tập:

Vài tuần sau tôi nhận ra rằng còn có thuật toán WinnowPerceptron . Cả hai đều là phân loại cũng hoạt động để phân loại thành hai nhóm, nhưng cả hai đều không được ủng hộ trong 15 năm qua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.