% very simple model x = (0:4)'; Y = [-1 0 0 0 1]'; n = length(Y); X = [ones(n,1) x]; szX = size(X); p = szX(2); % total number of beta's betahat = (X' * X)^(-1) * X' * Y; Yhat = X * betahat; % predicted values resid = Y - Yhat; SSE = sum(resid.^2) SST = sum(( Y - mean(Y)).^2); s2 = SSE/(n-p) R2 = (SST-SSE)/SST plot(x,Y,'.') hold on plot(x, Yhat, '*') hold off R2adj = 1 - (n-1)/(n-p)*(1-R2) % now "saturated" polynomial: the one that would fit exactly all the pts X = [ones(n,1) x x.^2 x.^3 x.^4]; szX = size(X); p = szX(2); % total number of beta's betahat = (X' * X)^(-1) * X' * Y;