10 SEXP y, beta, beta_names;
17 nterms = LENGTH(lags);
19 PROTECT(y = duplicate(AS_NUMERIC(x)));
20 PROTECT(beta = NEW_NUMERIC(nterms));
22 mm = (
double *) R_alloc(n*nterms,
sizeof(
double));
23 poly_nlar_fit(REAL(beta),REAL(y),n,nterms,INTEGER(lags),INTEGER(powers),mm);
25 PROTECT(beta_names = NEW_STRING(nterms));
26 for (k = 0; k < nterms; k++) {
27 snprintf(tmp,BUFSIZ,
"nlar.%d^%d",INTEGER(lags)[k],INTEGER(powers)[k]);
28 SET_STRING_ELT(beta_names,k,mkChar(tmp));
30 SET_NAMES(beta,beta_names);
40 int nterms,
int *lag,
int *power,
double *
X) {
47 int maxlag, nx, ny, ok, ct;
53 for (maxlag = 0, i = 0; i < nterms; i++)
54 maxlag = (lag[i] > maxlag) ? lag[i] : maxlag;
58 for (j = 0, ct = 0, xx = 0.0; j < n; j++)
69 for (j = 0; j < n; j++) {
71 if (!ok && (j < ny)) {
72 if (!R_FINITE(obs1)) obs1 = y[j];
73 else if (y[j] != obs1) ok = 1;
81 for (i = 0; i < nterms; i++) beta[i] = 0.0;
89 for (nx = 0, yp = y+maxlag, j = 0; j < ny; j++) {
90 finite[j] = (R_FINITE(yp[j])) ? 1 : 0;
91 for (i = 0; i < nterms; i++)
92 finite[j] = (R_FINITE(yp[j-lag[i]])) ? finite[j] : 0;
98 for (Xp =
X, i = 0; i < nterms; i++) {
99 for (j = 0; j < ny; j++) {
103 for (k = 1; k < power[i]; k++) *Xp *= xx;
111 for (i = 0, j = 0; j < ny; j++)
112 if (finite[j]) yp[i++] = yp[j];
126 for (i = 0; i < nterms; i++) beta[pivot[i]] = yp[i];
static R_INLINE void pomp_qrqy(double *c, double *a, int lda, double *tau, int m, int n, int k, char *side, char *transpose)
static R_INLINE void pomp_backsolve(double *a, int lda, int n, double *x, int incx, char *uplo, char *transpose, char *unit)
static void poly_nlar_fit(double *beta, double *y, int n, int nterms, int *lag, int *power, double *X)