Code covered by the BSD License

# regstats2

### Oleg Komarov (view profile)

22 Dec 2009 (Updated )

Regstats enhanced. Robust std.errors; loops on a matrix of responses, 'onlydata' model.

REGSTATS2: what's new

# REGSTATS2: what's new

This is an enhanced version of the regstats function (statistics toolbox). Here are implemented several ways to estimate robust standard errors (se) for the coefficients\n. Also, it allows to supply a matrix of responses, where each columns is considered as a distinct series, instead of just a vector. The engine will loop through each column returning a set of results for each regression. Another additional feature is the option "onlydata" for the argument MODEL. You can supply DATA as it is without adding the constant or the interaction terms.

## ROBUST SE METHODS

The methods implemented to estimate robust se are the following:

• HC0 - White robust t statistics (Eicker,1963,1967; Huber,1967; White,1980)
• HC1 - With dfe correction (Hinkley,1977)
• HC2 - White weighted by 1-h (MacKinnon & White,1985)
• HC3 - White weighted by (1-h)^2 (Davidson & MacKinnon,1993)
• HC4 - White weighted by (1-h)^delta (Cribari & Neto,2004)
• HAC - Newey West t statistics (Newey & West,1987)

## REFERENCES

The main references I used to implement the estimation methods are from:

## OTHER FIELDS

• empty - true if the series is all NaNs
• rankdef - true if the series is rank deficient

## EXAMPLE

Lets test regstats2 against regstats on a single series of the responses

```warning off stats:pvaluedw:BadMethod      % set the warnings off
warning off MATLAB:nearlySingularMatrix   % set the warnings off
tic; Stats1 = regstats(Demodata.resp(:,1),Demodata.X,'linear','all');
fprintf('Elapsed time: %f s\n', toc);

tic; Stats2 = regstats2(Demodata.resp(:,1),Demodata.X,'linear','all');
fprintf('Elapsed time: %f s\n', toc);
```
```Elapsed time: 1.389385 s
Elapsed time: 1.682561 s
```

Lets test regstats2 on several series of the responses (without dwstat which is the heaviest routine)

```whichstats = {'Q','R','beta','covb','yhat','r','mse','rsquare','adjrsquare', ...
'leverage','hatmat','s2_i','beta_i','standres','studres', ...
'dfbetas','dffit','dffits','covratio','cookd','tstat','fstat',...
'hc0','hc1','hc2','hc3','hc4','hac','empty','rankdef'};
tic;Stats3 = regstats2(Demodata.resp(:,1:5),Demodata.X,'linear',whichstats);
fprintf('Elapsed time: %f s\n\n', toc);
whos Stats3; disp(fieldnames(Stats3))
```
```Elapsed time: 0.289656 s

Name        Size               Bytes  Class     Attributes

Stats3      1x5             11409450  struct

'Q'
'R'
'beta'
'covb'
'yhat'
'r'
'mse'
'rsquare'
'leverage'
'hatmat'
's2_i'
'beta_i'
'standres'
'studres'
'dfbetas'
'dffit'
'dffits'
'covratio'
'cookd'
'tstat'
'fstat'
'hc0'
'hc1'
'hc2'
'hc3'
'hc4'
'hac'
'empty'
'rankdef'

```

The GUI now looks like:

``` % regstats2(Demodata.resp(:,1:5),Demodata.X,'linear');
```

## ONLYDATA

You can regress the responses on the predictors without adding any constant or interaction terms:

```Stats4 = regstats2(Demodata.resp(:,1:5),Demodata.X,'onlydata',{'beta','tstat'});
```

A warning is issued if the F statistic or the R square are called under the 'onlydata' option:

```regstats2(Demodata.resp(:,1:5),Demodata.X,'onlydata',{'fstat','rsquare'});
```
```Warning: R-square and the F statistic are not well-defined under "onlydata" MODEL
unless DATA contains a column of ones (intercept), in which case is
recommended to use the "linear" MODEL.
```