statsmodels doesn't add a constant by default, except when using the formula interface.
In this case you are forcing the regression line to go through zero.
>>> x = sm.add_constant(ts12.index)
>>> x
array([[ 1., 1.],
[ 1., 2.],
[ 1., 3.],
[ 1., 4.],
[ 1., 5.]])
>>> ts12_ols_fit = sm.OLS(ts12.values, ts12.index).fit()
>>> ts12_ols_fit.params
array([ 0.63636364])
>>> ts12_ols_fit = sm.OLS(ts12.values, x).fit()
>>> ts12_ols_fit.params
array([ 6., -1.])
>>> ts12_ols_fit.fittedvalues
array([ 5., 4., 3., 2., 1.])
edit
OLS parameter estimates can handle a perfect fit.
RLM requires a noise scale estimate. With a perfect fit, the variance is zero, and RLM doesn't work.
Adding a bit of noise RLM gets essentially the same result.
>>> ts12_rlm_fit = sm.RLM(ts12.values+ 1e-4*np.random.randn(5), x).fit()
>>> print ts12_rlm_fit.summary()
Robust linear Model Regression Results
==============================================================================
Dep. Variable: y No. Observations: 5
Model: RLM Df Residuals: 3
Method: IRLS Df Model: 1
Norm: HuberT
Scale Est.: mad
Cov Type: H1
Date: Mon, 04 Nov 2013
Time: 20:38:00
No. Iterations: 50
==============================================================================
coef std err z P>|z| [95.0% Conf. Int.]
------------------------------------------------------------------------------
const 5.9999 9.8e-05 6.12e+04 0.000 6.000 6.000
x1 -1.0000 2.96e-05 -3.38e+04 0.000 -1.000 -1.000
==============================================================================