Menyesuaikan koefisien DLM yang bervariasi waktu


9

Saya ingin menyesuaikan DLM dengan koefisien yang bervariasi waktu, yaitu perpanjangan untuk regresi linier biasa,

.yt=θ1+θ2x2

Saya memiliki prediktor ( ) dan variabel respon ( y t ), marine & tangkapan ikan pedalaman tahunan masing-masing dari 1950 - 2011. Saya ingin model regresi DLM untuk mengikuti,x2yt

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

di mana persamaan evolusi sistem

θt=Gtθt1

dari halaman 43 dari Dynamic Linear Models With R oleh Petris et al.

Beberapa pengkodean di sini,

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)

Jelas koefisien waktu-bervariasi dari model regresi lebih tepat di sini. Saya mengikuti contohnya dari halaman 121 - 125 dan ingin menerapkan ini pada data saya sendiri. Ini adalah pengkodean dari contoh

############ 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

Saya ingin dapat memplot estimasi penghalusan plot(dropFirst(outS$s))untuk data saya sendiri, yang saya mengalami kesulitan dieksekusi.

MEMPERBARUI

Sekarang saya dapat membuat plot-plot ini tetapi saya rasa itu tidak benar.

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 

Estimasi intersep smoothing (V1) jauh dari koefisien regresi lm. Saya berasumsi mereka harus lebih dekat satu sama lain.

Jawaban:


2

Apa sebenarnya masalah Anda?

Satu-satunya perangkap yang saya temukan adalah, ternyata,

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

membaca data sebagai bilangan bulat. Saya harus mengubahnya menjadi mengambang,

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

sebelum saya bisa memanggil fungsi dlm *.


Terima kasih atas saran Anda. Tusell; Saya telah memperbarui pertanyaan saya. Estimasi smoothing yang dihasilkan tidak mendekati lmodel$coefestimasi. Saya berasumsi plotnya salah tetapi saya bisa saja salah.
hgeop

1
Tidak ada alasan untuk mengharapkan estimasi kelerengan dan intersep dekat dengan beta tetap dalam regresi linier. Secara khusus, lereng harus berfluktuasi dengan liar.
F. Tusell
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.