How can I get more precise regression tree? I am a complete newbie to regression trees so maybe I am not understanding it properly. I got the following tree from my analysis (function tree() from R package tree):

This is nice, but how can I get more precise tree? For example, the clc_312 variable could definitely be split at more thresholds, giving more precise model. This is obvious when I plot the clc_312 variable against the response variable:

This plot shows the clc_312 variable cut in 10 pools and boxploted (don't know how to analyze this better, scatterplott is just a mess, you don't actually see the distribution of the response variable for particular range of clc_312 values). The green thing are means with CI, red line corresponds to the threshold detected by tree(). The range could definitely be split more.
First I thought that tree() will only split each variable once, but I did the following experiment on generated data, which shows that one variable can actually be split more times:
require(tree)

set.seed(123)
N <- 100
x <- runif(N, 0, 10)
alpha <- -2
beta1 <- 0.5
beta2 <- 0.1
sigma <- 0.005
y <- alpha + beta1 * x + rnorm(N, 0, sigma)

tree1 <- tree(y ~ x)
plot(tree1, type = "u")
text(tree1)


So it is possible! How do I force tree() to give me more precise model and continue to split the variables further?
 A: You simply can't get high precision from a single tree unless your sample size is enormous and the signal:noise ratio is high.  Suppose that a predictor X acts linearly against Y.  Many splits will be needed to represent this relationship, but the catch is that the estimate of $E(Y|X)$ for each interval of $X$ makes no use of the estimate of $E(Y|X)$ in the surrounding $X$ intervals.  In other words, single trees do not use interpolation or borrowing of information across $X$.  Because of that the variance of the estimate of $E(Y|X)$ is high and the tree does not compete with smooth methods such as ordinary regression or regression splines.  Plotting the tree's predicted values against $X$ starts to reveal the problem.
A: From ?tree.control there is information on how to get more depth to the tree.
To produce a tree that fits the data perfectly, set mindev = 0 and minsize = 2, 
if the limit on tree depth allows such a tree.

As an illustration of how to use the tree control variable
library(tree)
data(mtcars)
c1 <- tree(mpg ~., data=mtcars)
plot(c1,type="uniform"); text(c1)
c2 <- tree(mpg ~., data=mtcars, 
           control=tree.control(nobs=nrow(mtcars),mindev = 0, minsize = 2))
plot(c2,type="uniform"); text(c2)

As Frank Harrell correctly points out, more depth does not correspond to more precision, and results should be checked by predicting values, preferably on data that wasn't used to construct the tree.
Ref: http://plantecology.syr.edu/fridley/bio793/cart.html
In the car example, it does appear that a deeper tree can give better results on a blind test data set, illustrated in the following example...
library(tree)
library(caret)
data(mtcars)

## 75% of the sample size
smp_size <- floor(0.75 * nrow(mtcars))

## set the seed to make your partition reproductible
set.seed(123)
train_ind <- sample(seq_len(nrow(mtcars)), size = smp_size)

train <- mtcars[train_ind, ]
test <- mtcars[-train_ind, ]

car_tree_mdl_1 <- tree(mpg ~., data=train)
plot(car_tree_mdl_1); text(car_tree_mdl_1)

car_tree_mdl_2 <- tree(mpg ~., data=train, 
           control=tree.control(nobs=nrow(mtcars),mindev = 0, minsize = 2))
plot(car_tree_mdl_2,type="uniform"); text(car_tree_mdl_2)

pred_mdl_1 <- predict(car_tree_mdl_1, newdata=test)
pred_mdl_2 <- predict(car_tree_mdl_2, newdata=test)

cmp<-data.frame(mpg=test$mpg, tree_1=pred_mdl_1, tree_2=pred_mdl_2)
    cmp.err<-data.frame(tree_1_err=(cmp$tree_1-cmp$mpg)/cmp$mpg, 
                    tree_2_err=(cmp$tree_2-cmp$mpg)/cmp$mpg)*100
rownames(cmp.err)<-rownames(cmp)
colors=c("darkblue", "red", "green")
barplot(as.matrix(t(cmp)), beside=TRUE, col=colors )
legend("top", legend=c("data","tree","deep tree"), fill=colors)
cat("Comparison between data, tree 1, and tree 2\n")
cmp
cat("Comparison of percent error between tree 1 and tree 2\n")
cmp.err

