2012-08-13 16 views
5

Bối cảnh: Multi-mô hình suy luận với glmulti

glmulti là một chức năng R/gói để lựa chọn mô hình tự động cho các mô hình tuyến tính tổng quát xây dựng tất cả các khả năng mô hình tuyến tính tổng quát cho một biến phụ thuộc và một bộ các dự đoán, phù hợp với họ thông qua chức năng cổ điển glm và cho phép sau đó cho suy luận nhiều mô hình (ví dụ, sử dụng trọng lượng mô hình có nguồn gốc từ AICc, BIC). glmulti hoạt động theo lý thuyết cũng với bất kỳ hàm nào khác trả về hệ số, khả năng đăng nhập của mô hình và số tham số miễn phí (và có thể thông tin khác?) Ở cùng định dạng glm.Chức năng/gói nào cho hồi quy tuyến tính mạnh mẽ hoạt động với glmulti (tức là, hoạt động như glm)?

Mục tiêu của tôi: Multi-mô hình suy luận với các lỗi mạnh mẽ

Tôi muốn sử dụng glmulti với mô hình mạnh mẽ của các lỗi của một biến phụ thuộc định lượng để bảo vệ chống lại các tác động ra giá trị ngoại biên.

Ví dụ: tôi có thể giả định rằng các lỗi trong mô hình tuyến tính được phân phối dưới dạng t distribution thay vì phân phối bình thường. Với tham số kurtosis của nó, phân phối t có thể có đuôi nặng và do đó mạnh mẽ hơn với các ngoại lệ (so với phân bố chuẩn).

Tuy nhiên, tôi không cam kết sử dụng phương pháp phân phối t. Tôi hài lòng với bất kỳ phương pháp nào mang lại khả năng đăng nhập và do đó hoạt động với phương pháp tiếp cận đa phương thức trong glmulti. Nhưng điều đó có nghĩa, mà tiếc là tôi không thể sử dụng các mô hình tuyến tính mạnh mẽ nổi tiếng trong R (ví dụ, lmRob từ robust hoặc lmrob từ robustbase) bởi vì họ không hoạt động trong khuôn khổ loga và do đó có thể không làm việc với glmulti.

Vấn đề: Tôi không thể tìm thấy một hàm hồi quy mạnh mẽ làm việc với glmulti

Các chỉ hàm hồi quy tuyến tính mạnh mẽ cho RI thấy rằng hoạt động trong khuôn khổ loga là heavyLm (từ heavy gói); nó mô hình các lỗi với phân phối t. Thật không may, heavyLm không hoạt động với glmulti (ít nhất là không nằm ngoài hộp) vì nó không có phương pháp S3 cho loglik (và có thể cả những thứ khác).

Để minh họa:

library(glmulti) 
library(heavy) 

Sử dụng dữ liệu stackloss

head(stackloss) 

Regular mô hình Gaussian tuyến tính:

summary(glm(stack.loss ~ ., data = stackloss)) 

Multi-mô hình suy luận với glmulti chúng tôi ing GLM 's mặc định chức năng liên kết Gaussian

stackloss.glmulti <- glmulti(stack.loss ~ ., data = stackloss, level=1, crit=bic) 
print(stackloss.glmulti) 
plot(stackloss.glmulti) 

mô hình tuyến tính với t phân phối lỗi (mặc định là df = 4)

summary(heavyLm(stack.loss ~ ., data = stackloss)) 

Multi-mô hình suy luận với glmulti gọi heavyLm như chức năng phù hợp

stackloss.heavyLm.glmulti <- glmulti(stack.loss ~ ., 
data = stackloss, level=1, crit=bic, fitfunction=heavyLm) 

cung cấp các lỗi sau:

Initialization... 
    Error in UseMethod("logLik") : 
    no applicable method for 'logLik' applied to an object of class "heavyLm". 

Nếu tôi xác định các chức năng sau đây,

logLik.heavyLm <- function(x){x$logLik} 

glmulti có thể lấy loga, nhưng sau đó các lỗi sau xảy ra:

