title: result of rpart is a root, but data shows Information Gain
body: <p>I have a dataset with an event rate of less than 3% (i.e. there are about 700 records with class 1 and 27000 records with class 0).</p>
  
  <pre><code>ID          V1  V2      V3  V5      V6  Target
  SDataID3    161 ONE     1   FOUR    0   0
  SDataID4    11  TWO     2   THREE   2   1
  SDataID5    32  TWO     2   FOUR    2   0
  SDataID7    13  ONE     1   THREE   2   0
  SDataID8    194 TWO     2   FOUR    0   0
  SDataID10   63  THREE   3   FOUR    0   1
  SDataID11   89  ONE     1   FOUR    0   0
  SDataID13   78  TWO     2   FOUR    0   0
  SDataID14   87  TWO     2   THREE   1   0
  SDataID15   81  ONE     1   THREE   0   0
  SDataID16   63  ONE     3   FOUR    0   0
  SDataID17   198 ONE     3   THREE   0   0
  SDataID18   9   TWO     3   THREE   0   0
  SDataID19   196 ONE     2   THREE   2   0
  SDataID20   189 TWO     2   ONE     1   0
  SDataID21   116 THREE   3   TWO     0   0
  SDataID24   104 ONE     1   FOUR    0   0
  SDataID25   5   ONE     2   ONE     3   0
  SDataID28   173 TWO     3   FOUR    0   0
  SDataID29   5   ONE     3   ONE     3   0
  SDataID31   87  ONE     3   FOUR    3   0
  SDataID32   5   ONE     2   THREE   1   0
  SDataID34   45  ONE     1   FOUR    0   0
  SDataID35   19  TWO     2   THREE   0   0
  SDataID37   133 TWO     2   FOUR    0   0
  SDataID38   8   ONE     1   THREE   0   0
  SDataID39   42  ONE     1   THREE   0   0
  SDataID43   45  ONE     1   THREE   1   0
  SDataID44   45  ONE     1   FOUR    0   0
  SDataID45   176 ONE     1   FOUR    0   0
  SDataID46   63  ONE     1   THREE   3   0
  </code></pre>
  
  <p>I am trying to find out split using the decision tree. But result of tree is only 1 root.</p>
  
  <pre><code>&gt; library(rpart)
  &gt; tree &lt;- rpart(Target ~ ., data=subset(train, select=c( -Record.ID) ),method="class")
  &gt; printcp(tree)
  
  Classification tree:
  rpart(formula = Target ~ ., data = subset(train, select = c(-Record.ID)), method = "class")
  
  Variables actually used in tree construction:
  character(0)
  
  Root node error: 749/18239 = 0.041066
  
  n= 18239 
  
    CP nsplit rel error xerror xstd
  1  0      0         1      0    0
  </code></pre>
  
  <p>After reading most of the resources on StackOverflow, I loosened/tweaked the control parameters which gave me the desired decision tree. </p>
  
  <pre><code>&gt; tree &lt;- rpart(Target ~ ., data=subset(train, select=c( -Record.ID) ),method="class" ,control =rpart.control(minsplit = 1,minbucket=2, cp=0.00002))
  &gt; printcp(tree)
  
  Classification tree:
  rpart(formula = Target ~ ., data = subset(train, select = c(-Record.ID)), 
      method = "class", control = rpart.control(minsplit = 1, minbucket = 2, 
          cp = 2e-05))
  
  Variables actually used in tree construction:
  [1] V5         V2                     V1          
  [4] V3         V6
  
  Root node error: 749/18239 = 0.041066
  
  n= 18239 
  
            CP nsplit rel error xerror     xstd
  1 0.00024275      0   1.00000 1.0000 0.035781
  2 0.00019073     20   0.99466 1.0267 0.036235
  3 0.00016689     34   0.99199 1.0307 0.036302
  4 0.00014835     54   0.98798 1.0334 0.036347
  5 0.00002000     63   0.98665 1.0427 0.036504
  </code></pre>
  
  <p>When I pruned the tree it resulted in a tree with a single node.</p>
  
  <pre><code>&gt; pruned.tree &lt;- prune(tree, cp = tree$cptable[which.min(tree$cptable[,"xerror"]),"CP"])
  &gt; printcp(pruned.tree)
  
  Classification tree:
  rpart(formula = Target ~ ., data = subset(train, select = c(-Record.ID)), 
      method = "class", control = rpart.control(minsplit = 1, minbucket = 2, 
          cp = 2e-05))
  
  Variables actually used in tree construction:
  character(0)
  
  Root node error: 749/18239 = 0.041066
  
  n= 18239 
  
            CP nsplit rel error xerror     xstd
  1 0.00024275      0         1      1 0.035781
  </code></pre>
  
  <p>The tree should not be giving out only root node because mathematically, on a given node (example provided) we are getting Information Gain. I don't know if I am making a mistake by pruning or there is an issue with rpart in handling low event rate dataset? </p>
  
  <pre><code>NODE    p       1-p     Entropy         Weights         Ent*Weight      # Obs
  Node 1  0.032   0.968   0.204324671     0.351398601     0.071799404     10653
  Node 2  0.05    0.95    0.286396957     0.648601399     0.185757467     19663
  
  Sum(Ent*wght)       0.257556871 
  Information gain    0.742443129 
  </code></pre>