2013-06-26 27 views
67

Tôi đang sử dụng lmer() trong gói lme4 để ước tính các mô hình hiệu ứng hỗn hợp. Điều này hoạt động tốt, nhưng bây giờ tôi muốn chạy quá trình ước lượng cho một số lần lặp cố định, sau đó tiếp tục quá trình bằng cách xác định các giá trị bắt đầu, như được tính toán bởi quá trình ước tính cuối cùng.Khởi động lại ước tính mô hình hiệu ứng hỗn hợp với các giá trị ước tính trước đây

Theo sự giúp đỡ cho ?lmer này là có thể, bằng cách thiết lập các đối số:

  • start - đó là những giá trị khởi đầu mới, và theo sự giúp đỡ ai có thể trích xuất các giá trị trong khe ST từ một trang bị mô hình và sử dụng các, tức là sử dụng [email protected]
  • maxiter - cung cấp như một đối số được ghi tên vào control

vì vậy, ví dụ, giả sử tôi muốn để phù hợp với một lme sử dụng dữ liệu iris, người ta có thể thử điều này:

library(lme4) 

# Fit model with limited number of iterations 

frm <- "Sepal.Length ~ Sepal.Width | Species" 

x <- lmer(frm, data=iris, 
      verbose=TRUE, control=list(maxIter=1), model=FALSE) 

# Capture starting values for next set of iterations 
start <- list([email protected]) 

# Update model 
twoStep <- lmer(frm, data=iris, 
      verbose=TRUE, control=list(maxIter=100), model=TRUE, 
      start=start) 

này hoạt động. Hãy xem đầu ra, trong đó cột đầu tiên là REML, nghĩa là khả năng tối đa của hiệu ứng ngẫu nhiên. Chú ý đặc biệt là các REML trong mô hình 2 bắt đầu nơi mô hình 1 chấm dứt:

> x <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=1), model=FALSE) 
    0:  264.60572: 0.230940 0.0747853 0.00000 
    1:  204.22878: 0.518239 1.01025 0.205835 
    1:  204.22878: 0.518239 1.01025 0.205835 

> # Capture starting values for next set of iterations 
> start <- list([email protected]) 

> # Update model 
> twoStep <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=100), model=TRUE, 
+   start=start) 
    0:  204.22878: 0.518239 1.01025 0.205835 
    1:  201.51667: 0.610272 2.00277 0.286049 
    2:  201.46706: 0.849203 1.94906 0.358809 
    3:  201.44614: 0.932371 1.88581 0.482423 
    4:  201.39421: 1.00909 1.71078 0.871824 
    5:  201.36543: 1.00643 1.60453 1.01663 
    6:  201.31066: 1.00208 1.35520 1.27524 
    7:  201.28458: 1.08227 1.22335 1.35147 
    8:  201.24330: 1.50333 0.679759 1.31698 
    9:  201.11881: 1.95760 0.329767 0.936047 

Tuy nhiên, khi tôi có một giá trị khác nhau của maxIters này không còn hoạt động:

x <- lmer(frm, data=iris, 
      verbose=TRUE, control=list(maxIter=3), model=FALSE) 
start <- list([email protected]) 
twoStep <- lmer(frm, data=iris, 
       verbose=TRUE, control=list(maxIter=100), model=TRUE, 
       start=start) 

thông báo rằng khởi động lại giá trị REML tại 264, tức là phần đầu:

> x <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=3), model=FALSE) 
    0:  264.60572: 0.230940 0.0747853 0.00000 
    1:  204.22878: 0.518238 1.01025 0.205835 
    2:  201.94075: 0.00000 1.51757 -1.18259 
    3:  201.71473: 0.00000 1.69036 -1.89803 
    3:  201.71473: 0.00000 1.69036 -1.89803 

> # Capture starting values for next set of iterations 
> start <- list([email protected]) 

> # Update model 
> twoStep <- lmer(frm, data=iris, 
+   verbose=TRUE, control=list(maxIter=100), model=TRUE, 
+   start=start) 
    0:  264.60572: 0.230940 0.0747853 0.00000 
    1:  204.22878: 0.518238 1.01025 0.205835 
    2:  201.94075: 0.00000 1.51757 -1.18259 
    3:  201.71473: 0.00000 1.69036 -1.89803 
    4:  201.64641: 0.00000 1.82159 -2.44144 
    5:  201.63698: 0.00000 1.88282 -2.69497 
    6:  201.63649: 0.00000 1.89924 -2.76298 
    7:  201.63649: 4.22291e-08 1.90086 -2.76969 
    8:  201.63649: 4.22291e-08 1.90086 -2.76969 

Câu hỏi: Làm thế nào tôi có thể khởi động lại đáng tin cậy lmer() với các giá trị bắt đầu thu được từ một mô hình được trang bị trước đó?


thông tin Session:

packageVersion("lme4") 
[1] ‘0.999999.2’ 
+1

Điều này rất có thể là lỗi; chức năng 'start' của' lme4' chưa được thực hiện rất kỹ lưỡng, vì vậy tôi chắc chắn có rất nhiều vấn đề như thế này. Làm thế nào mạnh là nhu cầu của bạn để sử dụng ổn định chứ không phải là phiên bản phát triển? Tôi sẽ xem xét điều này, nhưng chúng tôi hy vọng sẽ làm hầu hết việc gỡ lỗi của chúng tôi trên phiên bản ổn định ... –

+0

@BenBolker Tôi có thể sử dụng mã thử nghiệm hoặc dev, vì tôi chỉ đang chạy một số thử nghiệm vào lúc này. Tôi có thể giúp, nếu bạn cho tôi biết nơi tìm nhánh dev. – Andrie

+0

trên github: 'library (devtools); install_github ("lme4", user = "lme4") '. Nó dễ dàng hơn trong phiên bản này để trích xuất các chức năng deviance và sử dụng nó trong tối ưu hóa của riêng bạn, mà bạn có thể thích nếu bạn muốn kiểm soát nhiều hơn nữa. Ngoài ra, hãy thử thử nghiệm 'bắt đầu' và cho tôi biết tại https://github.com/lme4/lme4/issues nếu bạn tìm thấy một cái gì đó không hoạt động ... –

Trả lời

3

Đây là một lỗi xác nhận trong lme4 và theo ý kiến ​​

Tôi đã đăng một vấn đề tại github.com/lme4/lme4/issues/55 - Andrie Jul 2 '13 at 15:42

Điều này nên được sửa ngay bây giờ cho lmer (mặc dù không phải là cho glmer, mà là hơi tr ickier). - Ben Bolker Jul 14

Điều đó đã trở lại khi phiên bản là < 0.99999911-6; lme4 on CRAN đã có phiên bản> 1.0-4 kể từ ngày 21 tháng 9 năm 2013.

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