Làm cách nào để bao gồm một thuật ngữ tương tác trong GAM?


24

Đoạn mã sau đánh giá sự giống nhau giữa hai chuỗi thời gian:

set.seed(10)
RandData <- rnorm(8760*2)
America <- rep(c('NewYork','Miami'),each=8760)

Date = seq(from=as.POSIXct("1991-01-01 00:00"), 
           to=as.POSIXct("1991-12-31 23:00"), length=8760)

DatNew <- data.frame(Loc = America,
                     Doy = as.numeric(format(Date,format = "%j")),
                     Tod = as.numeric(format(Date,format = "%H")),
                     Temp = RandData,
                     DecTime = rep(seq(1, length(RandData)/2) / (length(RandData)/2),
                                   2))
require(mgcv)
mod1 <- gam(Temp ~ Loc + s(Doy) + s(Doy,by = Loc) +
  s(Tod) + s(Tod,by = Loc),data = DatNew, method = "ML")

Ở đây, gamđược sử dụng để đánh giá nhiệt độ tại New York và Miami khác với nhiệt độ trung bình (của cả hai địa điểm) vào các thời điểm khác nhau trong ngày. Vấn đề mà bây giờ tôi gặp phải là tôi cần bao gồm một thuật ngữ tương tác cho thấy nhiệt độ của từng địa điểm thay đổi như thế nào trong ngày cho các ngày khác nhau trong năm. Cuối cùng tôi hy vọng sẽ hiển thị tất cả thông tin này trên một biểu đồ (cho mỗi vị trí). Vì vậy, đối với Miami, tôi hy vọng sẽ có một biểu đồ cho thấy nhiệt độ thay đổi như thế nào so với giá trị trung bình trong các thời điểm khác nhau trong ngày và các thời điểm khác nhau trong năm (lô 3d?)


2
Bạn có thể tìm thấy câu trả lời cho câu hỏi này stats.stackexchange.com/questions/18937/ .
jbowman

Câu trả lời:


18

"A" trong "gam" là viết tắt của "phụ gia" có nghĩa là không có tương tác, vì vậy nếu bạn phù hợp với các tương tác, bạn thực sự không còn phù hợp với mô hình trò chơi nữa.

Điều đó nói rằng, có nhiều cách để có được một số tương tác như các thuật ngữ trong các thuật ngữ phụ gia trong một trò chơi, bạn đã sử dụng một trong những điều đó bằng cách sử dụng byđối số để s. Bạn có thể thử mở rộng điều này để có đối số bylà một ma trận có hàm (sin, cos) của doy hoặc tod. Bạn cũng có thể điều chỉnh các spline làm mịn trong một mô hình tuyến tính thông thường cho phép các tương tác (điều này không mang lại sự phản hồi mà gam thực hiện, nhưng vẫn có thể hữu ích).

Bạn cũng có thể xem hồi quy theo đuổi phép chiếu như một công cụ phù hợp khác. Các mô hình tham số hoặc nhiều tham số hơn (với sin và / hoặc cos) cũng có thể hữu ích.

Một phần của quyết định sử dụng (các) công cụ nào là câu hỏi mà bạn đang cố gắng trả lời. Bạn chỉ đang cố gắng tìm một mô hình để dự đoán ngày và thời gian trong tương lai? bạn đang thử kiểm tra xem liệu các yếu tố dự đoán cụ thể có ý nghĩa trong mô hình không? bạn đang cố gắng để hiểu hình dạng của mối quan hệ giữa một người dự đoán và kết quả? Thứ gì khác?


3
Giả sử bạn có hai yếu tố dự đoán - không phải là vẫn là một trò chơi? Điều này có thể được coi là một "tương tác" trong một số ý nghĩa. Ngoài ra, tôi nghĩ rằng gói cho phép bạn phù hợp với các mô hình như (mà tôi nghĩ là những gì đối số đang làm). Có phải đó vẫn là một trò chơi? y = f 1 ( x 1 ) + f 2 ( x 2 ) + f 3 ( x 1 x 2 ) + ε y = f 1 ( x 1 ) + f 2 ( x 2 ) + f 3 ( x 1 ) x 1 ) x 2 + f 4 ( x 2x1,x2
y= =f1(x1)+f2(x2)+f3(x1x2)+ε
gam
y= =f1(x1)+f2(x2)+f3(x1)x2+f4(x2)x1+ε
by
Macro

1
@Macro, Nó phụ thuộc vào việc bạn có muốn chẻ sợi tóc hay không (về mặt kỹ thuật những gì bạn viết có thể là do bạn không thực sự sử dụng phần g).
Greg Snow

2
@Macro, tôi chắc chắn đã nói nhiều hơn về chủ đề này, nhưng hãy xem trang 4 về GAM của bài viết này của Venable, Exegeses trên Mô hình tuyến tính . Không rõ ràng chính xác làm thế nào đồng thời các hiệu ứng chính và hiệu ứng tương tác không phụ gia được xác định.
Andy W

Rất cám ơn ý kiến ​​của bạn. Mục đích chính của tôi ở đây là không dự đoán các giá trị trong tương lai mà chỉ đơn giản là xem mỗi chuỗi thời gian thay đổi như thế nào từ giá trị trung bình của cả hai chuỗi. Ví dụ: kết quả của mod1 cho thấy chuỗi thời gian tại mỗi địa điểm khác nhau như thế nào trước tiên theo thang thời gian của ngày trong năm (Doy) và sau đó là thời gian trong ngày (Tod). Từ đó, tôi muốn xem mỗi chuỗi thay đổi như thế nào tại một chức năng của Doy và Tod mà tôi mong đợi chuỗi thời gian sẽ khác nhau rất nhiều trong giai đoạn mùa hè.
KatyB

2
@AndyW Điều quan trọng cần lưu ý là GAM đã đi một chặng đường dài kể từ khi Venable bình luận về họ - những phát triển trong thập kỷ trước hoặc lâu hơn với các spline bị phạt Sensu Simon Wood (như được thực hiện trong mgcv ) và các vấn đề điều trị đầy đủ của Bayes lựa chọn độ mịn, tương tác và làm thế nào để phù hợp với chúng (sản phẩm tenxơ của các cơ sở cận biên là một cách tiếp cận) trong khung mô hình phụ gia. Tôi tin tưởng một cách hợp lý sự phản đối của Venable & Cox đối với GAM như được nêu trong Exegeses của người tạo mẫu phải được giải quyết ở mức độ lớn bởi những phát triển gần đây trong lý thuyết GAM.
Phục hồi Monica - G. Simpson

25

Đối với hai biến liên tục sau đó bạn có thể thực hiện những gì bạn muốn (cho dù đây có phải là tương tác hay không, tôi sẽ để người khác thảo luận theo nhận xét cho Câu trả lời của @ Greg) bằng cách sử dụng:

mod1 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1) +
                         te(Tod, Doy, by = Loc, bs = rep("cc",2)),
            data = DatNew, method = "ML")

