Difference between revisions of "Iebaltab"

Jump to: navigation, search
 
(46 intermediate revisions by 8 users not shown)
Line 1: Line 1:
<code>iebaltab</code> is a [[Stata Coding Practices|Stata]] command that produces [[Balance tests | balance tables]], or difference-in-means tables, with multiple groups or '''treatment arms'''. It is a useful tool to use while [[Sampling | sampling]], conducting [[Data Analysis | data analysis]] and [[Exporting Analysis | exporting results]] in a [[Reproducible Research|reproducible manner]]. This article outlines the command's features and provides examples for use.


==Title==
==Read First==


<code>iebaltab</code> produces balance tables with multiple groups or treatment arms
*This command is a part of the package <code>[[Stata_Coding_Practices#ietoolkit|ietoolkit]]</code>. To install all the commands in this package including <code>iebaltab</code>, type <code>ssc install ietoolkit</code> in [[Stata Coding Practices|Stata]].
* For detailed instructions on how to implement the command in '''Stata''', type <code>help iebaltab</code> in '''Stata'''.


===Description ===
==Overview==


<code>iebaltab</code> is a command that generates balance tables (difference-in-means tables). The command tests for statistically significant difference between the categories defined in the grpvar(varname). The command can either test one control group against all other groups or test
<code>iebaltab</code> is a [[Stata Coding Practices|Stata]] command that produces [[Balance tests | balance tables]], or difference-in-means tables, with multiple groups or '''treatment arms'''. The command can test for statistically significant differences between either one control group and all other groups or between all groups against each other. The command also allows for fixed effects, covariates and different types of variance estimators.  
all groups against each other. The command also allows for fixed effects, covariates and different types of variance estimators.


A lot of attention has also been spent on providing helpful error messages when the command is mis-specified. The command will also issue errors or warnings when the command is specified correctly but the nature of the data leaves potential for the results to be misinterpreted , or simply invalid. For example, if an observation has a missing value in a variable that is used in an F-test for joint significance, then Stata cannot do anything but drop that observation. This command will throw an error unless the user specifies the option that suppresses that error or if the user specifies any of the options that tells the command how to interpret missing values.
<code>iebaltab</code> issues helpful error messages if the command is mis-specified or if the nature of the data leaves the potential for the results to be misinterpreted or invalid. For example, if an observation has a missing value in a '''variable''' used in an F-test for joint significance, then '''Stata''' cannot do anything but drop that observation. The command will issue an error unless the user specifies the option to suppress the error or specifies an option that tells the command how to interpret missing values.  


The command also attaches notes to the bottom of the table with infomration on, for example, which significance levels are used for stars, which fixed effects or covariates that were included (if any) etc.
The command attaches notes to the bottom of the table with information on, for example, which significance levels are used for stars, which fixed effects or covariates that were included (if any) etc.


The command estimates the descriptive stats, the t-test, and the F-tests using the following regressions:
==Implementation==


# Group means and group standard errors
This section outlines the basic functionalities of the command -- estimating descriptive stats, t-tests, and F-tests -- with sample code.  
In the following regression, ''balancevarname'' refers to the variables (one at the time) listed in ''balancevarlist'', ''groupvar'' refers to the variable listed in option '''grpvar'''('''varname''') and '''groupcode''' refers to the value corresponding to the group for which the means and standard errors are estimated for.


<code>reg balancevarname if groupvar = groupcode</code>
===Generating Descriptive Stats===


where _b[cons] from the returned results is the group mean and _se[cons] is the standard error in the group mean. Fixed effects and covaraiates are never included in this regression.
  <nowiki>reg balancevarname if groupvar = groupcode</nowiki>


# t-tests
where ''balancevarname'' refers to the '''variables''' (one at a time) listed in ''balancevarlist'', ''groupvar'' refers to the variable listed in the option ''grpvar''(''varname''), and ''groupcode'' refers to the value corresponding to the group for which the means and standard errors are estimated. ''_b[cons]'' from the returned results is the group mean and ''_se[cons]'' is the standard error in the group mean. Fixed effects and covaraiates are never included in this regression.
In the following t-test regression, ''balancevarname'' refers to the variables (one at the time) listed in ''balancevarlist''. ''testgroupdummy'' is a dummy variable with the value 0 for one of the groups compared in this t-test and 1 for the other group. All other groups have missing values and are therefore excluded from the regression.


<code>reg balancevarname testgroupdummy</code>
===Running t-tests===
<code>test testgroupdummy</code>


where r(p), from the returned results, is used when adding stars to the tables
<nowiki>reg balancevarname testgroupdummy
according to the thresholds specified in option starlevels().
test testgroupdummy </nowiki>


# F-test
where ''testgroupdummy'' is a dummy with the value 0 for one of the groups compared in the t-test and 1 for the other group. ''r(p)'', from the returned results, is used when adding stars to the tables according to the thresholds specified in option ''starlevels()''.
In the following F-test regression, ''balancevarlist'' refers to the list of all ''balancevars'' specified for the command. ''testgroupdummy'' is a dummy variable with the value 0 for one of the groups compared in this t-test and 1 for the other group. All other groups have missing values and are therefore
excluded from the regression.


<code>reg testgroupdummy balancevarlist</code>
===Running F-tests===
<code>testparm balancevarlist</code>


where r(p), from the returned results, is used when adding stars to the tables
<nowiki>reg testgroupdummy balancevarlist
according to the thresholds specified in option starlevels().
testparm balancevarlist</nowiki>


# Fixed effects
where ''r(p)'', from the returned results, is used when adding stars to the tables
according to the thresholds specified in option ''starlevels()''.


In the following t-test and F-test regressions with fixed effects, ''fixed''
===Including Fixed Effects===
refers to the variable included as the fixed effects in option fixedeffects(). The p-values for the tests are obtained in the same way as described above.


<code>xi : reg balancevarname testgroupdummy i.fixed</code>
<nowiki>xi : reg balancevarname testgroupdummy i.fixed
<code>test testgroupdummy</code>
test testgroupdummy
xi : reg testgroupdummy balancevarlist i.fixed
testparm balancevarlist </nowiki>


<code>xi : reg testgroupdummy balancevarlist i.fixed</code>
where ''fixed'' refers to the '''variable''' included as the fixed effects in option ''fixedeffects()''.
<code>testparm balancevarlist</code>


#Covariates
===Including Covariates===


In the following t-test and F-test regressions which include covariates, ''covariatesvarlist'' refers to the variables included as the control variables in option covariates(). The p-values for the tests are obtained in the same way as described above.
<nowiki>reg balancevarname testgroupdummy covariatesvarlist
test testgroupdummy
reg testgroupdummy balancevarlist covariatesvarlist
testparm balancevarlist </nowiki>
where ''covariatesvarlist'' refers to the '''variables''' inlcuded as the control '''variables''' in option ''covariates()''.


<code>reg balancevarname testgroupdummy covariatesvarlist </code>
===Including Non-Default Variance Estimators===
<code>test testgroupdummy</code>


<code>reg testgroupdummy balancevarlist covariatesvarlist</code>
<nowiki>reg balancevarname testgroupdummy, vce(vcetype)
<code>testparm balancevarlist</code>
test testgroupdummy
reg testgroupdummy balancevarlist, vce(vcetype)
testparm balancevarlist</nowiki>


#Standard errors estimators}
where ''vcetype'' is the variance estimator specified.
===Combining Them All===


In the following t-test and F-test regressions including the non-default
All options described above can be included in the same regression, for example:
variance estimators, ''vcetype'' is the varaince estimator specfied.


<code>reg balancevarname testgroupdummy, vce(vcetype)</code>
<nowiki>xi : reg balancevarname testgroupdummy i.fixed covariatesvarlist, vce(vcetype)
<code>test testgroupdummy</code>
test testgroupdummy </nowiki>
 
<code>reg testgroupdummy balancevarlist, vce(vcetype)</code>
<code>input:testparm balancevarlist</code>
 
# Combining them all
 
All options described above can be included in the same regression, for example:


<code>xi : reg balancevarname testgroupdummy i.fixed covariatesvarlist, vce(vcetype)}
==Examples==


test testgroupdummy} </code>
===Example 1===


