0

auto.arima関数からgarchFit関数にarmaモデルの順序を入力しようとしています。

私はdfcallesdatatsrを持っています。

この方法でAR用語の順序を抽出します。

auto.arima(datatsr[,1])$arma[1] :
[1] 4

そしてMA用語の順序:

auto.arima(datatsr[,1])$arma[2] :
[1] 3

したがって、私は持っていますarma(4,3)

次に、これらの値をgarchFit式に入力し、埋め込みリスト(59日は日番号60の予測に使用されます)から一歩先の値を予測しようとしmmkます。

Garchfore <- function(datatsr, mmk) {
library(fGarch)
windowsL <- split(t(mmk), rep(1:nrow(mmk), each=ncol(mmk)))  
names(windowsL) <- unlist(lapply(windowsL,
                 function(x) paste(rownames(datatsr)[range(x)], sep="",   collapse=" - ")))
one<-lapply(windowsL, function(x) 
predict(garchFit(formula = ~arma(auto.arima(datatsr[,1])$arma[1],auto.arima(datatsr[,1])$arma[2])
                 +garch(1,1), data = datatsr[rev(unlist(x)),1]),
        n.ahead=1))
}

次に関数を呼び出すと

predi=Garchfore(datatsr,mmk)

エラーが発生します:

Error in predict(garchFit(formula = ~arma(auto.arima(datatsr[, 1])$arma[1],  : 
error in evaluating the argument 'object' in selecting a method for function 'predict':
Error in    .garchArgsParser(formula = formula, data = data, trace = FALSE) : 
Formula and data units do not match.

とにかく私が間違っていることについての考えを持っていますか?または、私が試したときにauto.arimaをgarchFitに渡すことさえ可能ですか?

よろしくお願いします!

4

2 に答える 2

0

1.式の指定方法が間違っている

2.有馬注文を手動で入力する必要があります

私自身のデータを使用して説明してみましょう

garchFit(formula= ~arma(3,2) + aparch(1,1), data=ret.fin.chn)

結果を出す

Title:
 GARCH Modelling 

Call:
 garchFit(formula = ~arma(3, 2) + aparch(1, 1), data = ret.fin.chn) 

Mean and Variance Equation:
 data ~ arma(3, 2) + aparch(1, 1)
<environment: 0x0df1f498>
 [data = ret.fin.chn]

Conditional Distribution:
 norm 

Coefficient(s):
     mu          ar1          ar2          ar3          ma1          ma2        omega       alpha1  
 1.4860e-04   6.3611e-01  -6.1945e-01   1.9331e-02  -6.6944e-01   6.4677e-01   1.0186e-05   3.1339e-02  
     gamma1        beta1        delta  
 3.6329e-04   9.7088e-01   1.4759e+00  

Std. Errors:
 based on Hessian 

Error Analysis:
         Estimate  Std. Error  t value Pr(>|t|)    
mu      1.486e-04   2.893e-04    0.514 0.607512    
ar1     6.361e-01   3.752e-01    1.695 0.090028 .  
ar2    -6.195e-01   1.872e-01   -3.310 0.000934 ***
ar3     1.933e-02   3.307e-02    0.585 0.558851    
ma1    -6.694e-01   3.754e-01   -1.783 0.074552 .  
ma2     6.468e-01   2.066e-01    3.130 0.001748 ** 
omega   1.019e-05   3.645e-06    2.794 0.005202 ** 
alpha1  3.134e-02   5.490e-03    5.708 1.14e-08 ***
gamma1  3.633e-04   6.787e-02    0.005 0.995729    
beta1   9.709e-01   4.663e-03  208.212  < 2e-16 ***
delta   1.476e+00   3.241e-01    4.554 5.26e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log Likelihood:
 7311.694    normalized:  2.659765 

Description:
 Wed Oct 16 23:43:41 2013 by user: ASUS 

その間

> garchFit(formula= ~arma(arima.ret.fin.chn$arma[1],arima.ret.fin.chn$arma[2]) + aparch(1,1), data=ret.fin.chn)

結果を出す

[1] "arima.ret.fin.chn" "arma"              "data"             
[1] "data"
Error in .garchArgsParser(formula = formula, data = data, trace = FALSE) : 
  Formula and data units do not match.

今見てみましょう

> arima.ret.fin.chn$arma[1]

[1] 3

> arima.ret.fin.chn$arma[2]
[1] 2

> class(arima.ret.fin.chn$arma[1])

[1] "integer"

> class(3)

[1] "numeric"

その間

b<-as.numeric(3)
c<-as.numeric(2)
> garchFit(formula=~garch(b,c),data=ret.fin.chn)
[1] "b"    "c"    "data"
[1] "data"

まだコツをつかんでいますか?

私の提案は、有馬注文の値を直接書くことです

ガーチフィットコードをチェックしてみてください

> garchFit

function (formula = ~garch(1, 1), data = dem2gbp, init.rec = c("mci", 
"uev"), delta = 2, skew = 1, shape = 4, cond.dist = c("norm", 
"snorm", "ged", "sged", "std", "sstd", "snig", "QMLE"), include.mean = TRUE, 
include.delta = NULL, include.skew = NULL, include.shape = NULL, 
leverage = NULL, trace = TRUE, algorithm = c("nlminb", "lbfgsb", 
    "nlminb+nm", "lbfgsb+nm"), hessian = c("ropt", "rcd"), 
control = list(), title = NULL, description = NULL, ...) 
{
DEBUG = FALSE
init.rec = match.arg(init.rec)
cond.dist = match.arg(cond.dist)
hessian = match.arg(hessian)
algorithm = match.arg(algorithm)
CALL = match.call()
Name = capture.output(substitute(data))
if (is.character(data)) {
    eval(parse(text = paste("data(", data, ")")))
    data = eval(parse(text = data))
}
data <- as.data.frame(data)
if (isUnivariate(data)) {
    colnames(data) <- "data"
}
else {
    uniqueNames = unique(sort(colnames(data)))
    if (is.null(colnames(data))) {
        stop("Column names of data are missing.")
    }
    if (length(colnames(data)) != length(uniqueNames)) {
        stop("Column names of data are not unique.")
    }
}
if (length(formula) == 3 && isUnivariate(data)) 
    formula[2] <- NULL
if (length(formula) == 2) {
    if (isUnivariate(data)) {
        formula = as.formula(paste("data", paste(formula, 
            collapse = " ")))
    }
    else {
        stop("Multivariate data inputs require lhs for the formula.")
    }
}
robust.cvar <- (cond.dist == "QMLE")
args = .garchArgsParser(formula = formula, data = data, trace = FALSE)
if (DEBUG) 
    print(list(formula.mean = args$formula.mean, formula.var = args$formula.var, 
        series = args$series, init.rec = init.rec, delta = delta, 
        skew = skew, shape = shape, cond.dist = cond.dist, 
        include.mean = include.mean, include.delta = include.delta, 
        include.skew = include.skew, include.shape = include.shape, 
        leverage = leverage, trace = trace, algorithm = algorithm, 
        hessian = hessian, robust.cvar = robust.cvar, control = control, 
        title = title, description = description))
ans = .garchFit(formula.mean = args$formula.mean, formula.var = args$formula.var, 
    series = args$series, init.rec, delta, skew, shape, cond.dist, 
    include.mean, include.delta, include.skew, include.shape, 
    leverage, trace, algorithm, hessian, robust.cvar, control, 
    title, description, ...)
ans@call = CALL
attr(formula, "data") <- paste("data = ", Name, sep = "")
ans@formula = formula
ans
}
于 2013-10-16T16:56:03.933 に答える