Mô hình đơn giản hơn nên được lồng trong mô hình phức tạp hơn ở trên. Mô hình đơn giản hơn đó là:

mod0 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1),
            data = DatNew, method = "ML")

Lưu ý hai điều ở đây:

  1. Loại cơ sở cho mỗi mượt mà hơn được nêu. Trong trường hợp này, chúng tôi hy vọng rằng không có sự gián đoạn trong Temp giữa 23:59 và 00:00 cho Todgiữa Doy == 1Doy == 365.25. Do đó splines khối tuần hoàn là thích hợp, được chỉ ra ở đây thông qua bs = "cc".
  2. Kích thước cơ sở được nêu rõ ràng ( k = 5). Điều này phù hợp với kích thước cơ sở mặc định cho mỗi mịn trong một te()thuật ngữ.

Các tính năng này cùng nhau đảm bảo rằng mô hình đơn giản hơn thực sự được lồng trong mô hình phức tạp hơn.

Để biết thêm xem ?gam.modelstrong mgcv .


Liên quan đến điểm thứ 2 của bạn - ngoài đặc điểm kỹ thuật của k, người ta cũng nên sửa số lượng nút thắt (ví dụ fx=TRUE). Nếu không, mô hình kết quả hiển thị khác nhau edfcho mỗi thuật ngữ.
Marc trong hộp

Tôi nên cập nhật câu trả lời này một chút về một số chức năng mới trong gói mgcv về mặt spline cho các cơ sở cận biên. Điều đó nói rằng, tôi không đồng ý rằng bạn cần sửa chữa mức độ tự do cho spline. Điều quan trọng là đảm bảo rằng các cơ sở cho các mô hình được lồng một cách thích hợp. Sau đó, có thể có sự khác biệt giữa các mô hình bằng cách đặt một số hệ số cho các hàm cơ bản về 0, giống như xảy ra trong một mô hình tuyến tính với các số hạng không phải là spline.
Phục hồi Monica - G. Simpson

3
Hy vọng ai đó vẫn đang xem chủ đề này và có thể trả lời. Trong các mô hình này, tại sao bạn phải chỉ định cả hai s(Doy...)s(Doy, by =Loc...)? Tôi nghĩ rằng cái đầu tiên sẽ được lồng vào cái sau và do đó không cần thiết để chỉ định?
ego_

3
Không, mịn đầu tiên là chức năng toàn cầu và trơn tru đại diện cho sự khác biệt cụ thể theo trang web giữa nó và trơn tru toàn cầu. Bằng cách làm mịn thực sự cần m = 1thêm vào họ để đưa hình phạt vào đạo hàm đầu tiên cho sự khác biệt mịn.
Phục hồi Monica - G. Simpson

2
@JoshuaRosenberg Nếu bạn muốn nói te(), nó phụ thuộc vào những gì bạn đang đưa vào sản phẩm tenor ? Các tương tác được mô tả ở đây là các tương tác trơn tru theo yếu tố, nhưng te()sẽ ngụ ý hai hoặc nhiều biến liên tục. Nếu bạn muốn các thuật ngữ toàn cầu và độ lệch cụ thể theo chủ đề, thì có, te(DoY, Year, by = Loc, m = 1)có thể được sử dụng cùng với te(DoY, Year), mặc dù có nhiều cách khác để đạt được những điều tương tự bằng cách sử dụng tương tác ngẫu nhiên theo yếu tố giống như hiệu ứng ngẫu nhiên và te()các thuật ngữ có chứa một hiệu ứng ngẫu nhiên.
Phục hồi Monica - G. Simpson
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.