시변 계수 DLM 피팅


9

시변 계수, 즉 일반적인 선형 회귀에 대한 확장으로 DLM을 맞추고 싶습니다.

yt=θ1+θ2x2 입니다.

1950 ~ 2011 년에 각각 예측 변수 ( )와 반응 변수 ( ), 해양 및 내륙 연간 어획량이 있습니다. DLM 회귀 모델을 따르고 싶습니다.x2yt

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

시스템 진화 방정식은

θt=Gtθt1

Petris et al.의 R을 사용한 동적 선형 모델의 43 페이지에서

여기 일부 코딩

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)

분명히 회귀 모델의 시변 계수가 더 적절합니다. 나는 121-125 페이지의 그의 예를 따르고 이것을 내 자신의 데이터에 적용하고 싶습니다. 이것은 예제의 코딩입니다

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

plot(dropFirst(outS$s))실행에 문제가있는 내 데이터에 대한 평활 추정치를 그릴 수 있기를 원합니다 .

최신 정보

이제이 플롯을 생성 할 수 있지만 올바르다 고 생각하지 않습니다.

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 

절편 평활 추정치 (V1)는 lm 회귀 계수와는 거리가 멀다. 나는 그들이 서로 더 가까워 야한다고 생각합니다.

답변:


2

정확히 당신의 문제는 무엇입니까?

내가 찾은 유일한 함정은 분명히

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

데이터를 정수로 읽습니다. 플로트로 변환해야했는데

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

dlm * 함수를 호출하기 전에


귀하의 제안에 감사드립니다 @F. 투셀; 내 질문을 업데이트했습니다. 생성 된 평활 추정치는 lmodel$coef추정치에 가깝지 않습니다 . 줄거리가 잘못되었다고 가정하지만 잘못되었을 수 있습니다.
hgeop

1
선형 회귀 분석에서 기울기 및 차단의 평활화 된 추정치가 고정 베타에 가까워 질 것으로 예상 할 이유가 없습니다. 특히 경사가 크게 변동해야합니다.
F. Tusell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.