Nothing
      # These functions are
# Copyright (C) 1998-2024 T.W. Yee, University of Auckland.
# All rights reserved.
s.vam <- function(x, zedd, wz, smomat, which, smooth.frame, bf.maxit = 10,
                  bf.epsilon = 0.001, trace = FALSE, se.fit = TRUE,
                  X.vlm.save, Hlist, ncolHlist, M, qbig, Umat,
                  all.knots = FALSE, nk = NULL,
                  sf.only = FALSE) {
  nwhich <- names(which)
  dX.vlm <- as.integer(dim(X.vlm.save))
  pbig <- dX.vlm[2]
  if (!length(smooth.frame$first)) {
    data <- smooth.frame[, nwhich, drop = FALSE]
    smooth.frame <- vgam.match(data, all.knots = all.knots, nk = nk)
    smooth.frame$first <- TRUE  # Only executed at the first time
    dx <- as.integer(dim(x))
    smooth.frame$n.lm <- dx[1]
    smooth.frame$p.lm <- dx[2]
    attr(data, "class") <- NULL
    osparv <- lapply(data, attr, "spar")  # "o" for original
    odfvec <- lapply(data, attr, "df")
    s.xargument <- lapply(data, attr, "s.xargument")
    for (kk in seq_along(nwhich)) {
      ii <- nwhich[kk]
      temp <- osparv[[ii]]
      if (!is.numeric(temp) || any(temp < 0)) {
        stop("spar cannot be negative or non-numeric")
      }
      if (length(temp) > ncolHlist[ii]) {
        warning("only the first ", ncolHlist[ii], " values of ",
                "'spar' are used for variable '", s.xargument, "'")
      }
      osparv[[ii]] <- rep_len(temp, ncolHlist[ii])  # Recycle
      temp <- odfvec[[ii]]
      if (!is.numeric(temp) || any(temp < 1)) {
        stop("argument 'df' is non-numeric or less than 1")
      }
      if (length(temp) > ncolHlist[ii]) {
        warning("only the first ", ncolHlist[ii], " value(s) of 'df' ",
                "are used for variable '", s.xargument, "'")
      }
      odfvec[[ii]] <- rep_len(temp, ncolHlist[ii])  # Recycle
      if (max(temp) > smooth.frame$neffec[kk]-1) {
        stop("'df' value too high for variable '", s.xargument, "'")
      }
      if (any(osparv[[ii]] != 0) &&
          any(odfvec[[ii]] != 4)) {
        stop("cannot specify both 'spar' and 'df'")
      }
    }  # End of kk loop
    osparv <- unlist(osparv)
    odfvec <- unlist(odfvec)
    smooth.frame$osparv <- osparv  # Original
    smooth.frame$odfvec <- odfvec  # Original
    if (sum(smooth.frame$dfvec[smooth.frame$osparv == 0]) + pbig >
      smooth.frame$n.lm * sum(ncolHlist[nwhich])) {
      stop("too many parameters/dof for data on hand")
    }
    xnrow.X.vlm <- labels(X.vlm.save)[[2]]
    asgn <- attr(X.vlm.save, "assign")
    aa <- NULL
    for (ii in nwhich) {
      aa <- c(aa, xnrow.X.vlm[asgn[[ii]]])
    }
    smooth.frame$ndfsparv <- aa                # Stored here
    smooth.frame$xnrow.X.vlm <- xnrow.X.vlm    # Stored here
    smooth.frame$s.xargument <- s.xargument    # Stored here
    smooth.frame$smap <-
      as.vector(cumsum(c(1, ncolHlist[nwhich]))[seq_along(nwhich)])
    smooth.frame$try.sparv <- osparv
    smooth.frame$bindex <-
      as.integer(cumsum(c(1, smooth.frame$nknots * ncolHlist[nwhich])))
    smooth.frame$lindex <-
      as.integer(cumsum(c(1, smooth.frame$neffec * ncolHlist[nwhich])))
    smooth.frame$kindex <-
      as.integer(cumsum(c(1, 4 + smooth.frame$nknots)))
  } else {
    smooth.frame$first <- FALSE
  }
  if (sf.only) {
    return(smooth.frame)
  }
  ldk <- 3 * max(ncolHlist[nwhich]) + 1  # 20020711
  which <- unlist(which)
  p.lm <- smooth.frame$p.lm
  n.lm <- smooth.frame$n.lm
  dim2wz <- if (is.matrix(wz)) ncol(wz) else 1
  dim1U <- if (is.matrix(Umat)) nrow(Umat) else 1
  nHlist <- names(Hlist)
  for (ii in length(nHlist):1) {
    if (!any(nHlist[ii] == nwhich))
      Hlist[[ii]] <- NULL
  }
  trivc <- trivial.constraints(Hlist)
  ncbvec <- ncolHlist[nwhich]
  ncolbmax <- max(ncbvec)
  contr.sp <- list(low   = -1.5,  ## low = 0.      was default till R 1.3.x
                   high  =  1.5,
                   tol   = 1e-4,  ## tol = 0.001   was default till R 1.3.x
                   eps   = 2e-8,  ## eps = 0.00244 was default till R 1.3.x
                   maxit =  500)
  fit <-
    .C("Yee_vbfa",  # ---------------------------------
         npetc = as.integer(c(n.lm, p.lm, length(which), se.fit, 0,
                              bf.maxit, qrank = 0, M, nbig = n.lm * M, pbig,
                              qbig, dim2wz, dim1U, ier = 0,
                              ldk = ldk,  # ldk may be unused
                              contr.sp$maxit, iinfo = 0
                             )),
       doubvec = as.double(c(bf.epsilon, resSS = 0, unlist(contr.sp[1:4]))),
     as.double(x),
         y = as.double(zedd), wz = as.double(wz),
         dfvec  = as.double(smooth.frame$odfvec + 1),  # 20130427; + 1 added
         lamvec = double(length(smooth.frame$odfvec)),
         sparv  = as.double(smooth.frame$try.sparv),
   as.integer(smooth.frame$matcho), as.integer(smooth.frame$neffec),
         as.integer(which),
   smomat = as.double(smomat), etamat = double(M * n.lm),
   beta = double(pbig),
       varmat = if (se.fit) as.double(smomat) else double(1),
     qr = as.double(X.vlm.save), qraux = double(pbig),
     qpivot = as.integer(1:pbig),
         as.double(Umat),
         as.double(unlist(Hlist)),
     as.integer(ncbvec), as.integer(smooth.frame$smap),
      trivc = as.integer(trivc),
         levmat = double(sum(smooth.frame$neffec * ncbvec)),  # 20130427;
     bcoefficients = double(sum(smooth.frame$nknots * ncbvec)),
         knots = as.double(unlist(smooth.frame$knots)),
     bindex = as.integer(smooth.frame$bindex),
     lindex = as.integer(smooth.frame$lindex),
         nknots = as.integer(smooth.frame$nknots),
         kindex = as.integer(smooth.frame$kindex))  # End of dotC
  if (exists("flush.console"))
    flush.console()
  dim(fit$qr) <- dim(X.vlm.save)
  dimnames(fit$qr) <- dimnames(X.vlm.save)
  dim(fit$y) <- dim(zedd)
  dimnames(fit$y) <- dimnames(zedd)
  dim(fit$smomat) <- dim(smomat)
  dimnames(fit$smomat) <- dimnames(smomat)  # Needed for vgam.nlchisq
  if (se.fit) {
    dim(fit$varmat) <- dim(smomat)
    dimnames(fit$varmat) <- dimnames(smomat)
  }
  if (fit$npetc[14] != 0 ||
      fit$npetc[17] != 0) {
    stop("something went wrong in the C function 'vbfa'")
  }
  fit$etamat <- if (M > 1)
                matrix(fit$etamat, n.lm, M, byrow = TRUE) else
                c(fit$etamat)  # May no longer be a matrix
  nits <- fit$npetc[5]
  qrank <- fit$npetc[7]
  if (smooth.frame$first) {
    smooth.frame$try.sparv <- fit$sparv
  }
  if ((nits == bf.maxit) && bf.maxit > 1) {
    warning("'s.vam()' convergence not obtained in ", bf.maxit,
            " iterations")
  }
  R <- fit$qr[1:pbig, 1:pbig]
  R[lower.tri(R)] <- 0
  Bspline <- vector("list", length(nwhich))
  names(Bspline) <- nwhich
  for (ii in seq_along(nwhich)) {
    b.coefs <- fit$bcoeff[(smooth.frame$bindex[ii]):
                          (smooth.frame$bindex[ii + 1] - 1)]
    b.coefs <- matrix(b.coefs, ncol = ncolHlist[nwhich[ii]])
    Bspline[[ii]] <-
      new("vsmooth.spline.fit",
          "Bcoefficients" = b.coefs,
          "xmax"          = smooth.frame$xmax[ii],
          "xmin"          = smooth.frame$xmin[ii],
          "knots"         = as.vector(smooth.frame$knots[[ii]]))
  }
  Leverages <- vector("list", length(nwhich))
  names(Leverages) <- nwhich
  for (ii in seq_along(nwhich)) {
    levvec <- fit$levmat[(smooth.frame$lindex[ii]):
                         (smooth.frame$lindex[ii+1]-1)]
    levmat <- matrix(levvec,
                     nrow = smooth.frame$neffec[ii],
                     ncol = ncolHlist[nwhich[ii]])
    Leverages[[ii]] <- levmat
  }
  nl.df <- fit$dfvec - 1  # Decrement/increment ?
  retlist <- list(
    Bspline = Bspline,
    coefficients = fit$beta,
    df.residual = n.lm * M - qrank - sum(nl.df),  # Decrement/increment ?
    fitted.values = fit$etamat,
    Leverages = Leverages,
    nl.df = nl.df,
    qr = list(qr = fit$qr, rank = qrank,
              qraux = fit$qraux, pivot = fit$qpivot),
    R = R,
    rank = qrank,
    residuals = fit$y - fit$etamat,
    ResSS = fit$doubvec[2],
    smomat = fit$smomat,
    sparv = fit$sparv,
    s.xargument = unlist(smooth.frame$s.xargument))
  names(retlist$coefficients) <- smooth.frame$xnrow.X.vlm
  names(retlist$sparv) <-
  names(retlist$nl.df) <- smooth.frame$ndfspar
  if (se.fit) {
    retlist <- c(retlist, list(varmat = fit$varmat))
  }
  c(list(smooth.frame = smooth.frame), retlist)
}  # s.vam
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.