Lỗi tiêu chuẩn GLM


7

Tôi có một câu hỏi về cách nhận các lỗi tiêu chuẩn của các hệ số trong mô hình GLM của tôi. Tôi có ma trận thông tin cá mà tôi tính bằng tay, nhưng nó không được tính toán. Làm cách nào tôi có thể chia tỷ lệ ma trận thông tin câu cá để tôi nhận được các lỗi tiêu chuẩn tương tự từ hàm GLM?


Bạn có thể cung cấp một ví dụ tái sản xuất? Điều chỉnh mô hình bằng glm () và hiển thị cách bạn có ma trận FI?
atiretoo - phục hồi monica

Tôi đã tính ma trận thông tin câu cá bằng cách sử dụng (XTWX)1 , trong đó W là ma trận trọng số. Khi tôi nhìn vào kết quả của mình, chúng khớp chính xác với những gì tôi nhận được khi tôi xem 'tóm tắt (m1) cov.unscaled . Tuy nhiên, điều này không cung cấp cho tôi các lỗi tiêu chuẩn của từng hệ số. Tôi có phải tính một số tham số tỷ lệ ϕ không? Tham số phân tán cho mô hình của tôi là 1.
T. Nestor

Câu trả lời:


6

Bạn đang ở rất gần! Các lỗi tiêu chuẩn của các hệ số là căn bậc hai của đường chéo của ma trận của bạn, là nghịch đảo của ma trận thông tin Fisher. Đây là một ví dụ.


data <- caret::twoClassSim()
model <- glm(Class~TwoFactor1*TwoFactor2, data = data, family="binomial")
# here are the standard errors we want
SE <- broom::tidy(model)$std.error

X <- model.matrix(model)
p <- fitted(model)
W <- diag(p*(1-p))
# this is the covariance matrix (inverse of Fisher information)
V <- solve(t(X)%*%W%*%X)
all.equal(vcov(model), V)
#> [1] "Mean relative difference: 1.066523e-05"
# close enough

# these are the standard errors: take square root of diagonal 
all.equal(SE, sqrt(diag(V)))
#> [1] "names for current but not for target"  
#> [2] "Mean relative difference: 4.359204e-06"

5

Làm cách nào tôi có thể chia tỷ lệ ma trận thông tin câu cá để tôi nhận được các lỗi tiêu chuẩn tương tự từ hàm GLM?

Thời gian ma trận đồng phương không được tính toán của bạn tham số phân tán như được thực hiện trong summary.glm. Mã liên quan từ summary.glm

if (is.null(dispersion)) 
    dispersion <- if (object$family$family %in% c("poisson", 
        "binomial")) 
        1
    else if (df.r > 0) {
        est.disp <- TRUE
        if (any(object$weights == 0)) 
            warning("observations with zero weight not used for calculating dispersion")
        sum((object$weights * object$residuals^2)[object$weights > 
            0])/df.r
    }
    else {
        est.disp <- TRUE
        NaN
    }
# [other code...]
if (p > 0) {
    p1 <- 1L:p
    Qr <- qr.lm(object)
    coef.p <- object$coefficients[Qr$pivot[p1]]
    covmat.unscaled <- chol2inv(Qr$qr[p1, p1, drop = FALSE])
    dimnames(covmat.unscaled) <- list(names(coef.p), names(coef.p))
    covmat <- dispersion * covmat.unscaled
    # [more code ...]

Các phép chol2inv(Qr$qr[p1, p1, drop = FALSE])tính mà bạn đưa ra nhận xét. Ở đây, là ma trận tam giác trên từ QR decomposition .(RR)1=(XWX)1RQR=WX


câu trả lời của atiretoo chỉ được giữ khi tham số phân tán là một như với phân phối Poisson và Binomial.

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.