Ước tính điểm dừng trong mô hình tuyến tính thanh / piecewise bị hỏng với các hiệu ứng ngẫu nhiên trong R [bao gồm mã và đầu ra]


14

Ai đó có thể vui lòng cho tôi biết làm thế nào để R ước tính điểm dừng trong mô hình tuyến tính từng phần (như một tham số cố định hoặc ngẫu nhiên), khi tôi cũng cần ước tính các hiệu ứng ngẫu nhiên khác không?

Tôi đã bao gồm một ví dụ đồ chơi bên dưới phù hợp với hồi quy gậy khúc côn / gậy gãy với phương sai độ dốc ngẫu nhiên và phương sai đánh chặn y ngẫu nhiên cho điểm dừng là 4. Tôi muốn ước tính điểm phá vỡ thay vì chỉ định điểm dừng. Nó có thể là một hiệu ứng ngẫu nhiên (tốt hơn) hoặc một hiệu ứng cố định.

library(lme4)
str(sleepstudy)

#Basis functions
bp = 4
b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

#Mixed effects model with break point = 4
(mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy))

#Plot with break point = 4
xyplot(
        Reaction ~ Days | Subject, sleepstudy, aspect = "xy",
        layout = c(6,3), type = c("g", "p", "r"),
        xlab = "Days of sleep deprivation",
        ylab = "Average reaction time (ms)",
        panel = function(x,y) {
        panel.points(x,y)
        panel.lmline(x,y)
        pred <- predict(lm(y ~ b1(x, bp) + b2(x, bp)), newdata = data.frame(x = 0:9))
            panel.lines(0:9, pred, lwd=1, lty=2, col="red")
        }
    )

Đầu ra:

Linear mixed model fit by REML 
Formula: Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject) 
   Data: sleepstudy 
  AIC  BIC logLik deviance REMLdev
 1751 1783 -865.6     1744    1731
Random effects:
 Groups   Name         Variance Std.Dev. Corr          
 Subject  (Intercept)  1709.489 41.3460                
          b1(Days, bp)   90.238  9.4994  -0.797        
          b2(Days, bp)   59.348  7.7038   0.118 -0.008 
 Residual               563.030 23.7283                
Number of obs: 180, groups: Subject, 18

Fixed effects:
             Estimate Std. Error t value
(Intercept)   289.725     10.350  27.994
b1(Days, bp)   -8.781      2.721  -3.227
b2(Days, bp)   11.710      2.184   5.362

Correlation of Fixed Effects:
            (Intr) b1(D,b
b1(Days,bp) -0.761       
b2(Days,bp) -0.054  0.181

Hồi quy thanh gãy phù hợp với từng cá nhân


1
Bất kỳ cách nào để làm cho bp một hiệu ứng ngẫu nhiên?
djhocking

Câu trả lời:


20

Một cách tiếp cận khác là bọc cuộc gọi để lmer trong một hàm được truyền điểm dừng dưới dạng tham số, sau đó giảm thiểu độ lệch của mô hình được trang bị có điều kiện dựa trên điểm dừng bằng cách sử dụng tối ưu hóa. Điều này tối đa hóa khả năng nhật ký hồ sơ cho điểm dừng và, nói chung (nghĩa là không chỉ đối với sự cố này) nếu phần bên trong hàm của trình bao bọc (trong trường hợp này) tìm thấy ước tính khả năng tối đa có điều kiện dựa trên tham số được truyền cho nó, toàn bộ thủ tục tìm thấy ước tính khả năng tối đa chung cho tất cả các tham số.

library(lme4)
str(sleepstudy)

#Basis functions
bp = 4
b1 <- function(x, bp) ifelse(x < bp, bp - x, 0)
b2 <- function(x, bp) ifelse(x < bp, 0, x - bp)

#Wrapper for Mixed effects model with variable break point
foo <- function(bp)
{
  mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy)
  deviance(mod)
}

search.range <- c(min(sleepstudy$Days)+0.5,max(sleepstudy$Days)-0.5)
foo.opt <- optimize(foo, interval = search.range)
bp <- foo.opt$minimum
bp
[1] 6.071932
mod <- lmer(Reaction ~ b1(Days, bp) + b2(Days, bp) + (b1(Days, bp) + b2(Days, bp) | Subject), data = sleepstudy)

Để có được khoảng tin cậy cho điểm dừng, bạn có thể sử dụng khả năng hồ sơ . Thêm, ví dụ, qchisq(0.95,1)vào độ lệch tối thiểu (cho khoảng tin cậy 95%) sau đó tìm kiếm các điểm foo(x)bằng với giá trị được tính:

foo.root <- function(bp, tgt)
{
  foo(bp) - tgt
}
tgt <- foo.opt$objective + qchisq(0.95,1)
lb95 <- uniroot(foo.root, lower=search.range[1], upper=bp, tgt=tgt)
ub95 <- uniroot(foo.root, lower=bp, upper=search.range[2], tgt=tgt)
lb95$root
[1] 5.754051
ub95$root
[1] 6.923529

Hơi bất đối xứng, nhưng độ chính xác không tồi cho vấn đề đồ chơi này. Một cách khác là bootstrap thủ tục ước tính, nếu bạn có đủ dữ liệu để bootstrap đáng tin cậy.


Cảm ơn bạn - điều đó rất hữu ích. Là kỹ thuật này được gọi là thủ tục ước tính hai giai đoạn, hay nó có một tên tiêu chuẩn mà tôi có thể tham khảo / tra cứu?
khóa

