Maybe Matlab
has the bias. First, one would need to check on if the estimates are the same in Mathematica and Matlab (when given the same options). (I don't have a copy of Matlab so I'll compare using R.) If those estimates are the same, then checking on the data creation process would need to be examined.
Given the following 34 data points:
x = {0.762581453, 1.432767666, 1.729161761, 1.487405427, 1.795480445,
1.029690811, 0.569472382, -0.023059941, -0.156831325, 0.429908074,
-0.632142053, -0.262679203, 0.701932332, 1.051120549, 0.11186958,
-0.319916758, -1.550805411, -0.106264866, -0.285184731, -0.847601482,
-2.4669689, -2.528088859, 0.048553687, 1.714408932, 2.314229506,
-0.459274584, -1.224375149, -1.132357697, -1.307473818, -0.729989006,
0.814224672, 0.798828446, -0.587769684, 1.204700686};
Estimation in Mathematica:
EstimatedProcess[x, ARProcess[{r}, v], ProcessEstimator -> "MaximumLikelihood"]
(* ARProcess[{0.579037}, 0.904965] *)
Estimation in R:
x = c(0.762581453,1.432767666,1.729161761,1.487405427,1.795480445,1.029690811,
0.569472382,-0.023059941,-0.156831325,0.429908074,-0.632142053,-0.262679203,
0.701932332,1.051120549,0.11186958,-0.319916758,-1.550805411,-0.106264866,
-0.285184731,-0.847601482,-2.4669689,-2.528088859,0.048553687,1.714408932,
2.314229506,-0.459274584,-1.224375149,-1.132357697,-1.307473818,-0.729989006,
0.814224672,0.798828446,-0.587769684,1.204700686)
estimate = ar(x, method="mle", order.max=1)
c(estimate$ar,estimate$var.pred)
# [1] 0.5799839 0.9040807
Those two sets of estimates are close enough such that any bias that might be due to differences in estimation are ruled out. That leaves 2 other possibilities: (1) Bias in the data creation process and (2) bias associated with the maximum likelihood estimator.
I don't have time to check out (1) but if one raises the sample length from 34 to 1,000, the bias seems to go away. That suggests that it's likely the usual sample size bias that maximum likelihood estimators can have.
Through[{Mean,
StandardDeviation}[(EstimatedProcess[#, ARProcess[{a}, v]] & /@
RandomFunction[ARProcess[{.48}, 1], {1, 1000}, 1000]["Paths"])[[All, 1, 1]]]]
(* {0.476582, 0.0267468} *)