help statsto (2011-06-03)

Title

statsto Collecting statistical results

Syntax

statsto [collect-matrix]
,
options

collect-matrix Name of matrix with collected results. The
matrix does not need to be created by statsto.
If no name is specified, the matrix StatSto is assumed.

Row specification

rows(row-names) Specify row or rows in the collect matrix where
statistics are saved.

rowstub(rstub) rstub is added to the front
of the specified row names.

Collect matrix characteristics

mv(letter) Elements of the collect matrix where statistics have
not been collected are filled with this missing values. The default is
the sysmis ".".

clear Delete existing values in the collect matrix before
collecting new values.

Collector types for a single row

blank A row named "- - - -" containing missing values is
added.

ereturns([user-name=]ereturn-name...) Scalar e-returns are
added to the active row in column user-name.

estub(estub) estub is added to the front of the column
names where the statistics are stored.

rreturns([user-name=]rreturn-name...) Scalar r-returns are
added to the active row. Derivative quantities from lincom and
nlcom (e.g., the CI) can be collected.

rstub(rstub) rstub is added to the front of the column
names where statistics are stored.

uservalues(user-name=scalar...) Scalars that are locals,
globals, scalar variables, or text are collected.

ustub(u-stub) u-stub is added to the front of the column
names where statistics are stored.

Collector types for a multiple rows

atreturns(...to be added...) Values from r(at) of
the predictor variables for each prediction in r(b) computed
by margins are collected; if margins, ...post
is used, values from e(at) are collected.

atstub(at-stub) at-stub is added to the front of the
column name where the statistics are stored.

ebreturns([user-name=]ebreturn-name...) Estimates from
e(b) and standard errors from e(V) are collected; optionally,
derivative quantities se, z, t, p, lb, ub, and level can
be collected.You can also compute exp(b) 100*(exp(b)-1).

ebstub(ebstub) ebstub is added to the front of the
column names where the statistics are stored.

rbreturns([user-name=]rbreturn-name...) Estimates from
r(b) and standard errors from r(V) returned by margins
are collected; optionally derivative quantities se, z, t, p, lb, ub,
and level can be collected.

rbstub(rbstub) rbstub is added to the front of the column
names where the statistics are stored.

matrix(source-matrix-name) Values from source-matrix-name
are saved in the collect matrix. Values from the source are place
in rows and columns of the collect matrix with names corresponding
to those in the source matrix.

matrowstub(matrowstub) matrowstub is added to the front of the
row name from the source matrix. If matrowstub has the
form matrowstub#, the rows are named matrowstub1,
matrowstub2, etc.

matcolstub(matcolstub) Stub name for columns of collection
matrix.