Đó là khả năng tối đa, hoặc sẽ là nếu lmer tối đa hóa khả năng (tôi nghĩ mặc định thực sự là REML, bạn cần truyền tham số REML = FALSE để có được ước tính ML). chỉ ước tính theo cách lồng nhau chứ không phải tất cả cùng một lúc. Tôi đã thêm một số làm rõ ở phía trước của câu trả lời.
jbowman

Tôi đã có một số vấn đề tối ưu hóa và các TCTD rộng khi đảo ngược khả năng hồ sơ với dữ liệu thực của tôi, nhưng đã thu hẹp các CIs bootstrap trong triển khai của tôi. Bạn đã hình dung ra một bootstrap không theo mẫu với việc lấy mẫu bằng thay thế trên các vectơ dữ liệu của đối tượng chưa? Tức là, đối với dữ liệu buồn ngủ, điều này sẽ đòi hỏi phải lấy mẫu bằng cách thay thế từ 18 vectơ (chủ đề) của 10 điểm dữ liệu, mà không thực hiện bất kỳ thay đổi nào trong vectơ dữ liệu của đối tượng.
khóa

Vâng, tôi đã hình dung một bootstrap không theo tỷ lệ như bạn mô tả, nhưng một phần đó là vì tôi không biết nhiều về các kỹ thuật bootstrap tiên tiến có thể (hoặc có thể) không áp dụng được. Các CIs và bootstrap dựa trên khả năng hồ sơ đều chính xác về mặt triệu chứng, nhưng cũng có thể là bootstrap tốt hơn đáng kể cho mẫu của bạn.
jbowman

5

Giải pháp được đề xuất bởi jbowman là rất tốt, chỉ cần thêm một vài nhận xét lý thuyết:

  • Do sự gián đoạn của chức năng chỉ báo được sử dụng, khả năng hồ sơ có thể rất thất thường, với nhiều cực tiểu cục bộ, do đó, tối ưu hóa thông thường có thể không hoạt động. Giải pháp thông thường cho các "mô hình ngưỡng" như vậy là sử dụng thay vì tìm kiếm lưới rườm rà hơn, đánh giá độ lệch tại mỗi ngày điểm dừng / ngưỡng nhận biết có thể (và không phải ở các giá trị ở giữa, như được thực hiện trong mã). Xem mã ở phía dưới.

  • Trong mô hình phi tiêu chuẩn này, nơi ước tính điểm dừng, độ lệch thường không có phân phối chuẩn. Thủ tục phức tạp hơn thường được sử dụng. Xem tài liệu tham khảo về Hansen (2000) dưới đây.

  • Bootstrap không phải lúc nào cũng nhất quán trong vấn đề này, xem Yu (sắp tới) bên dưới.

  • Cuối cùng, tôi không rõ lý do tại sao bạn chuyển đổi dữ liệu bằng cách tập trung lại xung quanh Ngày (tức là bp - x thay vì chỉ x). Tôi thấy hai vấn đề:

    1. Với quy trình này, bạn tạo các ngày nhân tạo như 6.1 ngày, 4.1, v.v. Tôi không chắc chắn làm thế nào để diễn giải kết quả của 6.07 chẳng hạn, vì bạn chỉ quan sát các giá trị cho ngày 6 và ngày 7? (trong mô hình điểm dừng tiêu chuẩn, mọi giá trị của ngưỡng giữa 6 và 7 sẽ cung cấp cho bạn cùng một hệ số / độ lệch)
    2. b1 và b2 có nghĩa ngược lại, vì trong b1 ngày đang giảm, trong khi tăng cho b2? Vì vậy, bài kiểm tra không chính thức không có điểm dừng là b1! = - b2

Tài liệu tham khảo tiêu chuẩn cho điều này là:

  • OLS tiêu chuẩn: Hansen (2000) Ước tính chia tách và ngưỡng ngưỡng, Kinh tế lượng, Tập. 68, số 3. (tháng 5 năm 2000), trang 575-603.
  • Các mô hình kỳ lạ hơn: Lee, Seo, Shin (2011) Thử nghiệm hiệu ứng ngưỡng trong mô hình hồi quy, Tạp chí của Hiệp hội Thống kê Hoa Kỳ (Lý thuyết và Phương pháp) (2011), 106, 220-231
  • Ping Yu (sắp xuất bản) Bootstrap trong ngưỡng hồi quy ", Lý thuyết kinh tế lượng.

Mã số:

# Using grid search over existing values:
search.grid <- sort(unique(subset(sleepstudy, Days > search.range[1] &
Days<search.range[2], "Days", drop=TRUE)))

res <- unlist(lapply(as.list(search.grid), foo))

plot(search.grid, res, type="l")
bp_grid <- search.grid[which.min(res)]

0

Bạn có thể thử một mô hình MARS . Tuy nhiên, tôi không chắc làm thế nào để chỉ định hiệu ứng ngẫu nhiên. earth(Reaction~Days+Subject, sleepstudy)


1
Cảm ơn - Tôi đã duyệt qua tài liệu gói nhưng dường như nó không hỗ trợ các hiệu ứng ngẫu nhiên.
khóa

0

Đây là một bài báo đề xuất một hiệu ứng hỗn hợp MARS. Như @lockedoff đã đề cập, tôi không thấy bất kỳ triển khai nào giống nhau trong bất kỳ gói nào.

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.