Logo Search packages:      
Sourcecode: rpart version File versions

rundown2.c

/* SCCS @(#)rundown2.c  @(#)rundown2.c    1.5 12/13/99 */
/*
** Run an observation down the tree, and return the predicted value,
**    for several CP values at once.
** (A subset of rundown.c, which also returns the prediction error).
*/
#include <stdio.h>
#include "rpart.h"
#include "node.h"
#include "rpartproto.h"

void rundown2(struct node *tree, int obs, double *cp, double *xpred)
    {
    int i;
    struct node *otree;

    /*
    ** Now, repeat the following: for the cp of interest, run down the tree
    **   until I find a node with smaller complexity.  The parent node will
    **   not have collapsed, but this split will have, so this is my
    **   predictor.
    */
    otree = tree;
    for (i=0; i<rp.num_unique_cp; i++) {
      while ( cp[i] < tree->complexity) {
          tree = branch(tree, obs);
          if (tree ==0) goto oops;
          otree = tree;
          }
      xpred[i] =  tree->response_est[0];
      }

    return;

oops:;
    if (rp.usesurrogate <2) { /*must have hit a missing value */
      for (; i<rp.num_unique_cp; i++)
          xpred[i] = otree->response_est[0];
      return;
      }
    /*
    ** I never really expect to get to this code.  It can only happen if
    **  the last cp on my list is smaller than the terminal cp of the
    **  xval tree just built.  This is impossible (I think).  But just in
    **  case I put a message here.
    */
    REprintf("Warning message--see rundown2.c\n");
    }

Generated by  Doxygen 1.6.0   Back to index