Ich möchte ein DLM mit zeitlich variierenden Koeffizienten anpassen, dh eine Erweiterung der üblichen linearen Regression.
.
Ich habe einen Prädiktor ( ) und eine Antwortvariable ( ), Meeres- und Binnenfischfang von 1950 bis 2011. Ich möchte, dass das DLM-Regressionsmodell folgt:y t
wo die Systementwicklungsgleichung ist
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.
lmodel$coef
Schätzungen. Ich gehe davon aus, dass die Handlungen falsch sind, aber ich könnte mich irren.