Solved – How to test hypothesis of slope = 1 and intercept = 0 for observed vs. predicted regression

regression

I have two columns of data: Observed (Obs) and Predicted (Pred), each column having 23 data. I have plotted Observed on y-axis and Predicted on x-axis (as pointed by Pineiro et al., 2008). On deriving a best fit linear model for the data, I have obtained:
$$Obs = 0.21 + 1.09 * Pred
$$
It is well known that in the ideal case, the equation should have been:
$$Obs = 0.00 + 1.00 * Pred
$$
Pineiro et al. (2008) [Link available on top], on page 4 [Eq. (9)], suggest:

We tested the hypothesis of slope = 1 and intercept = 0 to assess statistically the significance of regression
parameters. This test can be performed easily with statistical
computer packages with the model:

$$ Pred – Obs = a + b* Pred + \epsilon
$$
The significance of the regression parameters of this
models corresponds to the tests: b = 1 and a = 0.

Please help on how do I conduct these tests so that I can compare the slope ($b$) with 1 and intercept ($a$) with 0. Also I am not able to get the basic concept behind proposing the model shown above.

Best Answer

You can attain something similar using offset in R:

a = 1; b = 0

set.seed(123)
x = rnorm(1000)
y = a*x+b+rnorm(1000)/100

fit = lm(y~1+x+offset(x))
summary(fit)

#Coefficients:
#             Estimate Std. Error t value Pr(>|t|)   
#(Intercept) 0.0004105  0.0003183   1.290  0.19751   
#x           0.0008805  0.0003211   2.742  0.00621 **
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Basically we are regressing $y=A\cdot x+x+B+\epsilon=(A+1)\cdot x+B+\epsilon$, so if $H_0:A=0$ is rejected we can safely say the slope is not equal to 1. The test for the intercept remains unchanged.

But surely, it seems worthless: with enough data you will almost always reject the null hypothesis, as you get smaller and smaller standard errors, and any small deviance from zero becomes significant.


Other approach with the same result:

fit = lm(y~1+x)
library(car)
linearHypothesis(fit, "x = 1")
#  Res.Df     RSS Df  Sum of Sq    F   Pr(>F)   
#1    999 0.10184                               
#2    998 0.10108  1 0.00076165 7.52 0.006211 **
Related Question