ar.yw如何估计方差
在R中,函数ar.yw如何估计方差?具体来说,“var.pred”这个数字来自哪里?它似乎不是来自通常的YW方差估计,也不是平方残差之和除以df(尽管对df应该是什么存在分歧,但没有一个选择给出与var.pred等价的答案)。是的,我知道有比YW更好的方法;只是想弄清楚R在做什么ar.yw如何估计方差,r,R,在R中,函数ar.yw如何估计方差?具体来说,“var.pred”这个数字来自哪里?它似乎不是来自通常的YW方差估计,也不是平方残差之和除以df(尽管对df应该是什么存在分歧,但没有一个选择给出与var.pred等价的答案)。是的,我知道有比YW更好的方法;只是想弄清楚R在做什么 set.seed(82346) temp <- arima.sim(n=10, list(ar = 0.5), sd=1) fit <- ar(temp, method = "yule-walker", d
set.seed(82346)
temp <- arima.sim(n=10, list(ar = 0.5), sd=1)
fit <- ar(temp, method = "yule-walker", demean = FALSE, aic=FALSE, order.max=1)
## R's estimate of the sigma squared
fit$var.pred
## YW estimate
sum(temp^2)/10 - fit$ar*sum(temp[2:10]*temp[1:9])/10
## YW if there was a mean
sum((temp-mean(temp))^2)/10 - fit$ar*sum((temp[2:10]-mean(temp))*(temp[1:9]-mean(temp)))/10
## estimate based on residuals, different possible df.
sum(na.omit(fit$resid^2))/10
sum(na.omit(fit$resid^2))/9
sum(na.omit(fit$resid^2))/8
sum(na.omit(fit$resid^2))/7
set.seed(82346)
temp如果没有记录,则需要读取代码
?ar.yw
这表示:“在ar.yw中,创新的方差矩阵是根据拟合系数和x的自方差计算的。”如果这还不够解释,那么您需要查看代码:
methods(ar.yw)
#[1] ar.yw.default* ar.yw.mts*
#see '?methods' for accessing help and source code
getAnywhere(ar.yw.default)
# there are two cases that I see
x <- as.matrix(x)
nser <- ncol(x)
if (nser > 1L) # .... not your situation
#....
else{
r <- as.double(drop(xacf))
z <- .Fortran(C_eureka, as.integer(order.max), r, r,
coefs = double(order.max^2), vars = double(order.max),
double(order.max))
coefs <- matrix(z$coefs, order.max, order.max)
partialacf <- array(diag(coefs), dim = c(order.max, 1L,
1L))
var.pred <- c(r[1L], z$vars)
#.......
order <- if (aic)
(0L:order.max)[xaic == 0L]
else order.max
ar <- if (order)
coefs[order, seq_len(order)]
else numeric()
var.pred <- var.pred[order + 1L]
var.pred <- var.pred * n.used/(n.used - (order + 1L))
猜测。。。这是forecast包中的一个函数?你知道R软件包都是开源的吗?@42,不,这是“统计”软件包的一部分,也就是说,提供“lm”和所有其他基本统计功能的软件包。因此,有人可能会认为,即使它是开源的,它也会做一些合理的事情。
subroutine eureka (lr,r,g,f,var,a)
c
c solves Toeplitz matrix equation toep(r)f=g(1+.)
c by Levinson's algorithm
c a is a workspace of size lr, the number
c of equations
c
snipped
c estimate the innovations variance
var(l) = var(l-1) * (1 - f(l,l)*f(l,l))
if (l .eq. lr) return
d = 0.0d0
q = 0.0d0
do 50 i = 1, l
k = l-i+2
d = d + a(i)*r(k)
q = q + f(l,i)*r(k)
50 continue