===Examples===
<nowiki>ebaltab {it:outcome_variable}, grpvar({it:treatment_variable}) browse </nowiki>


# Example 1
In the example above, let's assume that ''treatment_variable'' is a '''variable''' that is 0 for observations in the '''control group''', and 1 for observations in the '''treatment group'''. Then in this example, the command will show the mean of {it:outcome_variable} and the standard error of that mean for the '''control group''' and the '''treatment group''' separately, and it will show the difference between the two groups and test if that difference is statistically significant.


<code>iebaltab {it:outcome_variable}, grpvar({it:treatment_variable}) browse </code>
===Example 2===


In the example above, let's assume that ''treatment_variable'' is a variable that is 0 for observations in the control group, and 1 for observations in the treatment group. Then in this example, the command will show the mean of {it:outcome_variable} and the standard error of that mean for the control group and the treatment group separately, and it will show the difference between the two groups and test if that difference is statistically significant.
<nowiki>global project_folder "C:\Users\project\baseline\results"}
iebaltab ''outcome_variable'', grpvar(''treatment_variable'') ///
save("$project_folder\balancetable.xlsx")} </nowiki>


# Example 2
Here, the table is saved to file instead of being shown in the browser window as in Example 1.


<code>global project_folder "C:\Users\project\baseline\results"}
===Example 3===
{break}{inp:iebaltab {it:outcome_variable}, grpvar({it:treatment_variable}) save("$project_folder\balancetable.xlsx")} </code>


The only difference between example 1 and this example is that in this example the table is saved to file instead of being shown in the browser window.
<nowiki>iebaltab ''outcome1 outcome2 outcome3'', grpvar(''treatment_variable'') ///
save("$project_folder\balancetable.xlsx") ///
rowlabels("outcome1 Outcome variable 1 @ outcome2 Second outcome variable")</nowiki>


# Example 3
Here, there are now three '''variables''' listed as balance '''variables'''. In option ''rowlabels()'', two of those balance '''variables''' are given a row label to use in lieu of the '''variable''' name. Instead of ''outcome1'' and ''outcome2'', the row titles will read "Outcome variable 1" and "Outcome variable 2", respectively. Since ''outcome3'' is not otherwise specified in ''rowlabels()'', the command will use the '''variable''' name of ''outcome3'' as the row title.


<code>iebaltab {it:outcome1 outcome2 outcome3}, grpvar({it:treatment_variable}) save("$project_folder\balancetable.xlsx") rowvarlabels rowlabels({it:"outcome1 Outcome variable 1 @ outcome2 Second outcome variable"})</code>
== Back to Parent ==


Example 3 builds on example 2. There are now 3 variables listed as balance variables. In option {cmd:rowlabels()} two of those balance variables have been given a new label to be displayed as row title instead of the variable name. Instead of outcome1 the row title will be "Outcome variable 1", and instead of outcome2 the rowtitle will be "Second outcome variable". For balance variable outcome3 that is not included in {cmd:rowlabels()}, the command will use the variable label defined for outcome3 as row title since
This article is part of the topic [[Stata Coding Practices]]
option {cms:rowarlabels} was specified. If outcome3 does not have any row variable defined, then the variable name will be used
==Additional Resources==
as row title, just like the default.
*DIME Analytics' [https://github.com/worldbank/DIME-Resources/blob/master/stata2-6-descriptives.pdf Descriptive Statistics: Creating Tables]
*Read more about <code>ietoolkit</code> [https://github.com/worldbank/ietoolkit here] on GitHub
[[Category: Stata]]

Latest revision as of 16:44, 11 August 2023

iebaltab is a Stata command that produces balance tables, or difference-in-means tables, with multiple groups or treatment arms. It is a useful tool to use while sampling, conducting data analysis and exporting results in a reproducible manner. This article outlines the command's features and provides examples for use.

Read First

  • This command is a part of the package ietoolkit. To install all the commands in this package including iebaltab, type ssc install ietoolkit in Stata.
  • For detailed instructions on how to implement the command in Stata, type help iebaltab in Stata.

Overview

iebaltab is a Stata command that produces balance tables, or difference-in-means tables, with multiple groups or treatment arms. The command can test for statistically significant differences between either one control group and all other groups or between all groups against each other. The command also allows for fixed effects, covariates and different types of variance estimators.

iebaltab issues helpful error messages if the command is mis-specified or if the nature of the data leaves the potential for the results to be misinterpreted or invalid. For example, if an observation has a missing value in a variable used in an F-test for joint significance, then Stata cannot do anything but drop that observation. The command will issue an error unless the user specifies the option to suppress the error or specifies an option that tells the command how to interpret missing values.

The command attaches notes to the bottom of the table with information on, for example, which significance levels are used for stars, which fixed effects or covariates that were included (if any) etc.

Implementation

This section outlines the basic functionalities of the command -- estimating descriptive stats, t-tests, and F-tests -- with sample code.

Generating Descriptive Stats

reg balancevarname if groupvar = groupcode

where balancevarname refers to the variables (one at a time) listed in balancevarlist, groupvar refers to the variable listed in the option grpvar(varname), and groupcode refers to the value corresponding to the group for which the means and standard errors are estimated. _b[cons] from the returned results is the group mean and _se[cons] is the standard error in the group mean. Fixed effects and covaraiates are never included in this regression.

Running t-tests

reg balancevarname testgroupdummy
test testgroupdummy 

where testgroupdummy is a dummy with the value 0 for one of the groups compared in the t-test and 1 for the other group. r(p), from the returned results, is used when adding stars to the tables according to the thresholds specified in option starlevels().

Running F-tests

reg testgroupdummy balancevarlist
testparm balancevarlist

where r(p), from the returned results, is used when adding stars to the tables according to the thresholds specified in option starlevels().

Including Fixed Effects

xi : reg balancevarname testgroupdummy i.fixed
test testgroupdummy
xi : reg testgroupdummy balancevarlist i.fixed
testparm balancevarlist 

where fixed refers to the variable included as the fixed effects in option fixedeffects().

Including Covariates

reg balancevarname testgroupdummy covariatesvarlist
test testgroupdummy
reg testgroupdummy balancevarlist covariatesvarlist
testparm balancevarlist 

where covariatesvarlist refers to the variables inlcuded as the control variables in option covariates().

Including Non-Default Variance Estimators

reg balancevarname testgroupdummy, vce(vcetype)
test testgroupdummy
reg testgroupdummy balancevarlist, vce(vcetype)
testparm balancevarlist

where vcetype is the variance estimator specified.

Combining Them All

All options described above can be included in the same regression, for example:

xi : reg balancevarname testgroupdummy i.fixed covariatesvarlist, vce(vcetype)
test testgroupdummy 

Examples

Example 1

ebaltab {it:outcome_variable}, grpvar({it:treatment_variable}) browse 

In the example above, let's assume that treatment_variable is a variable that is 0 for observations in the control group, and 1 for observations in the treatment group. Then in this example, the command will show the mean of {it:outcome_variable} and the standard error of that mean for the control group and the treatment group separately, and it will show the difference between the two groups and test if that difference is statistically significant.

Example 2

global project_folder "C:\Users\project\baseline\results"}
iebaltab ''outcome_variable'', grpvar(''treatment_variable'') ///
save("$project_folder\balancetable.xlsx")} 

Here, the table is saved to file instead of being shown in the browser window as in Example 1.

Example 3

iebaltab ''outcome1 outcome2 outcome3'', grpvar(''treatment_variable'') ///
save("$project_folder\balancetable.xlsx") ///
rowlabels("outcome1 Outcome variable 1 @ outcome2 Second outcome variable")

Here, there are now three variables listed as balance variables. In option rowlabels(), two of those balance variables are given a row label to use in lieu of the variable name. Instead of outcome1 and outcome2, the row titles will read "Outcome variable 1" and "Outcome variable 2", respectively. Since outcome3 is not otherwise specified in rowlabels(), the command will use the variable name of outcome3 as the row title.

Back to Parent

This article is part of the topic Stata Coding Practices

Additional Resources