matrow1(row-name | row#) This collect matrix row name or row
number where the matrix will be placed.

matcol1(matcolstub) Column namae or number.

List the collect matrix

list List the collect matrix.

listnew List only the rows changed by the
current statsto command.Not working 2011-02-17.

preview Preview the collect matrix showing what the matrix
would like like after the current statistics are collected. Changes
are not saved in the collect matrix.

title(string) Title added to the listed matrix.

transpose Transpose the collect matrix before listing.

Formatting the listed values of the collect matrix

format(string) Format string used for listing
the collect matrix.

width(integer) The column width for listing
the collect matrix.

decimals(integer) The number of decimal digits used when
listing elements of the collect matrix.

Saving the collect matrix

save(new-matrix-name) The collect matrix is saved as
matrix new-matrix-name.

Options for margins, outcome()

moutcome(mout#) The number mout# is added to the
end of the name of the collect matrix.

outcome(out#) The number out# is added
to the front of the column name where results are collected.

Description

statsto lets you organize information from multiple and/or
complex analyses by storing the statistics in a matrix. The information
stored can be estimates from models, results from tests, descriptive statistics,
or any other number. For example, you can use statsto to combine
results from a set of nested regression.
Or, you can condense hundreds of lines of output from margins
into a brief table.

Everything that statsto does could be done with Stata's matrix commands.
If you are an experienced Stata programmer you might find that some of the
things statsto does are easier using loops and matrix commands.
In many cases even experienced programmers should find statsto to be
more efficient than using matrix commands; we do. Why?

First, with statsto you can use row and column names to refer to a
location in the matrix rather than numeric indices. Names are easier to remember
and help you keep track of what is in the matrix. You can choose your
own names or statsto will choose them based on what you
are adding to the matrix.

Second, if the row and column names you specify are in the matrix,
the statistic being save is automatically placed in the appropriate row and
column. If you use a new name for a row or a column, statsto
automatically adds a row and/or column with the appropriate names.

Third, statsto simplifies retreiving results from Stata commands.
Most commands in Stata not only present results in the Results Window,
but also return the information to memory in what are called returns.
Estimation commands leave results in e-returns; most other commands leave
results in r-returns. For example, after running summarize age,
the return r(mean) contains the mean for age and
r(sd) contains the standard deviation. The command
statsto MyMat, row(Age) r(mean sd) uses returns r(mean)
and r(sd) to save the values to row Age in the collect
matrix with columns named mean and sd.

Fourth, when adding estimates, statsto can
compute auxillary statistics such as confidence intervals (CIs) and
p-values which are not provided in returns.

Fifth, while margins is a powerful command, the results
it produces are difficult to decipher and voluminous. statsto
has several options such as atreturns() and rbstub() to
help organize results from margins. Indeed, our initial
work with margins lead to the creation of statsto.

Sixth, statout, the companion command to statsto, has
many options for "prettying-up" your collect matrix by rearranging and renaming
rows and columns. You can easily print all or parts of your matrix with
titles and formatting. For publication quality tables, you can send your
collect matrix to Ben Jann's esttab (Jann 20xx) suite of commands.

Options

Row specification

rows(row-specification) Specify the row or rows
where the statistics are saved in the collect matrix. If a row is
not in the matrix, a new row is automatically appended to the
bottom of the matrix.
When a single row is specified, it is referred to as the active row.

rowstub(rstub) rstub is added to
the front of the names specified by rows(). If you use the
options row(Row1) rowstub(M1), statsto saves results in
the row named M1Row1 in the collect matrix.

The way that rows are specified depends on the type of statistics being
collected.

1. Single row collectors: The options uservalues(), erturns(),
and rreturns() save results in a single row of the collect matrix,
referred to as the active row. If you run sum age and wanted
to save the mean in row age you use the command
statsto, row(Age) r(mean). To place the mean of IQ in a different row,
use sum iq followed by statsto, row(IQ) r(mean).

A. If no row is specified (i.e., the row() option is not included),
a row named Row# is added to the bottom of the matrix},
where # is number of rows in the augmented matrix.

B. row(#) places results in the #-th row.
If that row does not exist, new rows are added to the collect matrix
with row names Row#.

C. row(row-name) adds statistics to the row
named row-name. If no row with that name exists,
a new row is added with row name row-name.

2. Multiple row collectors: The optons ebreturns() collects estimates
from matrices e(b) & e(V). rbreturns() collects estimates
from r(b) & r(V) computed by margins.
atreturns() collects values of the predictors used by margins.
For ebreturns() and rbreturns(), rows() indicates the
the rows of the collect matrix where the estimates and related statistics
are placed; these rows correspond to columns of b which is a
row vector. For at(), rows() indicates the rows of the collect
matrix where corresponding rows from the at matrix are placed.
Several methods can be used to specify rows:

A. rows(#1 #2 ... #K): The numbers are the column locations
in b that are to be saved in corresponding rows of
the collect matrix. The estimate in column #k of b is saved
in the collect matrix in a row with a name corresponding to the
column name in b. For example, rows(1 3 5 place the 1st,
3rd, and 5th estimates in b in the 1st, 2nd, and 3rd rows of the
collect matrix.

B. rows(RowName1=#1 RowName2=#2...
RowNameK=#K): The elements in positions
#1, #2, ... #K of b are placed in rows of the collect matrix named
RowName1, RowName2, ... RowNameK.

C. rows(_all): All elements of b are placed in rows
with names that correspond to the column names in b.

D. rows(rowstub=_all): All elements of b are
collected and placed in rows with names rowstub1, rowstub2, etc.

3. Matrix collector: With matrix(source-matrix)
the row and column names of the matrix being collected
(e.g., r(C) created by corr has row and column names
corresponding to the variables being correlated).
Elements of the source matrix are place in rows and columns the
collect matrix that that have names corresponding to those in the source
matrix. If a row or column does not exist in the collect matrix, that
matrix is expanded to include a row or column with the required name.

matrowstub(matrowstub): matrowstub is added to the front of the
row name in the source matrix. If matrowstub includes a #, such as
Row#, the rows are named Row1, Row2, etc.

mcolstub(matcolstub): adds stubs to the column names.

For example,

. statsto CorDesc, clear matrix(r(C)) matrowstub(Row#) matcolstub(Col#) list dec(3)

CorDesc:

Col1 Col2 Col3 Col4 Col5
Row1 1.000 -0.108 0.364 0.262 0.304
Row2 -0.108 1.000 -0.055 -0.172 -0.078
Row3 0.364 -0.055 1.000 0.153 0.228
Row4 0.262 -0.172 0.153 1.000 0.734
Row5 0.304 -0.078 0.228 0.734 1.000

matrow1(row-name | row#): the added matrix will be added in this row
and below; new rows are added as needed.

matcol1(col-name | col#): the added matrix will be added in this column
and to the right; new columns are added as needed.

Collect matrix characteristics

clear If the collect matrix already exists, it is deleted before
collecting new statistics.

mv(letter) When a row or column is added,
it is filled with missing values. By default, the sysmiss "." is used.
mv(letter) uses ".letter"
(e.g., mv(m) to use .m) to fill the row.

Collector types for a single row

Collecting scalar e-returns

To determine the names of the e-returns from an estimation command, run
the command ereturn list immediately after the estimation command.
Any scalar returns or macros that are numbers can be collected.

ereturns([user-name=]ereturn-name...) Scalar e-returns are saved
to the active row in columns named user-name if specified or
named ereturn-name if not.
For example, statsto, e(r2 Sample_Size=N) stores the
statistics in columns named r2 and Sample_Size.

estub(estub) estub is added to the front of the
column name where the statistics are saved. For example,
statsto, e(R2=r2 N) estub(M1_) stores the statistics in columns
named M1_R2 and M1_N.

Collecting scalar r-returns

To determine the names of the r-returns from a command, run
rreturn list immediately after the command. Scalar returns
or macros that are numbers can be collected with statsto.

rreturns([user-name=]rreturn-name...)
Scalar r-returns are saved to the active row in columns named
user-name if specified or named rreturn-name if not.
For example, statsto, r(Mean=mn SD=sd) stores the mean and
standard deviation in columns named Mean and SD.
If rstub(rstub) is used, rstub is placed
in front of the column names.

Results from combinations of estimates:
Commands lincom or nlcom compute linear and nonlinear
combinations of the estimates from a prior estimation command.
While the output in the Result Window includes the estimate of the combination
along with the standard error, a z- or t-test that the combination is 0,
the p-value, and the confidence interval, the r-returns only
include the estimate and the standard error. statsto will compute
the other quantities (e.g., the confidence interval) if you use the
following names for r-returns (even though technically they are not
being returned):

return-name description

b Estimate of the combination.

est Same as b.

estimate Same as b.

level Level used for computing the CI.

lb Lower bound of CI.

p Two-tailed probability for test that estimate is 0.

se Standard error of the estimate.

t t-value testing estimate is 0.

ub Upper bound of the CI.

z z-value testing the estimate is 0.

rstub(rstub)
rstub is added to the front of the name of the
column name where the statistics are saved.

Collecting scalar user-values

uservalues([user-name=#...] [user-name=`local'...] [user-name=$global...] [user-name=scalar...])
This options collects scalars that can be text,
locals macros, globals macros, or Stata scalar variables.
To collect text, u(Col1=12 Col2=223). To collect locals,
u(Col1=`local1' Col2=`local2'). To collect globals
u(Col1=$global1 Col2=$global2). To collect scalars
u(Col1=scalar1 Col2=scalar2). Multiple types of scalars can
be saved in the same command such as
u(MyNumber=1 MyLocal=`local' MyGlobal=$global MyScalar=scalar).
uservalues() is useful with forvalues loops
to collect the value of the counter or to collect results based
on computations in your program. You can use uservalues() to
determine the order of columns in the collect matrix before you populate
the matrix with values. For example,
u(Mean=. SD=. Min=. Max=. Nobs=.) adds these columns to the collect
matrix (assuming they do not already exist) in the order they are listed.
Then, when you use r() to add the descriptive statistiss they will
be placed in the colunns in the order you determined with the
u() option.

ustub(ustub) ustub is added to the front of the column name in the
collect matrix.

Collector types for matrices

Collecting r(at) or e(at) matrices

If margins is run with the at() option, margins
returns r(at) with a matrix that has one row for each estimate
computed by margins and one column for each of the right-hand-side
variables in the model being analyzed by margins. If you use the
atmeans option for margins, columns for variables
that are not being changed by
the at() option contain the mean level of that variable.
Otherrwise, those columns contain missing values.
If you use margin,...post, margins returns e(at), but also
returns r(at)).

atmatrix(_all | column-#s | column-names) specifies which
columns of the at matrix to collect. Recall that the columns
correspond to the predictors in the model.
Suboption _all selects all columns of the at-matrix.
One or more column names can be select by entering their
names, such as at(age wc).
Or you can specify column numbers or a mix of names and numbers,
such as at(age 2 4).
Values from selected columns of the at matrix are saved in
corresponding columns of the collect matrix. The rows of the at-matrix
that are collected are determined by the rows() option.

Collecting e(b) & e(V) or r(b) & r(V) matrices

Estimation commands leave estimated coefficients in e(b) and the
covariance matrix in e(V). With margins the estimates are
returned to r(b) and r(V), but with margins,... post
the estimates are returned to e(b) and e(V). Using the
post option lets you use test, testnl, lincom,
and nlcom on the estimates.

The rows() option specifies the elements of e(b) or
r(b) that you want to collect; the corresponding standard errors are
obtained from e(V) or r(V). You can use rows(_all) to select
all of the estimates. To select only some elements, you can use the
column names from e(b) or r(b). In most models,
these are the names of the predictor variables. With factor variables,
the names may include
prefixes such as 1.female. To select the estimates for variables
x1 and x3 you use rows(x1 x3). You can also use
column numbers to specify the elements to collect, such as rows(1 3).
By default, the names of the columns of e(b) or r(b) are used
as the row names of the collect matrix (recall that e(b) and
r(b) are row vectors). If you want to change the names (e.g.,
change the row for variable x1 to be labeled Income,
you can use rows(Income=x1 Female=x3). This is useful when names
are complex or cumbersome, such as with margins. To
change all of the names to a numbered sequence, you can use
rows(rstub=_all). For example, rows(Prob=_all)
automatically assigns the names Prob1, Prob2, etc.

Aside on margins: The first element of r(b)
is 1bn._at even though when you list the matrix r(b) it shows
the column label 1._at which is also shown with the
coeflegend option with margins. Element 2 is 2._at,
and so on for later elements of the matrix.

Results from estimates: The returns e(b) and e(V)
or r(b) and r(V) can be used to compute other results.
You can collect the following statistics bu using these abbreviations
for the return-names in ebreturns() and rbreturns().

return-name description

b Estimate.

est Same as b.

estimate Same as b.

or Compute exp(b).

expb Same as or).

pctb Compute 100*(exp(b)-1) for perchange change.

level Level used for computing the CI.

lb Lower bound of CI.

p Two-tailed probability for test that estimate is 0.

se Standard error of the estimate.

t t-value testing estimate is 0.

ub Upper bound of the CI.

z z-value testing the estimate is 0.

Collecting any matrix

You can save any matrix (referred to as the source matrix) to
the collect matrix with the matrix(source-matrix) option. The row
and column name of an element in the source matrix is used to determine
where the value is located in the collect matrix. For example, a value
in a row named Row2 and a column named Col5 will be placed in
a row named Row2 and a column named Col5 in the collect
matrix. If the collect matrix does not have a row or column with those
names, the needed row and/or column of the collect matrix is added.
If you do not want to use the row and column names in the source
matrix, you can use the matrowstub() and matcolstub() options.

mrowstub(rowstub): rowstub is added to the front of the
row name in the source matrix. If rowstub includes a #, such as
Row#, the rows are named Row1, Row2, etc.

mcolstub(colstub): adds stubs to the column names.

For example, use and example that takes results from listcoef

. statsto CorDesc, clear matrix(r(C)) matrowstub(Row#) matcolstub(Col#) list dec(3)

CorDesc:

Col1 Col2 Col3 Col4 Col5
Row1 1.000 -0.108 0.364 0.262 0.304
Row2 -0.108 1.000 -0.055 -0.172 -0.078
Row3 0.364 -0.055 1.000 0.153 0.228
Row4 0.262 -0.172 0.153 1.000 0.734
Row5 0.304 -0.078 0.228 0.734 1.000

As another example, consider the results from Long and Freese's (2005)
listcoef: complete this example; perhaps use matra.

. listcoef, matrix

Listing the collect matrix

list List the collect matrix.

listnew Only list the row or rows that were changed by the
current statsto command. This may not be working
as of 2011-02-16.

preview Preview the collect matrix showing what changes
will be made by the current statsto command. The changes from the
current command are not applied to the collect matrix but only shown as
a preview. This can help debugging statsto.

title(string) Title used when listing matrix.

transpose Transpose the matrix before listing. The
collect matrix is not changed. But, if you transpose before
you save the matrix, the saved matrix is a transpose of the collect
matrix.

Formatting the printed values of the collect matrix

decimals(integer) The number of decimal digits used when
the matrix is listed. For example, to list with three digits,
decimals(3).

format(string) The format for listing the matrix.
For example, format(%10.2f). See format
for details.

width(integer) The column width for listing the matrix.
For example, to use a widith of 12 per column, width(12).

See statout for other options for formatting and listing
your collection matrix.

Saving a collect matrix

save(new-matrix)The current collect matrix is saved as a matrix
named new-matrix. Operations from the current statsto command
are completed before saving the matrix.

Options for margins, outcome()

If the outcome(#) option is used with margins,
estimates are computed for that outcome (e.g., with ordered logit
margins, predict(outcome(2)) computes predictions for outcome 2).
Two statsto options make it easier to save results from
multiple outcomes.

moutcome(out#) The out# is added to the name of the
collect matrix where the results are saved. For example,
statsto M, mout(2) row(M1=1) rb(Prob=b) save statistics to
matrix M2.

outcome(out#) The number out# is added to the front of
the column name where results are saved.
Thus, statsto, row(M1=1) rb(Prob=b) out(2) saves the prediction
in a column named Prob2.

Working with esttab

JD - can you draft this section? -S

Examples: style #1

Setup

. sysuse auto

. regress mpg weight c.weight#c.weight foreign

Step xxx

. statsto...

Step yyy

. statsto, list ...

Examples: style #2

. xxx

. xxx

. xxx

. xxx

. xxx

. xxx

. xxx

. xxx

. xxx

Example: style #3

. xx

. yy

Saved results

statsto saves the matrix named with the matrix-name you supply.
If you use the moutcome(#) option, the matrix name has the # added
to the end of the name. If you do not supply a name for the matrix, the
default matrix named StatSto is used.

References

Jann, B. 20xx.

Long, J.S. and J. Freese. 20xx.

Authors

statsto, statout, graphsto, and statout are not
official Stata command. If you use the commands, please cite them as:

If you use these commands, please cite: Wolfe , Joseph D. and J. Scott Long
(2011) Collecting statistical results. For futher information (eventually...),
see the Collecting site.

Also see

Commands: statout, graphsto, graphout

Fragments

Often researcher want to combine results from multiple models or
construct table that present the results differently than the standard
Stata output. statsto lets you do this by using the estimates that are
returned to the matrix e(b) and the variance-covariance
matrix of the estimates in the matrix e(V).
These values can be added to your results matrix with the
b() option. This option also computes auxillary statistics such as
a z-test for individual coefficients, confidence intervals, etc.
Other results from estimation are stored in e-returns which can be saved
with the e() option.
For example, after regress y x1 x2 you can save the estimates and
p-values for x1 and x2 along with the R2 using the command
statsto MyMat, label(Model1) b(x1 x2, b p) e(R2=r2).

Stata puts results from many other commands in r-returns, which can
be added to your results matrix with the r() option. For example,
after summarize income you can save descriptive statistics with
the command statsto, label(Income) r(mean sd minimum maximum).
To add statistics from summarize educ to a row labeled
Education, statsto, label(Education) r(mean sd minimum maximum).

The commands lincom
and nlcom estimate linear and nonlinear combinations
of parameters and return their results in r-returns.
statsto's c() option simplifies grabbing and adding these results.
For example after lincom wc-hc,
statsto, label(WC_HC) c(diff, b lb ub) saves the estimated
difference in column diffEST, the lower bound in diffLB,
and the upper bound in diffUB.

The commands test
and testnl compute tests of linear and nonlinear
hypotheses and return their results in r-returns.
statsto's t() option simplifies grabbing and adding these results.
For example after test wc=hc,
statsto, label(WCeqHC) t(wchc, chi2 p) saves the chi-squared
in column wchcCHI2 and the p-value from the test in wchcP.

Scalar values that are not
e-returns or r-returns can be saved with the x() option.
For example, statsto MyMat, label(Step2) x(Age=20) saves 20 to the column
Age located in the row labeled Step2. The x(_) can be very
useful for saving quantities computed using Stata programming commands.

You can add to results matrix any estimates, test results,
descriptive statistics, or other scalars that Stata
returns to memory.
You can also add numbers you create using Stata programming commands.
Differenet collectors are used to collect and save different
types of information.

(1) grabs estimates from e(b) along with information for
testing from e(V). statsto uses this informtion to compute related
statistics such as z-tests and confidence intervals.
Only results from single equation models can be saved with b().
b() also adds estimates from margins,...post.

(2) at() complements b() when retrieving results from a
margins. When margins at() option is used, the matrix
r(at) is left in memory containing values of the predictors when
predictions are made. Each row corresponds
to one prediction; each column corresponds a right-hand-side variables
from the estimation command. You can add these values to the results matrix
with at(). For more information statsto.

(3) r() adds estimates of linear and nonlinear combinations
from lincom and nlcom.
For example, after lincom hc+wc, to save the confidence interval
use statsto, c(hcpluswc, ci).

(4) e() adds e-returns that are scalars or locals.
For example to save the coefficient of determination in e(r2),
use statsto, e(R2=r2).

(4) r() adds r-returns. For example, sum income
returns r(mean) with the mean and r(Var) with the variance.
To add these, statsto, r(mean Var).
While lincom, nlcom, test
and testnl leave their results in r-returns, statsto's
c() and t() options simplify retrieving the information.

(5) r(): adds returns from test and testnl
which compute tests of linear and nonlinear hypotheses.

(6) u(): can save any value. For example, to save 12 in column AGE,
statsto, x(AGE=12). This is handy when using
foreach or forvalues loops.

You can combine retrieve options. For example,
statsto, b(fem,b z p) e(R2=r2) r(mean) c(TEST, chi2 p) x(Age=12).
When multiple retrieve options are used, the columns
from b() are added to the results matrix first, those for
c() next, followed by e(), r(), t(), and x().
You can rearrange columns with the corder() option.
You can over-write existing values by adding new values to existing
locations.

How at() works

But since
a single margins command can compute predictions at
multiple values of the predictors, it is useful to be able add each
prediction to a different row and to save the values of the predictors
for each prediction. This is what at() allows. The b() option
selects the predictions you want to save from the e(b) matrix returned
by margins,...post. Associated with each row of e(b) is a row of
the r(at) matrix (note: it is also in e(at) if the post option
was used). When
you use at(), statsto places the first estimate selected by
b() into the active row; the second estimate into the next row,
and so on. For each estimate selected the corresponding row of r(at),
the at(at_columns) option adds the specified columns
at_columns to the row corresponding to the associated estiamtes.
The at_columns lets you to select the columns of r(at)
that you want to add to your results matrix. The selected columns
are added in columns with names at_column-name(bf:AT. The rows are
labeled R_ATat_row_# where at_row_#
in the r(at) matrix. Note that the only rows selected are those
that correspond to estimates selected with the b() option.
For example, if you use b(1 4 8,b lb ub), the 1st, 4th
and 8th rows of r(at) are save to your results matrix, one row for each
estimates. Along with the selected contents of r(at) will be the statistics
that you have select (e.g., b, lb and ub in this example). Options such as
nosuffix, rowlabel, and colname cannot be used.

Row labels and column names

Rows and columns in Stata matrices can be given names. In statsto these
names are used to label your results and to indicate where something is located.
A statistic's location in the matrix is determined by its row label
and its column name.
You can select your own names or statsto will
try to pick a reasonable name based on the results you are saving.
Much of the
power and ease of statsto comes from using the naming features effectively.
Column names are assigned based on the retrieve option
used and the suboptions selected.

Check for eb, rb and at

Option 1: <Cnm|C#>=<Bnm|B#>
C finds the row in the collect matrix;
If Cnm does not exist, add it.
If C# does not exist, add it; B# for name
B name or column number from e/r(b)

Option 2: nm only
Name from e/r(b); add to C if needed

Option 3: # only
Element from that column of e/r(b); add name for that
column of e/r(b) if it isn't already in C

Questions

1. Should the options row(row-name=#) be added? How should it
work?

2. In addition, statsto will compute a variety of other
statistics based on b and V, such as odds ratios and confidence
interverals.

3. mlogit??