Description

Pleas download “T2_Data.Rdata” from Canvas for this tutorial.

The data for this tutorial describe a field experiment, conducted by a marketing research company for Duvel - a Belgian beer brand. The study focuses on how the label of Duvel on the beer bottles influences consumers’ preferences of the beer. The company recruits 320 consumers in the study, and randomly assigns 160 (half) consumers to the treatment group.

Consumers in the treatment group have beers in labeled bottles, and those in the control have beers without a label. Then, all consumers fill out a 7-point scale about the preferences of the beer (with multiple items on the taste, color, etc.). Data “label” record the study results. In the data, the variable “D” is a dummy with value 1 if a consumer is in the treatment group, and 0 if in the control. The variable “Y” records consumers’ final preferences.

# Load and scan the data.  
load("T2_Data.Rdata")
head(label)
## # A tibble: 6 x 2
##       D     Y
##   <int> <dbl>
## 1     1   6  
## 2     0   6.5
## 3     0   7.5
## 4     1   8.5
## 5     1   7  
## 6     1   8

Getting the ATE

We will estimate the average treatment effect (ATE) for this experiment as the difference in the average values of Y when \(D==1\) versus when \(D==0\). The following code 1) calculates the average values of \(Y\) for the two values of \(D\), and 2) calculates their difference (subtracting the first value of \(Y\) for \(D==0\) from the second value of \(Y\) for \(D==1\)). These steps produce a single number representing the estimated average treatment effect.

ATE <- mean(label$Y[label$D==1])-
  mean(label$Y[label$D==0])
print(paste("The ATE:",as.character(ATE),sep = " "))
## [1] "The ATE: 0.228125"

Fisher’s Exaxt Test

Should we trust that the estimate of 0.228 reflects a real difference in preferences, or could that estimate differ from zero simply because of the variation in the treatment assignment? We will use randomization inference to address this question.

Different from the example in class where we have only 6 units, this study has 320 consumers, split into two groups. The possible no. of assignments is \(C_{320}^{160}\). It’s a huge number.

choose(320,160) 
## [1] 9.519725e+94

The idea behind Fisherian test is this:

We start with a sharp null hypothesis \(H_{0}\), and assume it’s correct. For this study, we assume \(H_{0}:Y_{i}^{1}-Y_{i}^{0}=0\) That is, no individual treatment effect for all consumers. Or equivalently, \(Y_{i}^{1}=Y_{i}^{0}\), which enables us to obtain the potential outcomes for all consumers with \(Y=Y^{1}=Y^{0}\).

Under \(H_{0}\), the fact that the estimate of the ATE (0.228) differs from 0 is simply a result of the way consumers were assigned to the treatment and control groups. This begs the question of how “typical” our estimate is. Is it simply due to chance?

The procedure

First consider a single, hypothetical assignment of consumers to treatment and control. Note that is study adopts a completely randomized experiment design. As such, we can “simulate” an what-if assignment by using a random draw. This assignment differs from the one in the actual experiment, but it is equally likely to have happened.

set.seed(2357) # for replication
new_D <- rep(0,320) # a vector of new assignment
new_D[sample(1:320,160,replace = F)] <- 1 # selecting a subset and assigning the treatment
head(new_D)
## [1] 0 0 1 1 1 0
sum(new_D==1) # double checking
## [1] 160

Given the sharp null hypothesis, we now create two vectors of potential outcomes: \(Y^{1}\) and \(Y^{0}\), with both equal to the observed outcome in data.

Y0 <- label$Y
Y1 <- label$Y

Next, we obtain the ATE under the hypothetical assignment new_D.

new_ATE <- mean(Y1[new_D==1])-mean(Y0[new_D==0])
print(paste("The Hypothetical ATE:",as.character(new_ATE),sep = " "))
## [1] "The Hypothetical ATE: 0.0718750000000004"

Getting all ATEs

Having done one draw of assignments, we can now repeat it for many times to approximate the Fisher test. Here I will use 1,000 repetitions, and you may try more repetitions.