Initialization... 
    Error in .jcall(molly, "V", "supplyErrorDF", 
    as.integer(attr(logLik(fitfunc(as.formula(paste(y, : 
    method supplyErrorDF with signature ([I)V not found 

Câu hỏi đặt ra: Những chức năng/gói cho hồi quy tuyến tính mạnh mẽ hoạt động với glmulti (tức là, cư xử như glm)?

Có lẽ là một cách để xác định chức năng hơn nữa để có được heavyLm làm việc với glmulti, nhưng trước khi bắt tay vào cuộc hành trình này, tôi muốn hỏi xem ai

  • biết của một hàm hồi quy tuyến tính mạnh mẽ mà (a) hoạt động theo khung khả năng đăng nhập và (b) hoạt động như glm (và do đó sẽ hoạt động với glmulti ngoài hộp).
  • heavyLm đã hoạt động với glmulti.

Mọi trợ giúp đều được đánh giá cao!

Trả lời

1

Đây là câu trả lời bằng cách sử dụng heavyLm. Mặc dù đây là một câu hỏi tương đối cũ, cùng một vấn đề mà bạn đã đề cập vẫn xảy ra khi sử dụng heavyLm (tức là, thông báo lỗi Error in .jcall(molly, "V", "supplyErrorDF"…).

Vấn đề là glmulti yêu cầu mức độ tự do của mô hình, được chuyển thành thuộc tính của bạn cần cung cấp dưới dạng thuộc tính của giá trị được trả về theo hàm logLik.heavyLm; xem tài liệu cho hàm logLik để biết chi tiết.Hơn nữa, hóa ra bạn cũng cần cung cấp một hàm để trả về số điểm dữ liệu được sử dụng để lắp mô hình, vì tiêu chí thông tin (AIC, BIC,…) cũng phụ thuộc vào giá trị này. Điều này được thực hiện theo hàm nobs.heavyLm trong mã bên dưới.

Đây là mã:

nobs.heavyLm <- function(mdl) mdl$dims[1] # the sample size (number of data points) 

logLik.heavyLm <- function(mdl) { 
    res <- mdl$logLik 
    attr(res, "nobs") <- nobs.heavyLm(mdl) # this is not really needed for 'glmulti', but is included to adhere to the format of 'logLik' 
    attr(res, "df") <- length(mdl$coefficients) + 1 + 1 # I am also considering the scale parameter that is estimated; see mdl$family 
    class(res) <- "logLik" 
    res 
} 

mà khi đặt cùng với mã mà bạn cung cấp, sản xuất các kết quả sau:

Initialization... 
TASK: Exhaustive screening of candidate set. 
Fitting... 
Completed. 

> print(stackloss.glmulti) 
glmulti.analysis 
Method: h/Fitting: glm/IC used: bic 
Level: 1/Marginality: FALSE 
From 8 models: 
Best IC: 117.892471265874 
Best model: 
[1] "stack.loss ~ 1 + Air.Flow + Water.Temp" 
Evidence weight: 0.709174196998897 
Worst IC: 162.083142797858 
2 models within 2 IC units. 
1 models to reach 95% of evidence weight. 

sản xuất do đó 2 mô hình trong ngưỡng 2 đơn vị BIC .

Một nhận xét quan trọng mặc dù: Tôi không chắc chắn rằng biểu thức ở trên cho mức độ tự do là chính xác. Đối với mô hình tuyến tính chuẩn, mức độ tự do sẽ bằng p + 1, trong đó p là số tham số trong mô hình và thông số bổ sung (+ 1) là phương sai "lỗi" (được sử dụng để tính toán khả năng) . Trong hàm logLik.heavyLm ở trên, không rõ liệu người ta cũng nên tính "tham số thang tỷ lệ" được ước tính bằng heavyLm như một mức độ tự do bổ sung và do đó, p + 1 + 1, sẽ là trường hợp nếu khả năng cũng là một hàm của tham số này. Rất tiếc, tôi không thể xác nhận điều này vì tôi không có quyền truy cập vào tham chiếu heavyLm trích dẫn (bài báo của Dempster và cộng sự, 1980). Bởi vì điều này, tôi đang đếm tham số quy mô, do đó cung cấp một ước tính thận trọng (nhiều hơn một chút) về mô hình phức tạp, phạt các mô hình "phức tạp". Sự khác biệt này không đáng kể, ngoại trừ trong trường hợp mẫu nhỏ.

+0

Cảm ơn rất nhiều! – jonlemon

Các vấn đề liên quan