Thao tác mô hình hồi quy logistic


12

Tôi muốn hiểu những gì các mã sau đây đang làm. Người đã viết mã không còn hoạt động ở đây và nó gần như hoàn toàn không có giấy tờ. Tôi đã được yêu cầu điều tra nó bởi một người nghĩ rằng " đó là mô hình hồi quy logistic Bayes "

bglm <- function(Y,X) {
    # Y is a vector of binary responses
    # X is a design matrix

    fit <- glm.fit(X,Y, family = binomial(link = logit))
    beta <- coef(fit)
    fs <- summary.glm(fit)
    M <- t(chol(fs$cov.unscaled))
    betastar <- beta + M %*% rnorm(ncol(M))
    p <- 1/(1 + exp(-(X %*% betastar)))
    return(runif(length(p)) <= p)
}

Tôi có thể thấy rằng nó phù hợp với một mô hình logistic, chuyển đổi hệ số Cholseky của ma trận hiệp phương sai ước tính, nhân số này bằng một vectơ rút ra từ và sau đó được thêm vào các ước tính mô hình. Điều này sau đó được xử lý trước bởi ma trận thiết kế, logit nghịch đảo của điều này được thực hiện, so với một vectơ rút ra từ và vectơ nhị phân kết quả được trả về. Nhưng tất cả những điều này có nghĩa là gì?U ( 0 , 1 )N(0,1)U(0,1)


Nó có thể sẽ giúp rất nhiều để biết lĩnh vực này đang được sử dụng trong ..
naught101

2
Về bản chất, hàm tạo dữ liệu từ mô hình (thường xuyên) của dữ liệu của bạn, kết hợp sự không chắc chắn về các tham số thực tế. Nó có thể là một phần của thói quen MCMC Bayes, nhưng cũng có thể được sử dụng trong phân tích công suất dựa trên mô phỏng (nb, phân tích công suất dựa trên dữ liệu trước đó không tính đến sự không chắc chắn thường lạc quan ).
gung - Phục hồi Monica

Không có gì đâu, @PSellaz. Vì không có ai trả lời, tôi sẽ biến nó thành câu trả lời 'chính thức'.
gung - Phục hồi Monica

Câu trả lời:


7

Hàm này làm gì:
Về bản chất, hàm tạo ra dữ liệu phản hồi giả ngẫu nhiên mới (tức là ) từ một mô hình dữ liệu của bạn. Mô hình đang được sử dụng là một mô hình thường xuyên tiêu chuẩn. Theo thông lệ, giả sử rằng dữ liệu * của bạn là các hằng số đã biết - chúng không được lấy mẫu theo bất kỳ cách nào. Những gì tôi thấy là tính năng quan trọng của chức năng này là nó được kết hợp không chắc chắn về các tham số ước tính. XYX

* Lưu ý rằng bạn phải thêm thủ công một vectơ là cột ngoài cùng bên trái của ma trận của bạn trước khi đưa nó vào hàm, trừ khi bạn muốn triệt tiêu chặn (thường không phải là ý kiến ​​hay).X1X

Điểm của chức năng này là gì:
Tôi không thành thật biết. Nó có thể là một phần của thói quen MCMC Bayes, nhưng nó chỉ là một phần - bạn sẽ cần nhiều mã hơn ở nơi khác để thực sự phân tích Bayes. Tôi không cảm thấy đủ chuyên gia về các phương pháp Bayes để nhận xét dứt khoát về điều này, nhưng chức năng này không 'cảm thấy' đối với tôi như những gì thường được sử dụng.

Nó cũng có thể đã được sử dụng trong các phân tích sức mạnh dựa trên mô phỏng. (Xem câu trả lời của tôi ở đây: Mô phỏng các logistic phân tích năng lượng hồi quy - thí nghiệm thiết kế , cung cấp thông tin về loại điều.) Nó là đáng chú ý sức mạnh mà các phân tích dựa trên dữ liệu trước đó không có sự không chắc chắn của các ước lượng tham số vào tài khoản thường lạc quan. (Tôi thảo luận về điểm đó ở đây: Kích thước hiệu ứng mong muốn so với kích thước hiệu ứng mong đợi .)

Nếu bạn muốn sử dụng chức năng này:
Như @whuber ghi chú trong các bình luận, chức năng này sẽ không hiệu quả. Nếu bạn muốn sử dụng điều này để làm (ví dụ) phân tích sức mạnh, tôi sẽ chia chức năng thành hai chức năng mới. Đầu tiên sẽ đọc dữ liệu của bạn và đưa ra các tham số và độ không đảm bảo. Hàm mới thứ hai sẽ tạo ra dữ liệu giả mới . Sau đây là một ví dụ (mặc dù có thể cải thiện thêm): Y

simulationParameters <- function(Y,X) {
                        # Y is a vector of binary responses
                        # X is a design matrix, you don't have to add a vector of 1's 
                        #   for the intercept

                        X    <- cbind(1, X)  # this adds the intercept for you
                        fit  <- glm.fit(X,Y, family = binomial(link = logit))
                        beta <- coef(fit)
                        fs   <- summary.glm(fit)
                        M    <- t(chol(fs$cov.unscaled))

                        return(list(betas=beta, uncertainties=M))
}

simulateY <- function(X, betas, uncertainties, ncolM, N){

             # X      <- cbind(1, X)  # it will be slightly faster if you input w/ 1's
             # ncolM  <- ncol(uncertainties) # faster if you input this
             betastar <- betas + uncertainties %*% rnorm(ncolM)
             p        <- 1/(1 + exp(-(X %*% betastar)))

             return(rbinom(N, size=1, prob=p))
}

4
+1. Đối với tôi, phần kỳ lạ là sự phù hợp và dự đoán mô phỏng đều được thực hiện trong cơ thể của một chức năng duy nhất. Thông thường, các hoạt động như thế này sẽ được thực hiện bằng cách tính toán trước sự phù hợp (trở lại betaM) và sau đó tạo ra nhiều mô phỏng iid dựa trên sự phù hợp này. (Đặt chúng vào cùng một chức năng sẽ không cần thiết phải lặp lại khớp nối mỗi lần, làm chậm rất nhiều tính toán.) Từ những mô phỏng này, người ta có thể phục hồi các khoảng dự đoán ( xen kẽ ) cho các kết hợp phi tuyến hoặc kết hợp rất phức tạp.
whuber

@whuber, tôi đồng ý. Tôi đã thực sự nghĩ đến việc đề xuất rằng hàm này được chia thành 2 hàm khác nhau trước khi được sử dụng để mô phỏng, nhưng có vẻ như đó không phải là một phần của câu hỏi.
gung - Phục hồi Monica
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.