Anpassen eines zeitvariablen Koeffizienten DLM


9

Ich möchte ein DLM mit zeitlich variierenden Koeffizienten anpassen, dh eine Erweiterung der üblichen linearen Regression.

yt=θ1+θ2x2 .

Ich habe einen Prädiktor ( ) und eine Antwortvariable ( ), Meeres- und Binnenfischfang von 1950 bis 2011. Ich möchte, dass das DLM-Regressionsmodell folgt:y tx2yt

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

wo die Systementwicklungsgleichung ist

θt=Gtθt- -1

ab Seite 43 von Dynamic Linear Models With R von Petris et al.

Einige Codierungen hier,

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)

Hier sind eindeutig zeitvariable Koeffizienten des Regressionsmodells besser geeignet. Ich folge seinem Beispiel von den Seiten 121 bis 125 und möchte dies auf meine eigenen Daten anwenden. Dies ist die Codierung aus dem Beispiel

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

Ich möchte in der Lage sein, die Glättungsschätzungen plot(dropFirst(outS$s))für meine eigenen Daten zu zeichnen , die ich nicht ausführen kann.

AKTUALISIEREN

Ich kann diese Handlungen jetzt produzieren, aber ich denke nicht, dass sie korrekt sind.

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 

Die Intercept-Glättungsschätzung (V1) ist weit vom lm-Regressionskoeffizienten entfernt. Ich gehe davon aus, dass sie näher beieinander sein sollten.

Antworten:


2

Was genau ist dein Problem?

Die einzige Falle, die ich gefunden habe, ist anscheinend die

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

liest Daten als ganze Zahlen. Ich musste sie umwandeln, um zu schweben,

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

bevor ich die dlm * -Funktionen aufrufen konnte.


Vielen Dank für Ihre Vorschläge @F. Tusell; Ich habe meine Frage aktualisiert. Die erstellten Glättungsschätzungen liegen nicht in der Nähe der lmodel$coefSchätzungen. Ich gehe davon aus, dass die Handlungen falsch sind, aber ich könnte mich irren.
Hgeop

1
Es gibt keinen Grund zu der Annahme, dass die geglätteten Schätzungen von Steigung und Achsenabschnitt in der linearen Regression nahe an den festen Betas liegen. Insbesondere sollte die Steigung stark schwanken.
F. Tusell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.