我试图估计一个简单的AR(1)模型,其形式为 y [t] = alpha + beta * y [t-1] + u [t] 与你[ t]正态分布,均值为零,标准偏差为sigma。
我模拟了一个AR(1)模型 alpha = 10 和 beta = 0.1 :
library(stats)
data<-arima.sim(n=1000,list(ar=0.1),mean=10)
首先检查:OLS产生以下结果:
lm(data~c(NA,data[1:length(data)-1]))
Call:
lm(formula = data ~ c(NA, data[1:length(data) - 1]))
Coefficients:
(Intercept) c(NA, data[1:length(data) - 1])
10.02253 0.09669
但我的目标是用ML估算系数。我的负对数似然函数是:
logl<-function(sigma,alpha,beta){
-sum(log((1/(sqrt(2*pi)*sigma)) * exp(-((data-alpha-beta*c(NA,data[1:length(data)-1]))^2)/(2*sigma^2))))
}
,即所有对数单一观察正态分布的总和,由u [t] = y [t]-α-β* y [t-1]变换。通过c(NA,数据[1:长度(数据)-1])创建了滞后(就像上面的OLS估计一样)。
当我尝试将其投入使用时,我收到以下错误:
library(stats4)
mle(logl,start=list(sigma=1,alpha=5,beta=0.05),method="L-BFGS-B")
Error in optim(start, f, method = method, hessian = TRUE, ...) :
L-BFGS-B needs finite values of 'fn'
当我尝试估计形式 y [t] = alpha + beta * x [t] + u [t] 的线性模型时,我的对数似然函数必须正确完美。
我只是看不出我的初始值如何导致非有限结果?尝试任何其他初始值并不能解决问题。
非常感谢任何帮助!
答案 0 :(得分:0)
这对我有用 - 基本上你已经完成了但是忽略了响应的第一个元素,因为无论如何我们无法用AR模型预测它。
模拟:
library(stats)
set.seed(101)
data <- arima.sim(n=1000,list(ar=0.1),mean=10)
负对数可能性:
logl <- function(sigma,alpha,beta) {
-sum(dnorm(data[-1],alpha+beta*data[1:length(data)-1],sigma,log=TRUE))
}
适用于:
library(stats4)
mle(logl,start=list(sigma=1,alpha=5,beta=0.05),method="L-BFGS-B")
## Call:
## mle(minuslogl = logl, start = list(sigma = 1, alpha = 5, beta = 0.05),
## method = "L-BFGS-B")
##
## Coefficients:
## 0.96150573 10.02658632 0.09437847
可替换地:
df <- data.frame(y=data[-1],ylag1=head(data,-1))
library(bbmle)
mle2(y~dnorm(alpha+beta*ylag1,sigma),
start=list(sigma=1,alpha=5,beta=0.05),
data=df,method="L-BFGS-B")