如何找到函数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>
答案 0 :(得分:1)
你可以在R的源文件中找到它:
R-<version>/src/library/stats/src/pacf.c
R-<version>/src/library/stats/
内找到,因为它来自stats
package; R-<version>/src/library/stats/src
中找到,因为它是C代码; .c
下有多个R-<version>/src/library/stats/src
个文件。如果您在这些文件中搜索“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;
}