#You may also put the above code into a function and rerun the function for many times. I use for-loops here, just to make things easier to understand. 
ns <- 1000 #change here for different repetitions
all_ATE <- rep(0,ns) # a vector to store results
for (i in 1:ns) {
  new_D <- rep(0,320) # a vector of new assignment
  new_D[sample(1:320,160,replace = F)] <- 1 # assigning the treatment
  new_ATE <- mean(Y1[new_D==1])-mean(Y0[new_D==0]) # calculating ATE
  all_ATE[i] <- new_ATE
}

Getting a histogram to visualize the ATEs and the vertical line is the observed ATE.

hist(all_ATE,50)
abline(v=ATE)

Next, we obtain the p-values by checking the percentage of ATEs that are larger than the observed one.

fisher_p <- mean(all_ATE>ATE)
print(paste("Fisher's exact p-value is:",as.character(fisher_p),sep = " "))
## [1] "Fisher's exact p-value is: 0.015"

Neyman’s Approach

Recall that Neyman’s approach with Neyman variance becomes a two-sample t-test (with unequal variance), if we use the sample variance as estimators of the variance of treatment vs. control potential outcomes, as in the equations below.

\[\begin{cases} \hat{S}_{c}^{2}=\frac{1}{N_c-1}\sum_{i\in N_c}{\left( Y_{i}^{c}-\overline{Y^c} \right) ^2}\\ \hat{S}_{t}^{2}=\frac{1}{N_t-1}\sum_{j\in N_t}{\left( Y_{j}^{t}-\overline{Y^t} \right) ^2}\\ \end{cases}\]

Given the null hypothesis of zero treatment effect, the Neyman’s test becomes a two-sample t-test of equal means. Note that this is a two-sided test and the variance of two groups is unequal.

