Lắp hệ số DLM thay đổi theo thời gian


9

Tôi muốn điều chỉnh DLM với các hệ số thay đổi theo thời gian, tức là mở rộng cho hồi quy tuyến tính thông thường,

yt= =θ1+θ2x2 .

Tôi có một công cụ dự đoán ( ) và một biến trả lời ( ), sản lượng đánh bắt cá hàng năm và hàng hải nội địa tương ứng từ năm 1950 - 2011. Tôi muốn mô hình hồi quy DLM tuân theo,x2yt

yt= =θt,1+θt,2xt

trong đó phương trình tiến hóa hệ thống là

θt= =Gtθt-1

từ trang 43 của Mô hình tuyến tính động với R của Petris et al.

Một số mã hóa ở đây,

fishdata <- read.csv("http://dl.dropbox.com/s/4w0utkqdhqribl4/fishdata.csv", header=T)
x <- fishdata$marinefao
    y <- fishdata$inlandfao

lmodel <- lm(y ~ x)
summary(lmodel)
plot(x, y)
abline(lmodel)

Rõ ràng các hệ số thay đổi theo thời gian của mô hình hồi quy phù hợp hơn ở đây. Tôi làm theo ví dụ của anh ấy từ trang 121 - 125 và muốn áp dụng điều này vào dữ liệu của riêng tôi. Đây là mã từ ví dụ

############ PAGE 123
require(dlm)

capm <- read.table("http://shazam.econ.ubc.ca/intro/P.txt", header=T)
capm.ts <- ts(capm, start = c(1978, 1), frequency = 12)
colnames(capm)
plot(capm.ts)
IBM <- capm.ts[, "IBM"]  - capm.ts[, "RKFREE"]
x <- capm.ts[, "MARKET"] - capm.ts[, "RKFREE"]
x
plot(x)
outLM <- lm(IBM ~ x)
outLM$coef
    acf(outLM$res)
qqnorm(outLM$res)
    sig <- var(outLM$res)
sig

mod <- dlmModReg(x,dV = sig, m0 = c(0, 1.5), C0 = diag(c(1e+07, 1)))
outF <- dlmFilter(IBM, mod)
outF$m
    plot(outF$m)
outF$m[ 1 + length(IBM), ]

########## PAGES 124-125
buildCapm <- function(u){
  dlmModReg(x, dV = exp(u[1]), dW = exp(u[2:3]))
}

outMLE <- dlmMLE(IBM, parm = rep(0,3), buildCapm)
exp(outMLE$par)
    outMLE
    outMLE$value
mod <- buildCapm(outMLE$par)
    outS <- dlmSmooth(IBM, mod)
    plot(dropFirst(outS$s))
outS$s

Tôi muốn có thể vẽ các ước tính làm mịn plot(dropFirst(outS$s))cho dữ liệu của riêng tôi, điều mà tôi gặp khó khăn khi thực hiện.

CẬP NHẬT

Bây giờ tôi có thể tạo ra các lô này nhưng tôi không nghĩ chúng đúng.

fishdata <- read.csv("http://dl.dropbox.com/s/4w0utkqdhqribl4/fishdata.csv", header=T)
x <- as.numeric(fishdata$marinefao)
    y <- as.numeric(fishdata$inlandfao)
xts <- ts(x, start=c(1950,1), frequency=1)
xts
yts <- ts(y, start=c(1950,1), frequency=1)
yts

lmodel <- lm(yts ~ xts)
#################################################
require(dlm)
    buildCapm <- function(u){
  dlmModReg(xts, dV = exp(u[1]), dW = exp(u[2:3]))
}

outMLE <- dlmMLE(yts, parm = rep(0,3), buildCapm)
exp(outMLE$par)
        outMLE$value
mod <- buildCapm(outMLE$par)
        outS <- dlmSmooth(yts, mod)
        plot(dropFirst(outS$s))

> summary(outS$s); lmodel$coef
       V1              V2       
 Min.   :87.67   Min.   :1.445  
 1st Qu.:87.67   1st Qu.:1.924  
 Median :87.67   Median :3.803  
 Mean   :87.67   Mean   :4.084  
 3rd Qu.:87.67   3rd Qu.:6.244  
 Max.   :87.67   Max.   :7.853  
 (Intercept)          xts 
273858.30308      1.22505 

Ước tính làm mịn đánh chặn (V1) khác xa với hệ số hồi quy lm. Tôi cho rằng họ nên ở gần nhau hơn.

Câu trả lời:


2

Chính xác vấn đề của bạn là gì?

Cạm bẫy duy nhất tôi tìm thấy là, rõ ràng,

fishdata <- read.csv("http://dl.dropbox.com/s/4w0utkqdhqribl4,
                     fishdata.csv", header=T)

đọc dữ liệu dưới dạng số nguyên. Tôi đã phải chuyển đổi chúng để nổi,

x <- as.numeric(fishdata$marinefao)
y <- as.numeric(fishdata$inlandfao)

trước khi tôi có thể gọi các hàm dlm *.


Cảm ơn lời đề nghị của bạn @F. Tusell; Tôi đã cập nhật câu hỏi của tôi. Các ước tính làm mịn được tạo ra không gần với các lmodel$coefước tính. Tôi cho rằng các âm mưu là không chính xác nhưng tôi có thể sai.
hgeop

1
Không có lý do để mong đợi các ước tính về độ dốc và đánh chặn được làm mịn gần với các betas cố định trong hồi quy tuyến tính. Đặc biệt, độ dốc nên dao động dữ dội.
F. Tusell
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.