2016-07-21 8 views
2

ARMAtoMAの内部で何が起こっているのを見つけるには?私は次の結果を得た。ARMAtoMA()のコードはどこにありますか

ARMAtoMA 
#function (ar = numeric(), ma = numeric(), lag.max) 
#.Call(C_ARMAtoMA, as.double(ar), as.double(ma), as.integer(lag.max)) 
#<bytecode: 0x000000001a5f5700> 
#<environment: namespace:stats> 

答えて

1

あなたはRのソースファイルでそれを見つけることができます:それはstatsパッケージからであるので、私たちはR-<version>/src/library/stats/内で見つける

R-<version>/src/library/stats/src/pacf.c 
  • R-<version>/src/library/stats/srcはCコードなので、
  • 最後に、R-<version>/src/library/stats/srcの下に複数の.cファイルがあります。これらのファイルで "ARMAtoMA"を検索すると、pacf.cを見つけることができます。

私はここにあなたのためのコピーを作成します:

SEXP ARMAtoMA(SEXP ar, SEXP ma, SEXP lag_max) 
    { 
    int i, j, p = LENGTH(ar), q = LENGTH(ma), m = asInteger(lag_max); 
    double *phi = REAL(ar), *theta = REAL(ma), *psi, tmp; 
    SEXP res; 

    if(m <= 0 || m == NA_INTEGER) 
    error(_("invalid value of lag.max")); 
    PROTECT(res = allocVector(REALSXP, m)); 
    psi = REAL(res); 
    for(i = 0; i < m; i++) { 
    tmp = (i < q) ? theta[i] : 0.0; 
    for(j = 0; j < min(i+1, p); j++) 
     tmp += phi[j] * ((i-j-1 >= 0) ? psi[i-j-1] : 1.0); 
    psi[i] = tmp; 
    } 
    UNPROTECT(1); 
    return res; 
} 
関連する問題