t.test(Y~D,label,alternative="two.sided",var.equal=F)
## 
##  Welch Two Sample t-test
## 
## data:  Y by D
## t = -2.1678, df = 318, p-value = 0.03092
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.43517093 -0.02107907
## sample estimates:
## mean in group 0 mean in group 1 
##        6.834375        7.062500
LS0tDQp0aXRsZTogJ1R1dG9yaWFsIDI6IEZpc2hlciB2cy4gTmV5bWFuIEFwcHJvYWNoIHRvIENSRScNCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogdGliYmxlDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IGNlcnVsZWFuDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgcGRmX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQotLS0NCg0KIyMjICoqRGVzY3JpcHRpb24qKg0KUGxlYXMgZG93bmxvYWQgIlQyX0RhdGEuUmRhdGEiIGZyb20gQ2FudmFzIGZvciB0aGlzIHR1dG9yaWFsLiANCg0KVGhlIGRhdGEgZm9yIHRoaXMgdHV0b3JpYWwgZGVzY3JpYmUgYSBmaWVsZCBleHBlcmltZW50LCBjb25kdWN0ZWQgYnkgYSBtYXJrZXRpbmcgcmVzZWFyY2ggY29tcGFueSBmb3IgRHV2ZWwgLSBhIEJlbGdpYW4gYmVlciBicmFuZC4gVGhlIHN0dWR5IGZvY3VzZXMgb24gaG93IHRoZSBsYWJlbCBvZiBEdXZlbCBvbiB0aGUgYmVlciBib3R0bGVzIGluZmx1ZW5jZXMgY29uc3VtZXJzJyBwcmVmZXJlbmNlcyBvZiB0aGUgYmVlci4gVGhlIGNvbXBhbnkgcmVjcnVpdHMgMzIwIGNvbnN1bWVycyBpbiB0aGUgc3R1ZHksIGFuZCByYW5kb21seSBhc3NpZ25zIDE2MCAoaGFsZikgY29uc3VtZXJzIHRvIHRoZSB0cmVhdG1lbnQgZ3JvdXAuIA0KDQpDb25zdW1lcnMgaW4gdGhlIHRyZWF0bWVudCBncm91cCBoYXZlIGJlZXJzIGluIGxhYmVsZWQgYm90dGxlcywgYW5kIHRob3NlIGluIHRoZSBjb250cm9sIGhhdmUgYmVlcnMgd2l0aG91dCBhIGxhYmVsLiBUaGVuLCBhbGwgY29uc3VtZXJzIGZpbGwgb3V0IGEgNy1wb2ludCBzY2FsZSBhYm91dCB0aGUgcHJlZmVyZW5jZXMgb2YgdGhlIGJlZXIgKHdpdGggbXVsdGlwbGUgaXRlbXMgb24gdGhlIHRhc3RlLCBjb2xvciwgZXRjLikuIERhdGEgImxhYmVsIiByZWNvcmQgdGhlIHN0dWR5IHJlc3VsdHMuIEluIHRoZSBkYXRhLCB0aGUgdmFyaWFibGUgIkQiIGlzIGEgZHVtbXkgd2l0aCB2YWx1ZSAxIGlmIGEgY29uc3VtZXIgaXMgaW4gdGhlIHRyZWF0bWVudCBncm91cCwgYW5kIDAgaWYgaW4gdGhlIGNvbnRyb2wuIFRoZSB2YXJpYWJsZSAiWSIgcmVjb3JkcyBjb25zdW1lcnMnIGZpbmFsIHByZWZlcmVuY2VzLiAgDQoNCmBgYHtyfQ0KIyBMb2FkIGFuZCBzY2FuIHRoZSBkYXRhLiAgDQpsb2FkKCJUMl9EYXRhLlJkYXRhIikNCmhlYWQobGFiZWwpDQpgYGANCiMjIyAqKkdldHRpbmcgdGhlIEFURSoqDQpXZSB3aWxsIGVzdGltYXRlIHRoZSBhdmVyYWdlIHRyZWF0bWVudCBlZmZlY3QgKEFURSkgZm9yIHRoaXMgZXhwZXJpbWVudCBhcyB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgYXZlcmFnZSB2YWx1ZXMgb2YgWSB3aGVuICREPT0xJCB2ZXJzdXMgd2hlbiAkRD09MCQuIFRoZSBmb2xsb3dpbmcgY29kZSAxKSBjYWxjdWxhdGVzIHRoZSBhdmVyYWdlIHZhbHVlcyBvZiAkWSQgZm9yIHRoZSB0d28gdmFsdWVzIG9mICREJCwgYW5kIDIpIGNhbGN1bGF0ZXMgdGhlaXIgZGlmZmVyZW5jZSAoc3VidHJhY3RpbmcgdGhlIGZpcnN0IHZhbHVlIG9mICRZJCBmb3IgJEQ9PTAkIGZyb20gdGhlIHNlY29uZCB2YWx1ZSBvZiAkWSQgZm9yICREPT0xJCkuIFRoZXNlIHN0ZXBzIHByb2R1Y2UgYSBzaW5nbGUgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgZXN0aW1hdGVkIGF2ZXJhZ2UgdHJlYXRtZW50IGVmZmVjdC4gDQpgYGB7cn0NCkFURSA8LSBtZWFuKGxhYmVsJFlbbGFiZWwkRD09MV0pLQ0KICBtZWFuKGxhYmVsJFlbbGFiZWwkRD09MF0pDQpwcmludChwYXN0ZSgiVGhlIEFURToiLGFzLmNoYXJhY3RlcihBVEUpLHNlcCA9ICIgIikpDQpgYGANCg0KIyMjICoqRmlzaGVyJ3MgRXhheHQgVGVzdCoqDQpTaG91bGQgd2UgdHJ1c3QgdGhhdCB0aGUgZXN0aW1hdGUgb2YgMC4yMjggcmVmbGVjdHMgYSByZWFsIGRpZmZlcmVuY2UgaW4gcHJlZmVyZW5jZXMsIG9yIGNvdWxkIHRoYXQgZXN0aW1hdGUgZGlmZmVyIGZyb20gemVybyBzaW1wbHkgYmVjYXVzZSBvZiB0aGUgdmFyaWF0aW9uIGluIHRoZSB0cmVhdG1lbnQgYXNzaWdubWVudD8gV2Ugd2lsbCB1c2UgcmFuZG9taXphdGlvbiBpbmZlcmVuY2UgdG8gYWRkcmVzcyB0aGlzIHF1ZXN0aW9uLg0KDQpEaWZmZXJlbnQgZnJvbSB0aGUgZXhhbXBsZSBpbiBjbGFzcyB3aGVyZSB3ZSBoYXZlIG9ubHkgNiB1bml0cywgdGhpcyBzdHVkeSBoYXMgMzIwIGNvbnN1bWVycywgc3BsaXQgaW50byB0d28gZ3JvdXBzLiBUaGUgcG9zc2libGUgbm8uIG9mIGFzc2lnbm1lbnRzIGlzICRDX3szMjB9XnsxNjB9JC4gSXQncyBhIGh1Z2UgbnVtYmVyLiANCiANCmBgYHtyfQ0KY2hvb3NlKDMyMCwxNjApIA0KYGBgDQpUaGUgaWRlYSBiZWhpbmQgRmlzaGVyaWFuIHRlc3QgaXMgdGhpczogDQoNCldlIHN0YXJ0IHdpdGggYSBzaGFycCBudWxsIGh5cG90aGVzaXMgJEhfezB9JCwgYW5kIGFzc3VtZSBpdCdzIGNvcnJlY3QuIEZvciB0aGlzIHN0dWR5LCB3ZSBhc3N1bWUgJEhfezB9Ollfe2l9XnsxfS1ZX3tpfV57MH09MCQgVGhhdCBpcywgbm8gaW5kaXZpZHVhbCB0cmVhdG1lbnQgZWZmZWN0IGZvciBhbGwgY29uc3VtZXJzLiBPciBlcXVpdmFsZW50bHksICRZX3tpfV57MX09WV97aX1eezB9JCwgd2hpY2ggZW5hYmxlcyB1cyB0byBvYnRhaW4gdGhlIHBvdGVudGlhbCBvdXRjb21lcyBmb3IgYWxsIGNvbnN1bWVycyB3aXRoICRZPVleezF9PVleezB9JC4NCg0KVW5kZXIgJEhfezB9JCwgdGhlIGZhY3QgdGhhdCB0aGUgZXN0aW1hdGUgb2YgdGhlIEFURSAoMC4yMjgpIGRpZmZlcnMgZnJvbSAwIGlzIHNpbXBseSBhIHJlc3VsdCBvZiB0aGUgd2F5IGNvbnN1bWVycyB3ZXJlIGFzc2lnbmVkIHRvIHRoZSB0cmVhdG1lbnQgYW5kIGNvbnRyb2wgZ3JvdXBzLiBUaGlzIGJlZ3MgdGhlIHF1ZXN0aW9uIG9mIGhvdyDigJx0eXBpY2Fs4oCdIG91ciBlc3RpbWF0ZSBpcy4gSXMgaXQgc2ltcGx5IGR1ZSB0byBjaGFuY2U/IA0KDQojIyMjICoqVGhlIHByb2NlZHVyZSoqIA0KDQpGaXJzdCBjb25zaWRlciBhIHNpbmdsZSwgaHlwb3RoZXRpY2FsIGFzc2lnbm1lbnQgb2YgY29uc3VtZXJzIHRvIHRyZWF0bWVudCBhbmQgY29udHJvbC4gTm90ZSB0aGF0IGlzIHN0dWR5IGFkb3B0cyBhIGNvbXBsZXRlbHkgcmFuZG9taXplZCBleHBlcmltZW50IGRlc2lnbi4gQXMgc3VjaCwgd2UgY2FuICJzaW11bGF0ZSIgYW4gd2hhdC1pZiBhc3NpZ25tZW50IGJ5IHVzaW5nIGEgcmFuZG9tIGRyYXcuIFRoaXMgYXNzaWdubWVudCBkaWZmZXJzIGZyb20gdGhlIG9uZSBpbiB0aGUgYWN0dWFsIGV4cGVyaW1lbnQsIGJ1dCBpdCBpcyBlcXVhbGx5IGxpa2VseSB0byBoYXZlIGhhcHBlbmVkLg0KYGBge3J9DQpzZXQuc2VlZCgyMzU3KSAjIGZvciByZXBsaWNhdGlvbg0KbmV3X0QgPC0gcmVwKDAsMzIwKSAjIGEgdmVjdG9yIG9mIG5ldyBhc3NpZ25tZW50DQpuZXdfRFtzYW1wbGUoMTozMjAsMTYwLHJlcGxhY2UgPSBGKV0gPC0gMSAjIHNlbGVjdGluZyBhIHN1YnNldCBhbmQgYXNzaWduaW5nIHRoZSB0cmVhdG1lbnQNCmhlYWQobmV3X0QpDQpzdW0obmV3X0Q9PTEpICMgZG91YmxlIGNoZWNraW5nDQpgYGANCkdpdmVuIHRoZSBzaGFycCBudWxsIGh5cG90aGVzaXMsIHdlIG5vdyBjcmVhdGUgdHdvIHZlY3RvcnMgb2YgcG90ZW50aWFsIG91dGNvbWVzOiAkWV57MX0kIGFuZCAkWV57MH0kLCB3aXRoIGJvdGggZXF1YWwgdG8gdGhlIG9ic2VydmVkIG91dGNvbWUgaW4gZGF0YS4gDQpgYGB7cn0NClkwIDwtIGxhYmVsJFkNClkxIDwtIGxhYmVsJFkNCmBgYA0KTmV4dCwgd2Ugb2J0YWluIHRoZSBBVEUgdW5kZXIgdGhlIGh5cG90aGV0aWNhbCBhc3NpZ25tZW50IG5ld19ELiANCmBgYHtyfQ0KbmV3X0FURSA8LSBtZWFuKFkxW25ld19EPT0xXSktbWVhbihZMFtuZXdfRD09MF0pDQpwcmludChwYXN0ZSgiVGhlIEh5cG90aGV0aWNhbCBBVEU6Iixhcy5jaGFyYWN0ZXIobmV3X0FURSksc2VwID0gIiAiKSkNCmBgYA0KIyMjIyAqKkdldHRpbmcgYWxsIEFURXMqKg0KDQpIYXZpbmcgZG9uZSBvbmUgZHJhdyBvZiBhc3NpZ25tZW50cywgd2UgY2FuIG5vdyByZXBlYXQgaXQgZm9yIG1hbnkgdGltZXMgdG8gYXBwcm94aW1hdGUgdGhlIEZpc2hlciB0ZXN0LiBIZXJlIEkgd2lsbCB1c2UgMSwwMDAgcmVwZXRpdGlvbnMsIGFuZCB5b3UgbWF5IHRyeSBtb3JlIHJlcGV0aXRpb25zLiANCmBgYHtyfQ0KI1lvdSBtYXkgYWxzbyBwdXQgdGhlIGFib3ZlIGNvZGUgaW50byBhIGZ1bmN0aW9uIGFuZCByZXJ1biB0aGUgZnVuY3Rpb24gZm9yIG1hbnkgdGltZXMuIEkgdXNlIGZvci1sb29wcyBoZXJlLCBqdXN0IHRvIG1ha2UgdGhpbmdzIGVhc2llciB0byB1bmRlcnN0YW5kLiANCm5zIDwtIDEwMDAgI2NoYW5nZSBoZXJlIGZvciBkaWZmZXJlbnQgcmVwZXRpdGlvbnMNCmFsbF9BVEUgPC0gcmVwKDAsbnMpICMgYSB2ZWN0b3IgdG8gc3RvcmUgcmVzdWx0cw0KZm9yIChpIGluIDE6bnMpIHsNCiAgbmV3X0QgPC0gcmVwKDAsMzIwKSAjIGEgdmVjdG9yIG9mIG5ldyBhc3NpZ25tZW50DQogIG5ld19EW3NhbXBsZSgxOjMyMCwxNjAscmVwbGFjZSA9IEYpXSA8LSAxICMgYXNzaWduaW5nIHRoZSB0cmVhdG1lbnQNCiAgbmV3X0FURSA8LSBtZWFuKFkxW25ld19EPT0xXSktbWVhbihZMFtuZXdfRD09MF0pICMgY2FsY3VsYXRpbmcgQVRFDQogIGFsbF9BVEVbaV0gPC0gbmV3X0FURQ0KfQ0KYGBgDQpHZXR0aW5nIGEgaGlzdG9ncmFtIHRvIHZpc3VhbGl6ZSB0aGUgQVRFcyBhbmQgdGhlIHZlcnRpY2FsIGxpbmUgaXMgdGhlIG9ic2VydmVkIEFURS4gDQpgYGB7cn0NCmhpc3QoYWxsX0FURSw1MCkNCmFibGluZSh2PUFURSkNCmBgYA0KTmV4dCwgd2Ugb2J0YWluIHRoZSBwLXZhbHVlcyBieSBjaGVja2luZyB0aGUgcGVyY2VudGFnZSBvZiBBVEVzIHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoZSBvYnNlcnZlZCBvbmUuIA0KYGBge3J9DQpmaXNoZXJfcCA8LSBtZWFuKGFsbF9BVEU+QVRFKQ0KcHJpbnQocGFzdGUoIkZpc2hlcidzIGV4YWN0IHAtdmFsdWUgaXM6Iixhcy5jaGFyYWN0ZXIoZmlzaGVyX3ApLHNlcCA9ICIgIikpDQpgYGANCiMjIyAqKk5leW1hbidzIEFwcHJvYWNoKioNClJlY2FsbCB0aGF0IE5leW1hbidzIGFwcHJvYWNoIHdpdGggTmV5bWFuIHZhcmlhbmNlIGJlY29tZXMgYSB0d28tc2FtcGxlIHQtdGVzdCAod2l0aCB1bmVxdWFsIHZhcmlhbmNlKSwgaWYgd2UgdXNlIHRoZSBzYW1wbGUgdmFyaWFuY2UgYXMgZXN0aW1hdG9ycyBvZiB0aGUgdmFyaWFuY2Ugb2YgdHJlYXRtZW50IHZzLiBjb250cm9sIHBvdGVudGlhbCBvdXRjb21lcywgYXMgaW4gdGhlIGVxdWF0aW9ucyBiZWxvdy4NCg0KJCRcYmVnaW57Y2FzZXN9DQoJXGhhdHtTfV97Y31eezJ9PVxmcmFjezF9e05fYy0xfVxzdW1fe2lcaW4gTl9jfXtcbGVmdCggWV97aX1ee2N9LVxvdmVybGluZXtZXmN9IFxyaWdodCkgXjJ9XFwNCglcaGF0e1N9X3t0fV57Mn09XGZyYWN7MX17Tl90LTF9XHN1bV97alxpbiBOX3R9e1xsZWZ0KCBZX3tqfV57dH0tXG92ZXJsaW5le1ledH0gXHJpZ2h0KSBeMn1cXA0KXGVuZHtjYXNlc30kJA0KDQpHaXZlbiB0aGUgbnVsbCBoeXBvdGhlc2lzIG9mIHplcm8gdHJlYXRtZW50IGVmZmVjdCwgdGhlIE5leW1hbidzIHRlc3QgYmVjb21lcyBhIHR3by1zYW1wbGUgdC10ZXN0IG9mIGVxdWFsIG1lYW5zLiBOb3RlIHRoYXQgdGhpcyBpcyBhIHR3by1zaWRlZCB0ZXN0IGFuZCB0aGUgdmFyaWFuY2Ugb2YgdHdvIGdyb3VwcyBpcyB1bmVxdWFsLiANCmBgYHtyfQ0KdC50ZXN0KFl+RCxsYWJlbCxhbHRlcm5hdGl2ZT0idHdvLnNpZGVkIix2YXIuZXF1YWw9RikNCmBgYA0KDQoNCg0KDQoNCg0K