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,
.
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,
trong đó phương trình tiến hóa hệ thống là
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.
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.