Description Usage Arguments Details Value Author(s) References See Also Examples
pwfe
is used to fit weighted fixed effects model for causal
inference after transforming outcome variable based on estimated
propensity score. pwfe
also derives the regression weights for
different causal quantity of interest.
1 2 3 4 5 6 
formula 
a symbolic description of the model for estimating propensity score. The formula should not include dummmies for fixed effects. The details of model specifications are given under ‘Details’. 
treat 
a character string indicating the name of treatment variable used in the models. The treatment should be binary indicator (integer with 0 for the control group and 1 for the treatment group). 
outcome 
a character string indicating the name of outcome variable. 
data 
data frame containing the variables in the model. 
pscore 
an optional character string indicating the name of estimated propensity score. Note that prespecified propensity score should be bounded away from zero and one. 
unit.index 
a character string indicating the name of unit variable used in the models. The index of unit should be factor. 
time.index 
a character string indicating the name of time variable used in the models. The index of time should be factor. 
method 
method for weighted fixed effects regression, either

within.unit 
a logical value indicating whether propensity score
is estimated within unit. The default is 
qoi 
one of 
estimator 
an optional character string 
C.it 
an optional nonnegative numeric vector specifying relative weights for each unit of analysis. 
White 
a logical value indicating whether White misspecification
statistics should be calculated. The default is 
White.alpha 
level of functional specification test. See White
(1980) and Imai . The default is 
hetero.se 
a logical value indicating whether heteroskedasticity
across units is allowed in calculating standard errors. The default
is 
auto.se 
a logical value indicating whether arbitrary
autocorrelation is allowed in calculating standard errors. The
default is 
unbiased.se 
logical. If 
verbose 
logical. If 
To fit the weighted unit (time) fixed effects model with propensity
score weighting, use the syntax for the formula, ~ x1 + x2
,
where x1
and x2
are unit (time) varying
covariates.
One can provide his/her own estimated pscore
which can be used
to transform the outcome varialbe. If so, one does not need to specify
formula
.
If pscore
is not provided, bayesglm
will be used to
estimate propensity scores. If within.unit = TRUE
, propensity
score will be separately estimated within time (unit) when
method
is unit
(time
). Otherwise, propensity
score will be estimated on entire data at once.
The estimated propensity scores will be used to transform the
outcome
variable as described in Imai and Kim (2018).
pwfe
calculates weights based on different underlying causal
quantity of interest: Average Treatment Effect (qoi = "ate"
) or
Average Treatment Effect for the Treated (qoi = "att"
).
One can further set estimating methods: FirstDifference
(estimator ="fd"
) or Differenceindifferences (estimator
= "did"
).
To specify different exante weights for each unit of analysis, use
nonnegative weights C.it
. For instance, using the survey
weights for C.it
enables the estimation fo the average
treatement effect for the target population.
pwfe
returns an object of class "pwfe", a list that contains the
components listed below.
The function summary
(i.e., summary.pwfe
) can be used to
obtain a table of the results.
coefficients 
a named vector of coefficients 
residuals 
the residuals, that is respons minus fitted values 
df 
the degree of freedom 
W 
weight matrix calculated from the model. Row and column indices can be found from unit.name, time.name. 
call 
the matched call 
causal 
causal quantity of interest 
estimator 
the estimating method 
unit.name 
a vector containing unique unit names 
unit.index 
a vector containing unique unit index number 
time.name 
a vector containing unique time names 
time.index 
a vector containing unique time index number 
method 
call of the method used 
vcov 
the variance covariance matrix 
White.alpha 
the alpha level for White specification test 
White.pvalue 
the pvalue for White specification test 
White.stat 
the White statistics 
x 
the design matrix 
y 
the response vector 
mf 
the model frame 
In Song Kim, Massachusetts Institute of Technology, insong@mit.edu and Kosuke Imai, Princeton University, imai@harvard.edu
Imai, Kosuke and In Song Kim. (2018) “When Should We Use Unit Fixed Effects Regression Models for Causal Inference with Longitudinal Data?" American Journal of Political Science, Forthcoming.
Stock, James and Mark Watson. (2008) “HeteroskedasticityRobust Standard Errors for Fixed Effect Panel Data Regression” Econometrica, 76, 1.
White, Halbert. (1980) 'Using Least Squares to Approximate Unknown Regression Functions.” International Economic Review, 21, 1, 149–170.
wfe
for fitting weighted fixed effect models.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119  ### NOTE: this example illustrates the use of wfe function with randomly
### generated panel data with arbitrary number of units and time.
## generate panel data with number of units = N, number of time = Time
## Not run:
N < 10 # number of distinct units
Time < 15 # number of distinct time
## generate treatment variable
treat < matrix(rbinom(N*Time, size = 1, 0.25), ncol = N)
## make sure at least one observation is treated for each unit
while ((sum(apply(treat, 2, mean) == 0) > 0)  (sum(apply(treat, 2, mean) == 1) > 0) 
(sum(apply(treat, 1, mean) == 0) > 0)  (sum(apply(treat, 1, mean) == 1) > 0)) {
treat < matrix(rbinom(N*Time, size = 1, 0.25), ncol = N)
}
treat.vec < c(treat)
## unit fixed effects
alphai < rnorm(N, mean = apply(treat, 2, mean))
## geneate two random covariates
x1 < matrix(rnorm(N*Time, 0.5,1), ncol=N)
x2 < matrix(rbeta(N*Time, 5,1), ncol=N)
pscore < matrix(runif(N*Time, 0,1), ncol=N)
x1.vec < c(x1)
x2.vec < c(x2)
pscore < c(pscore)
## generate outcome variable
y < matrix(NA, ncol = N, nrow = Time)
for (i in 1:N) {
y[, i] < alphai[i] + treat[, i] + x1[,i] + x2[,i] + rnorm(Time)
}
y.vec < c(y)
## generate unit and time index
unit.index < rep(1:N, each = Time)
time.index < rep(1:Time, N)
Data.str < as.data.frame(cbind(y.vec, treat.vec, unit.index, x1.vec, x2.vec))
colnames(Data.str) < c("y", "tr", "strata.id", "x1", "x2")
Data.obs < as.data.frame(cbind(y.vec, treat.vec, unit.index, time.index, x1.vec, x2.vec, pscore))
colnames(Data.obs) < c("y", "tr", "unit", "time", "x1", "x2", "pscore")
############################################################
# Example 1: Stratified Randomized Experiments
############################################################
## run the weighted fixed effect regression with strata fixed effect.
## Note: the quantity of interest is Average Treatment Effect ("ate")
## and the standard errors allow heteroskedasticity and arbitrary
## autocorrelation.
### Average Treatment Effect
ps.ate < pwfe(~ x1+x2, treat = "tr", outcome = "y", data = Data.str,
unit.index = "strata.id", method = "unit", within.unit = TRUE,
qoi = "ate", hetero.se=TRUE, auto.se=TRUE)
## summarize the results
summary(ps.ate)
### Average Treatment Effect for the Treated
ps.att < pwfe(~ x1+x2, treat = "tr", outcome = "y", data = Data.str,
unit.index = "strata.id", method = "unit", within.unit = TRUE,
qoi = "att", hetero.se=TRUE, auto.se=TRUE)
## summarize the results
summary(ps.att)
############################################################
# Example 2: Observational Studies with Unit Fixedeffects
############################################################
## run the weighted fixed effect regression with unit fixed effect.
## Note: the quantity of interest is Average Treatment Effect ("ate")
## and the standard errors allow heteroskedasticity and arbitrary
## autocorrelation.
### Average Treatment Effect
ps.obs < pwfe(~ x1+x2, treat = "tr", outcome = "y", data = Data.obs,
unit.index = "unit", time.index = "time",
method = "unit", within.unit = TRUE,
qoi = "ate", hetero.se=TRUE, auto.se=TRUE)
## summarize the results
summary(ps.obs)
## extracting weigths
summary(ps.obs)$Weights
### Average Treatment Effect with Firstdifference
ps.fd < pwfe(~ x1+x2, treat = "tr", outcome = "y", data = Data.obs,
unit.index = "unit", time.index = "time",
method = "unit", within.unit = TRUE,
qoi = "ate", estimator = "fd", hetero.se=TRUE, auto.se=TRUE)
## summarize the results
summary(ps.fd)
############################################################
# Example 3: Estimation with prespecified propensity score
############################################################
### Average Treatment Effect with Prespecified Propensity Scores
mod.ps < pwfe(treat = "tr", outcome = "y", data = Data.obs, pscore = "pscore",
unit.index = "unit", time.index = "time",
method = "unit", within.unit = TRUE,
qoi = "ate", hetero.se=TRUE, auto.se=TRUE)
## summarize the results
summary(mod.ps)
## End(Not run)

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.