1. Conduct the probit regression
library(AER)
library(xtable)
data("SwissLabor")
require(mgcv)
require(np)
require(arm)
SwissLabor$agesq <- (SwissLabor$age*10)^2 / 1000
SwissLabor$nyc <- SwissLabor$youngkids
SwissLabor$noc <- SwissLabor$oldkids
SwissLabor$nlinc <- SwissLabor$income
probit_model <- glm(participation ~ age + agesq + education + nyc + noc + nlinc + foreign, family = binomial(link = "probit"), data = SwissLabor)
summary(probit_model)
Call:
glm(formula = participation ~ age + agesq + education + nyc +
noc + nlinc + foreign, family = binomial(link = "probit"),
data = SwissLabor)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.919 -0.970 -0.479 1.021 2.480
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.7491 1.4069 2.66 0.0077 **
age 2.0753 0.4054 5.12 0.0000003077309 ***
agesq -2.9434 0.4995 -5.89 0.0000000037941 ***
education 0.0192 0.0179 1.07 0.2843
nyc -0.7145 0.1004 -7.12 0.0000000000011 ***
noc -0.1470 0.0509 -2.89 0.0039 **
nlinc -0.6669 0.1320 -5.05 0.0000004327887 ***
foreignyes 0.7144 0.1213 5.89 0.0000000039152 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1203.2 on 871 degrees of freedom
Residual deviance: 1017.2 on 864 degrees of freedom
AIC: 1033
Number of Fisher Scoring iterations: 4
2.1: Histograms
hist(SwissLabor$age*10, xlab="Age in years", main="Distribution of Age within the Swiss Sample", col="lightblue")

If all Swiss citizens were evenly represented in this sample and that Swiss population is either growing or constant, we would expect that there would be a slight drop-off. Since there is a build-up to age 30, we should suspect that younger citizens in this sample are somehow different from those who are older.

This sample looks roughly normally distributed with the average number of years of formal education equal to less than high school.

Within the sample the vast majority of our sample has no young children.

Non-labor income looks like it may be exponentially distributed with a mean of approximately ~$35.000. The log tranformation strongly controls for this distribution such that the log of yearly non-labor income is approximately normal.

While the median number of older children is zero, many more people within the sample have older children than younger children.
plot(as.factor(SwissLabor$participation), main="Distribution of labor force participation in the Swiss sample", col="lightblue")

When plotting labor force participation of the sample, we see that the majority of the sample does not participate in the labor force, but that both participating and non-participation are present in the sample.
plot(as.factor(SwissLabor$foreign), main="Distribution of foreign residency in the Swiss sample", col="lightblue")

Roughly 75% of the sample is not a foreign resident.
2.2: Logit: log odds regression from table one, linear in log odds
Instructions: Write out the logit (log odds) regression equivalent of the model proposed in Table I (i.e., write the regression model in terms of a function that is linear in the log odds).
exp(cbind(OR = coef(probit_model), confint(probit_model)))
Waiting for profiling to be done...
OR 2.5 % 97.5 %
(Intercept) 42.482 2.70 705.05
age 7.967 3.60 17.77
agesq 0.053 0.02 0.14
education 1.019 0.98 1.06
nyc 0.489 0.40 0.59
noc 0.863 0.78 0.95
nlinc 0.513 0.39 0.66
foreignyes 2.043 1.61 2.59
# xtabs(~participation + foreign, data = SwissLabor)
Thus, the log odds equivalent is to: \(Participation_{odds}=~42.4+7.9age+0.053age^2+1.02educ+-.49NYC+-.86NOC+-.51nlinc+2.04Foreign\\\) indicating that for a one unit increase in years of formal schooling (\(education\)), we expect the odds of participating in the labor force to increase by a factor of ~\(1.02\).
Next, write the equivalent model in terms of the Bernoulli likelihood function using the logit link function.
In compact form, the Bernoulli likelihood function is: \(Pr(Part_{i} = y_{i}) = \pi^{y_{i}}_{i}\times(1-\pi_{y_{i}})^{1-y_{i}}\) for \(y_{i} = [0,1]\). Using the return values from R, this function is equal to: \(\pi_i = \frac{exp(Participation_{odds})}{1+exp(Participation_{odds})}\) with the odds previously defined.
The logit function (log unit) calculates the “log-odds” that the dependent variable, participation, will be true. By first taking the odds, we remove the range restriction from the dependent variable. What this means is that we will no longer generate estimates of probability that are greater than one or less than zero. If we do not, and instead directly transformed the dependent variable, we would likely overpredict the certainty of the tails of the distribution.
3. Conduct the logistic regression version of the model proposed in Table I.
Interpret the logistic regression coefficients in terms of odds ratios. Note: Don’t worry about interpreting the age coefficients. Plot the predicted probability of labor force participation against the woman’s age, holding the other variables at their mean. (1 point)
logr_model <- glm(participation ~ age + agesq + education + nyc + noc + nlinc + foreign, family = binomial, data=SwissLabor)
# summary(probit_model)
# summary(logr_model)
# get the raw fitted probabilities
probit_predict <- predict(probit_model, type = 'response')
logr_predict <- predict(logr_model, type = 'response')
################################################################################
## Calibration table
probs <- logr_predict
# Get the deciles of the fitted probabilities
decile.cutpoints <- quantile(probs, probs = seq(0, 1, .1))
# Create a new variable that identifies
# the quantile that each fitted probibility falls in
decileID <- cut(probs,
breaks = decile.cutpoints,
labels = 1:10,
include.lowest = TRUE)
# cbind(probs, decileID)
# Calculate the number that switched in each decile
# You can see the counts by using table:
tab <- table(decileID, participation)
# tab
# To turn the table into a data.frame, use as.data.frame.matrix
observed <- as.data.frame.matrix(tab)
# To calculate the expected values for each decile,
# we need to sum the fitted probabilities for each decile
# We can do this by using tapply to compute
# the sum of probs within each level of decileID:
expected1 <- tapply(probs, decileID, FUN = sum)
# Create a summary calibration table
# Create cutpoints that represent the 9 intervals that exist for deciles
interval.cutpoints <- round(quantile(probs, probs = seq(.1, 1, .1)), 2)
# Create a dataframe with these cutpoints:
cal <- data.frame(interval.cutpoints)
# Add a column of observed 1's
cal$observed1 <- observed[, 2]
# Add a column of expected 1's
cal$expected1 <- round(expected1, 0)
# Add a column for the total # of observations in each decile
cal$total <- table(decileID)
################################################################################
| 10% |
0.16 |
11 |
10 |
88 |
| 20% |
0.24 |
20 |
18 |
87 |
| 30% |
0.31 |
22 |
24 |
87 |
| 40% |
0.39 |
29 |
30 |
87 |
| 50% |
0.47 |
34 |
37 |
87 |
| 60% |
0.52 |
49 |
43 |
87 |
| 70% |
0.59 |
46 |
48 |
87 |
| 80% |
0.67 |
53 |
54 |
87 |
| 90% |
0.78 |
61 |
64 |
87 |
| 100% |
0.93 |
76 |
73 |
88 |
Looking at these values, it seems like the model is well-specified since the predictions and the actuals are similar.
4. Calibration plot
[--Comments #!cal1–]
3: Conduct the logistic regression version of the model proposed in Table 1.
2.3.1: Interpret the logistic regression coefficients in terms of log odds ratios.
2.3.2: Plot the predicted probability of labor force participation against woman’s age holding the
other variables at their mean
2.4: Create and examine a calibration plot and calibration table for the model proposed in Table 1
table()
2.4.1: Does there seem to be a model misspecification?
2.4.2: Why or why not?
2.5: Compare logistic regression and a generalized additive model with smoothing on age and education
for the model proposed in Table 1
gam()
2.5.1: Look at the partial residual plots from the GAM. Do any transformations seem necessary
for age or education? why?
2.6: Use Stukel’s test for the logistic regression
???
2.6.1: Use Stukel’s test for the GAM
!!!
2.6.2: Does the logit link function seem appropriate? Why or why not?
___?
2.7: Create a cross-validated ROC curve for the logistic regression:
predictions <- prediction(predict(logr_model, type = "response"), y)
Error in prediction(predict(logr_model, type = "response"), y) :
Number of predictions in each run must be equal to the number of labels for each run.
2.7.1: Create a cross-validated ROC curve with transformations and interactions indicated by previous work:
2.7.2: Which model perfoms better in terms of cross-validation? Which do I prefer?
2.8: Comment on statistical inference and causality stories:
2.8.1: Use simulations or confidence intervals
sims()
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogIkVyaWMgU2lsdmVyIgotLS0KCiMxLiBDb25kdWN0IHRoZSBwcm9iaXQgcmVncmVzc2lvbgoKYGBge3J9CmxpYnJhcnkoQUVSKQpsaWJyYXJ5KHh0YWJsZSkKZGF0YSgiU3dpc3NMYWJvciIpCnJlcXVpcmUobWdjdikKcmVxdWlyZShucCkKcmVxdWlyZShhcm0pCnJlcXVpcmUoUk9DUikKClN3aXNzTGFib3IkYWdlc3EgPC0gKFN3aXNzTGFib3IkYWdlKjEwKV4yIC8gMTAwMApTd2lzc0xhYm9yJG55YyA8LSBTd2lzc0xhYm9yJHlvdW5na2lkcwpTd2lzc0xhYm9yJG5vYyA8LSBTd2lzc0xhYm9yJG9sZGtpZHMKU3dpc3NMYWJvciRubGluYyA8LSBTd2lzc0xhYm9yJGluY29tZQoKcHJvYml0X21vZGVsIDwtIGdsbShwYXJ0aWNpcGF0aW9uIH4gYWdlICsgYWdlc3EgKyBlZHVjYXRpb24gKyBueWMgKyBub2MgKyBubGluYyArIGZvcmVpZ24sIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBTd2lzc0xhYm9yKQpzdW1tYXJ5KHByb2JpdF9tb2RlbCkKYGBgCgoKIzIuMTogSGlzdG9ncmFtcwpgYGB7cn0KaGlzdChTd2lzc0xhYm9yJGFnZSoxMCwgeGxhYj0iQWdlIGluIHllYXJzIiwgbWFpbj0iRGlzdHJpYnV0aW9uIG9mIEFnZSB3aXRoaW4gdGhlIFN3aXNzIFNhbXBsZSIsIGNvbD0ibGlnaHRibHVlIikKYGBgCklmIGFsbCBTd2lzcyBjaXRpemVucyB3ZXJlIGV2ZW5seSByZXByZXNlbnRlZCBpbiB0aGlzIHNhbXBsZSBhbmQgdGhhdCBTd2lzcyBwb3B1bGF0aW9uCmlzIGVpdGhlciBncm93aW5nIG9yIGNvbnN0YW50LCB3ZSB3b3VsZCBleHBlY3QgdGhhdCB0aGVyZSB3b3VsZCBiZSBhIHNsaWdodCBkcm9wLW9mZi4gClNpbmNlIHRoZXJlIGlzIGEgYnVpbGQtdXAgdG8gYWdlIDMwLCB3ZSBzaG91bGQgc3VzcGVjdCB0aGF0IHlvdW5nZXIgY2l0aXplbnMgaW4gdGhpcyBzYW1wbGUKYXJlIHNvbWVob3cgZGlmZmVyZW50IGZyb20gdGhvc2Ugd2hvIGFyZSBvbGRlci4KCmBgYHtyfQpoaXN0KFN3aXNzTGFib3IkZWR1Y2F0aW9uLCB4bGFiPSJZZWFycyBvZiBmb3JtYWwgZWR1Y2F0aW9uIiwgbWFpbj0iRGlzdHJpYnV0aW9uIG9mIFllYXJzIG9mIEZvcm1hbCBFZHVjYXRpb24gd2l0aGluIHRoZSBTd2lzcyBTYW1wbGUiLCBjb2w9ImxpZ2h0Ymx1ZSIpCmBgYAoKVGhpcyBzYW1wbGUgbG9va3Mgcm91Z2hseSBub3JtYWxseSBkaXN0cmlidXRlZCB3aXRoIHRoZSBhdmVyYWdlIG51bWJlciBvZiB5ZWFycyBvZiBmb3JtYWwgZWR1Y2F0aW9uIGVxdWFsIAp0byBsZXNzIHRoYW4gaGlnaCBzY2hvb2wuCgpgYGB7cn0KaGlzdChTd2lzc0xhYm9yJG55YywgeGxhYj0iTnVtYmVyIG9mIFlvdW5nIENoaWxkcmVuIiwgbWFpbj0iRGlzdHJpYnV0aW9uIG9mIHRoZSBudW1iZXIgb2YgeW91bmcgY2hpbGRyZW4gd2l0aGluIHRoZSBTd2lzcyBTYW1wbGUiLCBjb2w9ImxpZ2h0Ymx1ZSIsIGJyZWFrcz00KQpgYGAKCldpdGhpbiB0aGUgc2FtcGxlIHRoZSB2YXN0IG1ham9yaXR5IG9mIG91ciBzYW1wbGUgaGFzIG5vIHlvdW5nIGNoaWxkcmVuLgoKYGBge3J9Cmhpc3QoU3dpc3NMYWJvciRubGluYywgeGxhYj0iTG9nIG9mIHllYXJseSBub24tbGFib3IgaW5jb21lIiwgbWFpbj0iRGlzdHJpYnV0aW9uIG9mIHRoZSBsb2cgb2YgeWVhcmx5IG5vbi1sYWJvciBpbmNvbWUiLCBjb2w9ImxpZ2h0Ymx1ZSIpCmBgYAoKTm9uLWxhYm9yIGluY29tZSBsb29rcyBsaWtlIGl0IG1heSBiZSBleHBvbmVudGlhbGx5IGRpc3RyaWJ1dGVkIHdpdGggYSBtZWFuIG9mIGFwcHJveGltYXRlbHkgfiQzNS4wMDAuIFRoZQpsb2cgdHJhbmZvcm1hdGlvbiBzdHJvbmdseSBjb250cm9scyBmb3IgdGhpcyBkaXN0cmlidXRpb24gc3VjaCB0aGF0IHRoZSBsb2cgb2YgeWVhcmx5IG5vbi1sYWJvciBpbmNvbWUgaXMKYXBwcm94aW1hdGVseSBub3JtYWwuCgpgYGB7cn0KaGlzdChTd2lzc0xhYm9yJG5vYywgeGxhYj0iTnVtYmVyIG9mIE9sZGVyIENoaWxkcmVuIiwgbWFpbj0iRGlzdHJpYnV0aW9uIG9mIHRoZSBudW1iZXIgb2Ygb2xkZXIgY2hpbGRyZW4gd2l0aGluIHRoZSBTd2lzcyBTYW1wbGUiLCBjb2w9ImxpZ2h0Ymx1ZSIsIGJyZWFrcz03KQpgYGAKCldoaWxlIHRoZSBtZWRpYW4gbnVtYmVyIG9mIG9sZGVyIGNoaWxkcmVuIGlzIHplcm8sIG1hbnkgbW9yZSBwZW9wbGUgd2l0aGluIHRoZSBzYW1wbGUgaGF2ZSBvbGRlciBjaGlsZHJlbgp0aGFuIHlvdW5nZXIgY2hpbGRyZW4uCgpgYGB7cn0KcGxvdChhcy5mYWN0b3IoU3dpc3NMYWJvciRwYXJ0aWNpcGF0aW9uKSwgbWFpbj0iRGlzdHJpYnV0aW9uIG9mIGxhYm9yIGZvcmNlIHBhcnRpY2lwYXRpb24gaW4gdGhlIFN3aXNzIHNhbXBsZSIsIGNvbD0ibGlnaHRibHVlIikKYGBgCldoZW4gcGxvdHRpbmcgbGFib3IgZm9yY2UgcGFydGljaXBhdGlvbiBvZiB0aGUgc2FtcGxlLCB3ZSBzZWUgdGhhdCB0aGUgbWFqb3JpdHkgb2YgdGhlIHNhbXBsZSBkb2VzIG5vdCAKcGFydGljaXBhdGUgaW4gdGhlIGxhYm9yIGZvcmNlLCBidXQgdGhhdCBib3RoIHBhcnRpY2lwYXRpbmcgYW5kIG5vbi1wYXJ0aWNpcGF0aW9uIGFyZSBwcmVzZW50IGluIHRoZSAKc2FtcGxlLgoKYGBge3J9CnBsb3QoYXMuZmFjdG9yKFN3aXNzTGFib3IkZm9yZWlnbiksIG1haW49IkRpc3RyaWJ1dGlvbiBvZiBmb3JlaWduIHJlc2lkZW5jeSBpbiB0aGUgU3dpc3Mgc2FtcGxlIiwgY29sPSJsaWdodGJsdWUiKQpgYGAKClJvdWdobHkgNzUlIG9mIHRoZSBzYW1wbGUgaXMgbm90IGEgZm9yZWlnbiByZXNpZGVudC4KCiMgMi4yOiBMb2dpdDogbG9nIG9kZHMgcmVncmVzc2lvbiBmcm9tIHRhYmxlIG9uZSwgbGluZWFyIGluIGxvZyBvZGRzCkluc3RydWN0aW9uczogV3JpdGUgb3V0IHRoZSBsb2dpdCAobG9nIG9kZHMpIHJlZ3Jlc3Npb24gZXF1aXZhbGVudCBvZiB0aGUgbW9kZWwKcHJvcG9zZWQgaW4gVGFibGUgSSAoaS5lLiwgd3JpdGUgdGhlIHJlZ3Jlc3Npb24gbW9kZWwgaW4gdGVybXMgb2YgYQpmdW5jdGlvbiB0aGF0IGlzIGxpbmVhciBpbiB0aGUgbG9nIG9kZHMpLiAKYGBge3J9CmV4cChjYmluZChPUiA9IGNvZWYocHJvYml0X21vZGVsKSwgY29uZmludChwcm9iaXRfbW9kZWwpKSkKIyB4dGFicyh+cGFydGljaXBhdGlvbiArIGZvcmVpZ24sIGRhdGEgPSBTd2lzc0xhYm9yKQpgYGAKVGh1cywgdGhlIGxvZyBvZGRzIGVxdWl2YWxlbnQgaXMgdG86CiRQYXJ0aWNpcGF0aW9uX3tvZGRzfT1+NDIuNCs3LjlhZ2UrMC4wNTNhZ2VeMisxLjAyZWR1YystLjQ5TllDKy0uODZOT0MrLS41MW5saW5jKzIuMDRGb3JlaWduXFwkCmluZGljYXRpbmcgdGhhdCBmb3IgYSBvbmUgdW5pdCBpbmNyZWFzZSBpbiB5ZWFycyBvZiBmb3JtYWwgc2Nob29saW5nICgkZWR1Y2F0aW9uJCksIHdlIGV4cGVjdCB0aGUgb2RkcyAKb2YgcGFydGljaXBhdGluZyBpbiB0aGUgbGFib3IgZm9yY2UgdG8gaW5jcmVhc2UgYnkgYSBmYWN0b3Igb2YgfiQxLjAyJC4KCk5leHQsIHdyaXRlIHRoZSBlcXVpdmFsZW50Cm1vZGVsIGluIHRlcm1zIG9mIHRoZSBCZXJub3VsbGkgbGlrZWxpaG9vZCBmdW5jdGlvbiB1c2luZyB0aGUgbG9naXQgbGluawpmdW5jdGlvbi4gCgpJbiBjb21wYWN0IGZvcm0sIHRoZSBCZXJub3VsbGkgbGlrZWxpaG9vZCBmdW5jdGlvbiBpczoKJFByKFBhcnRfe2l9ID0geV97aX0pID0gXHBpXnt5X3tpfX1fe2l9XHRpbWVzKDEtXHBpX3t5X3tpfX0pXnsxLXlfe2l9fSQKZm9yICR5X3tpfSA9IFswLDFdJC4gVXNpbmcgdGhlIHJldHVybiB2YWx1ZXMgZnJvbSBSLCB0aGlzIGZ1bmN0aW9uIGlzCmVxdWFsIHRvOiAkXHBpX2kgPSBcZnJhY3tleHAoUGFydGljaXBhdGlvbl97b2Rkc30pfXsxK2V4cChQYXJ0aWNpcGF0aW9uX3tvZGRzfSl9JCB3aXRoIAp0aGUgb2RkcyBwcmV2aW91c2x5IGRlZmluZWQuCgpUaGUgbG9naXQgZnVuY3Rpb24gKGxvZyB1bml0KSBjYWxjdWxhdGVzIHRoZSAibG9nLW9kZHMiIHRoYXQgdGhlIGRlcGVuZGVudCAKdmFyaWFibGUsIHBhcnRpY2lwYXRpb24sIHdpbGwgYmUgdHJ1ZS4gIEJ5IGZpcnN0IHRha2luZyB0aGUgb2Rkcywgd2UgcmVtb3ZlIHRoZQpyYW5nZSByZXN0cmljdGlvbiBmcm9tIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUuICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSB3aWxsIApubyBsb25nZXIgZ2VuZXJhdGUgZXN0aW1hdGVzIG9mIHByb2JhYmlsaXR5IHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBvbmUgb3IgbGVzcyAKdGhhbiB6ZXJvLiBJZiB3ZSBkbyBub3QsIGFuZCBpbnN0ZWFkIGRpcmVjdGx5IHRyYW5zZm9ybWVkIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUsIAp3ZSB3b3VsZCBsaWtlbHkgb3ZlcnByZWRpY3QgdGhlIGNlcnRhaW50eSBvZiB0aGUgdGFpbHMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KCgoKIzMuIENvbmR1Y3QgdGhlIGxvZ2lzdGljIHJlZ3Jlc3Npb24gdmVyc2lvbiBvZiB0aGUgbW9kZWwgcHJvcG9zZWQgaW4gVGFibGUgSS4KSW50ZXJwcmV0IHRoZSBsb2dpc3RpYyByZWdyZXNzaW9uIGNvZWZmaWNpZW50cyBpbiB0ZXJtcyBvZiBvZGRzIHJhdGlvcy4gTm90ZToKRG9u4oCZdCB3b3JyeSBhYm91dCBpbnRlcnByZXRpbmcgdGhlIGFnZSBjb2VmZmljaWVudHMuIFBsb3QgdGhlIHByZWRpY3RlZApwcm9iYWJpbGl0eSBvZiBsYWJvciBmb3JjZSBwYXJ0aWNpcGF0aW9uIGFnYWluc3QgdGhlIHdvbWFu4oCZcyBhZ2UsIGhvbGRpbmcKdGhlIG90aGVyIHZhcmlhYmxlcyBhdCB0aGVpciBtZWFuLiAoMSBwb2ludCkKCmBgYHtyfQpsb2dyX21vZGVsIDwtIGdsbShwYXJ0aWNpcGF0aW9uIH4gYWdlICsgYWdlc3EgKyBlZHVjYXRpb24gKyBueWMgKyBub2MgKyBubGluYyArIGZvcmVpZ24sIGZhbWlseSA9IGJpbm9taWFsLCBkYXRhPVN3aXNzTGFib3IpCgojIGdldCB0aGUgcmF3IGZpdHRlZCBwcm9iYWJpbGl0aWVzCnByb2JpdF9wcmVkaWN0IDwtIHByZWRpY3QocHJvYml0X21vZGVsLCB0eXBlID0gJ3Jlc3BvbnNlJykKbG9ncl9wcmVkaWN0IDwtIHByZWRpY3QobG9ncl9tb2RlbCwgdHlwZSA9ICdyZXNwb25zZScpCgojIyBDYWxpYnJhdGlvbiB0YWJsZQpwcm9icyA8LSBsb2dyX3ByZWRpY3QKIyBHZXQgdGhlIGRlY2lsZXMgb2YgdGhlIGZpdHRlZCBwcm9iYWJpbGl0aWVzIApkZWNpbGUuY3V0cG9pbnRzIDwtIHF1YW50aWxlKHByb2JzLCBwcm9icyA9IHNlcSgwLCAxLCAuMSkpCgojIENyZWF0ZSBhIG5ldyB2YXJpYWJsZSB0aGF0IGlkZW50aWZpZXMgCiMgdGhlIHF1YW50aWxlIHRoYXQgZWFjaCBmaXR0ZWQgcHJvYmliaWxpdHkgZmFsbHMgaW4gCmRlY2lsZUlEIDwtIGN1dChwcm9icywgCiAgICAgICAgICAgICAgICBicmVha3MgPSBkZWNpbGUuY3V0cG9pbnRzLCAKICAgICAgICAgICAgICAgIGxhYmVscyA9IDE6MTAsIAogICAgICAgICAgICAgICAgaW5jbHVkZS5sb3dlc3QgPSBUUlVFKQoKIyBDYWxjdWxhdGUgdGhlIG51bWJlciB0aGF0IHN3aXRjaGVkIGluIGVhY2ggZGVjaWxlIAojIFlvdSBjYW4gc2VlIHRoZSBjb3VudHMgYnkgdXNpbmcgdGFibGU6IAp0YWIgPC0gdGFibGUoZGVjaWxlSUQsIHBhcnRpY2lwYXRpb24pCiMgdGFiCiMgVG8gdHVybiB0aGUgdGFibGUgaW50byBhIGRhdGEuZnJhbWUsIHVzZSBhcy5kYXRhLmZyYW1lLm1hdHJpeApvYnNlcnZlZCA8LSBhcy5kYXRhLmZyYW1lLm1hdHJpeCh0YWIpCgojIFRvIGNhbGN1bGF0ZSB0aGUgZXhwZWN0ZWQgdmFsdWVzIGZvciBlYWNoIGRlY2lsZSwgCiMgd2UgbmVlZCB0byBzdW0gdGhlIGZpdHRlZCBwcm9iYWJpbGl0aWVzIGZvciBlYWNoIGRlY2lsZQojIFdlIGNhbiBkbyB0aGlzIGJ5IHVzaW5nIHRhcHBseSB0byBjb21wdXRlIAojIHRoZSBzdW0gb2YgcHJvYnMgd2l0aGluIGVhY2ggbGV2ZWwgb2YgZGVjaWxlSUQ6IApleHBlY3RlZDEgPC0gdGFwcGx5KHByb2JzLCBkZWNpbGVJRCwgRlVOID0gc3VtKQoKIyBDcmVhdGUgYSBzdW1tYXJ5IGNhbGlicmF0aW9uIHRhYmxlCiMgQ3JlYXRlIGN1dHBvaW50cyB0aGF0IHJlcHJlc2VudCB0aGUgOSBpbnRlcnZhbHMgdGhhdCBleGlzdCBmb3IgZGVjaWxlcyAKaW50ZXJ2YWwuY3V0cG9pbnRzIDwtIHJvdW5kKHF1YW50aWxlKHByb2JzLCBwcm9icyA9IHNlcSguMSwgMSwgLjEpKSwgMikKCiMgQ3JlYXRlIGEgZGF0YWZyYW1lIHdpdGggdGhlc2UgY3V0cG9pbnRzOiAKY2FsIDwtIGRhdGEuZnJhbWUoaW50ZXJ2YWwuY3V0cG9pbnRzKQoKIyBBZGQgYSBjb2x1bW4gb2Ygb2JzZXJ2ZWQgMSdzCmNhbCRvYnNlcnZlZDEgPC0gb2JzZXJ2ZWRbLCAyXQoKIyBBZGQgYSBjb2x1bW4gb2YgZXhwZWN0ZWQgMSdzCmNhbCRleHBlY3RlZDEgPC0gcm91bmQoZXhwZWN0ZWQxLCAwKQoKIyBBZGQgYSBjb2x1bW4gZm9yIHRoZSB0b3RhbCAjIG9mIG9ic2VydmF0aW9ucyBpbiBlYWNoIGRlY2lsZQpjYWwkdG90YWwgPC0gdGFibGUoZGVjaWxlSUQpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIApgYGAKCmBgYHtyLCByZXN1bHRzPSdhc2lzJ30Ka2FibGUoY2FsKQojcHJpbnQoeHRhYmxlKGNhbCksIHR5cGU9Imh0bWwiKQpgYGAKTG9va2luZyBhdCB0aGVzZSB2YWx1ZXMsIGl0IHNlZW1zIGxpa2UgdGhlIG1vZGVsIGlzIHdlbGwtc3BlY2lmaWVkIHNpbmNlIHRoZSBwcmVkaWN0aW9ucyBhbmQgdGhlIAphY3R1YWxzIGFyZSBzaW1pbGFyLgoKIzQuIENhbGlicmF0aW9uIHBsb3QKYGBge3J9CgpgYGAKCltcLS1Db21tZW50cyAjIWNhbDEtLV0KCiMgMzogQ29uZHVjdCB0aGUgbG9naXN0aWMgcmVncmVzc2lvbiB2ZXJzaW9uIG9mIHRoZSBtb2RlbCBwcm9wb3NlZCBpbiBUYWJsZSAxLiAgCgoKIyAyLjMuMTogSW50ZXJwcmV0IHRoZSBsb2dpc3RpYyByZWdyZXNzaW9uIGNvZWZmaWNpZW50cyBpbiB0ZXJtcyBvZiBsb2cgb2RkcyByYXRpb3MuIAoKIyAyLjMuMjogUGxvdCB0aGUgcHJlZGljdGVkIHByb2JhYmlsaXR5IG9mIGxhYm9yIGZvcmNlIHBhcnRpY2lwYXRpb24gYWdhaW5zdCB3b21hbidzIGFnZSBob2xkaW5nIHRoZQojIG90aGVyIHZhcmlhYmxlcyBhdCB0aGVpciBtZWFuCgojIDIuNDogQ3JlYXRlIGFuZCBleGFtaW5lIGEgY2FsaWJyYXRpb24gcGxvdCBhbmQgY2FsaWJyYXRpb24gdGFibGUgZm9yIHRoZSBtb2RlbCBwcm9wb3NlZCBpbiBUYWJsZSAxCgoKIyB0YWJsZSgpCgojIDIuNC4xOiBEb2VzIHRoZXJlIHNlZW0gdG8gYmUgYSBtb2RlbCBtaXNzcGVjaWZpY2F0aW9uPwoKIyAyLjQuMjogV2h5IG9yIHdoeSBub3Q/CgojIDIuNTogQ29tcGFyZSBsb2dpc3RpYyByZWdyZXNzaW9uIGFuZCBhIGdlbmVyYWxpemVkIGFkZGl0aXZlIG1vZGVsIHdpdGggc21vb3RoaW5nIG9uIGFnZSBhbmQgZWR1Y2F0aW9uCiMgZm9yIHRoZSBtb2RlbCBwcm9wb3NlZCBpbiBUYWJsZSAxCgojIGdhbSgpCgoKIyAyLjUuMTogTG9vayBhdCB0aGUgcGFydGlhbCByZXNpZHVhbCBwbG90cyBmcm9tIHRoZSBHQU0uICBEbyBhbnkgdHJhbnNmb3JtYXRpb25zIHNlZW0gbmVjZXNzYXJ5IAojIGZvciBhZ2Ugb3IgZWR1Y2F0aW9uPyAgd2h5PwoKCiMgMi42OiBVc2UgU3R1a2VsJ3MgdGVzdCBmb3IgdGhlIGxvZ2lzdGljIHJlZ3Jlc3Npb24KCj8/PwoKIyAyLjYuMTogVXNlIFN0dWtlbCdzIHRlc3QgZm9yIHRoZSBHQU0KCiEhIQoKIyAyLjYuMjogRG9lcyB0aGUgbG9naXQgbGluayBmdW5jdGlvbiBzZWVtIGFwcHJvcHJpYXRlPyAgV2h5IG9yIHdoeSBub3Q/CgpfX18/CgojIDIuNzogQ3JlYXRlIGEgY3Jvc3MtdmFsaWRhdGVkIFJPQyBjdXJ2ZSBmb3IgdGhlIGxvZ2lzdGljIHJlZ3Jlc3Npb246CmBgYHtyfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgaW5zdGFsbC5wYWNrYWdlcygiUk9DUiIsIHJlcG9zID0gImh0dHA6Ly9saWIuc3RhdC5jbXUuZWR1L1IvQ1JBTi8iKQpsaWJyYXJ5KFJPQ1IpCgojIEdlbmVyYXRlIHByZWRpY3Rpb25zIGZyb20gbW9kZWwKZ2xtMSA8LSBnbG0oeSB+IHgxICsgeDIsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKbG9ncl9tb2RlbCA8LSBnbG0ocGFydGljaXBhdGlvbiB+IGFnZSArIGFnZXNxICsgZWR1Y2F0aW9uICsgbnljICsgbm9jICsgbmxpbmMgKyBmb3JlaWduLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGE9U3dpc3NMYWJvcikKcHJlZGljdGlvbnMgPC0gcHJlZGljdGlvbihwcmVkaWN0KGxvZ3JfbW9kZWwsIHR5cGUgPSAicmVzcG9uc2UiKSwgeSkKc3RyKHByZWRpY3Rpb25zKQpjdXRzIDwtIHVubGlzdChwcmVkaWN0aW9uc0BjdXRvZmZzKQpjdXRzCmZwIDwtIHVubGlzdChwcmVkaWN0aW9uc0BmcCkKZnAKdHAgPC0gdW5saXN0KHByZWRpY3Rpb25zQHRwKQp0cAp0biA8LSB1bmxpc3QocHJlZGljdGlvbnNAdG4pCnRuCmZuIDwtIHVubGlzdChwcmVkaWN0aW9uc0BmbikKZm4KCm9wdGlvbnMoc2NpcGVuID0gOTksIGRpZ2l0cyA9IDIpCnByZWRzIDwtIGRhdGEuZnJhbWUoImN1dHMiID0gY3V0cywgImZwIiA9IGZwLCAidHAiID0gdHAsICJ0biIgPSB0biwgImZuIiA9IGZuKQpwcmVkcwoKIyBHZW5lcmF0ZSB0cnVlIHBvc2l0aXZlIGFuZCBmYWxzZSBwb3NpdGl2ZSByYXRlcyBmcm9tIHByZWRpY3Rpb25zCnBlcmYgPC0gcGVyZm9ybWFuY2UocHJlZGljdGlvbnMsIG1lYXN1cmUgPSAidHByIiwgeC5tZWFzdXJlID0gImZwciIpCnN0cihwZXJmKQpjdXQgPC0gdW5saXN0KHBlcmZAYWxwaGEudmFsdWVzKQpmcHIgPC0gdW5saXN0KHBlcmZAeC52YWx1ZXMpCnRwciA8LSB1bmxpc3QocGVyZkB5LnZhbHVlcykKY2JpbmQoY3V0LCB0cHIsIGZwcikKCiMgUGxvdCBST0MgY3VydmUKcGFyKGNleCA9IDEuMywgbWFyID0gYyg1LCA0LCAyLCAxKSkKcGxvdChwZXJmLCAKICAgICBjb2xvcml6ZSAgICAgICAgID0gVFJVRSwKICAgICBjb2xvciAgICAgICAgICAgID0gcmFpbmJvdygxMCksCiAgICAgbWFpbiAgICAgICAgICAgICA9ICJSZWNlaXZlciBPcGVyYXRpbmcgQ2hhcmFjdGVyaXN0aWMiLAogICAgIHByaW50LmN1dG9mZnMuYXQgPSBzZXEoLjAsIC45LCBieSA9IDAuMSksCiAgICAgdGV4dC5hZGogICAgICAgICA9IGMoLS41LCAxLjIpLAogICAgIHhsYWIgICAgICAgICAgICAgPSAiRmFsc2UgUG9zaXRpdmUgUmF0ZSAoMS1TcGVjaWZpY2l0eSkgKEZQLyhGUCtUTikpIiwKICAgICB5bGFiICAgICAgICAgICAgID0gIlRydWUgUG9zaXRpdmUgUmF0ZSAoU2Vuc2l0aXZpdHkpIChUUC8oVFArRk4pKSIpCmFibGluZSgwLCAxKQoKIyMgQ3Jvc3MtdmFsaWRhdGlvbgojIGdlbmVyYXRlIGVtcHR5IHByZWRpY3Rpb24gYW5kIG91dGNvbWUgdmVjdG9ycwpwcmVkaWN0aW9ucyA8LSBjKCkKbGFiZWxzIDwtIGMoKSAKZGF0IDwtIGRhdGEuZnJhbWUoeSwgeDEsIHgyKQoKIyBsb2dpc3RpYyByZWdyZXNzaW9uIENWIGZ1bmN0aW9uCmxvZ2l0LmN2IDwtIGZ1bmN0aW9uKGRhdGEgPSBkYXQsIGsgPSA1KXsKICAjIHNlbGVjdCBudW1iZXIgb2YgZm9sZHMKICBmb2xkcyA8LSBrIDwtIDUKICAjIGdlbmVyYXRlIGZvbGQgc2VxdWVuY2UKICBmb2xkLm51bSA8LSByZXAoMTpmb2xkcywgbGVuZ3RoLm91dCA9IGxlbmd0aCh5KSkKICAjIHJhbmRvbWl6ZSBmb2xkIHNlcXVlbmNlCiAgZm9sZC5zYW1wIDwtIHNhbXBsZShmb2xkLm51bSkKICBmb3IoaSBpbiAxOmspewogICAgIyBUcmFpbmluZyBkYXRhIAogICAgdHJhaW4gPC0gZGF0YVtmb2xkLnNhbXAgIT0gaSwgXQogICAgIyBUZXN0IGRhdGEgdGFrZXMgdGhlIHJlbWFpbmluZyByb3dzCiAgICB0ZXN0IDwtIGRhdGFbZm9sZC5zYW1wID09IGksIF0KICAgICMgUnVuIGdsbSBvbiB0cmFpbmluZyBkYXRhCiAgICBnbG0gPC0gZ2xtKHkgfiB4MSArIHgyLCBkYXRhID0gdHJhaW4sIAogICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkKICAgICMgTWFrZSBwcm9iYWJpbGl0eSBwcmVkaWN0aW9ucyBmb3IgdGVzdCBkYXRhCiAgICBnbG1wcmVkIDwtIHByZWRpY3QoZ2xtLCB0ZXN0LCB0eXBlID0gInJlc3BvbnNlIikKICAgICMgQWRkIHRoZSBwcmVkaWN0aW9ucyBmb3IgdGhpcyBpdGVyYXRpb24gdG8gdGhlIGRhdGEgZnJhbWUKICAgIHByZWRpY3Rpb25zIDwtIGMocHJlZGljdGlvbnMsIGdsbXByZWQpCiAgICAjIEFkZCB0aGUgYWN0dWFsIG91dGNvbWVzIGZvciB0aGlzIGl0ZXJhdGlvbiB0byB0aGUgZGF0YSBmcmFtZQogICAgbGFiZWxzIDwtIGMobGFiZWxzLCB0ZXN0JHkpCiAgICB9CiAgcmV0dXJuKGxpc3QocHJlZGljdGlvbnMsIGxhYmVscykpCn0KCmxvZ2l0LmN2KCkKCmN2ZGF0YSA8LSByZXBsaWNhdGUoMiwgbG9naXQuY3YoKSkKY3ZkYXRhCgpwcmVkcyA8LSBzYXBwbHkoY3ZkYXRhWzEsIF0sIGNiaW5kKQpwcmVkcwoKbGFicyA8LSBzYXBwbHkoY3ZkYXRhWzIsIF0sIGNiaW5kKQpsYWJzCgojIFJ1biB0aGUgUk9DUiBwcmVkaWN0aW9uIGFuZCBwZXJmb3JtYW5jZSBtZWFzdXJlcwpnbG1lcnIgPC0gcHJlZGljdGlvbihwcmVkcywgbGFicykKZ2xtZXJyCmdsbWVyckBjdXRvZmZzCmdsbWVyckBmcApnbG1lcnJAdHAKCmdsbXBlcmYgPC0gcGVyZm9ybWFuY2UoZ2xtZXJyLCBtZWFzdXJlPSJ0cHIiLCB4Lm1lYXN1cmU9ImZwciIpCmdsbXBlcmYKZ2xtcGVyZkBhbHBoYS52YWx1ZXMKZ2xtcGVyZkB4LnZhbHVlcwpnbG1wZXJmQHkudmFsdWVzCgojIFRoaXMgZ2l2ZXMgYSB2ZWN0b3Igb2YgQVVDcwpnbG1hdWMgPC0gcGVyZm9ybWFuY2UoZ2xtZXJyLCBtZWFzdXJlID0gImF1YyIpCiMgVW5saXN0IHRoZSBBVUNzCmdsbWF1YyA8LSB1bmxpc3QoZ2xtYXVjQHkudmFsdWVzKQpnbG1hdWMKIyBUYWtlIHRoZSBhdmVyYWdlCmdsbWF1YyA8LSBtZWFuKGdsbWF1YykgCgojIENyb3NzLXZhbGlkYXRlZCBST0MgY3VydmUKcGFyKGNleCA9IDEuMywgbWFyID0gYyg1LCA0LCAyLCAxKSkKcGxvdChnbG1wZXJmLAogICAgIGNvbG9yaXplICAgICAgICAgPSBUUlVFLAogICAgIGNvbG9yICAgICAgICAgICAgPSByYWluYm93KDEwKSwKICAgICBtYWluICAgICAgICAgICAgID0gIkNyb3NzLVZhbGlkYXRlZCBST0MgQ3VydmUiLAogICAgIGF2ZyAgICAgICAgICAgICAgPSAndGhyZXNob2xkJywgCiAgICAgc3ByZWFkLmVzdGltYXRlICA9ICdzdGRkZXYnLAogICAgIHByaW50LmN1dG9mZnMuYXQgPSBzZXEoLjAsIC45LCBieSA9IDAuMSksCiAgICAgdGV4dC5hZGogICAgICAgICA9IGMoLS41LCAxLjIpLAogICAgIHhsYWIgICAgICAgICAgICAgPSAiQXZlcmFnZSBGYWxzZSBQb3NpdGl2ZSBSYXRlIiwKICAgICB5bGFiICAgICAgICAgICAgID0gIkF2ZXJhZ2UgVHJ1ZSBQb3NpdGl2ZSBSYXRlIikKYWJsaW5lKDAsIDEpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpgYGAKCiMgMi43LjE6IENyZWF0ZSBhIGNyb3NzLXZhbGlkYXRlZCBST0MgY3VydmUgd2l0aCB0cmFuc2Zvcm1hdGlvbnMgYW5kIGludGVyYWN0aW9ucyBpbmRpY2F0ZWQgYnkgcHJldmlvdXMgd29yazoKIyAyLjcuMjogV2hpY2ggbW9kZWwgcGVyZm9tcyBiZXR0ZXIgaW4gdGVybXMgb2YgY3Jvc3MtdmFsaWRhdGlvbj8gIFdoaWNoIGRvIEkgcHJlZmVyPwoKIyAyLjg6IENvbW1lbnQgb24gc3RhdGlzdGljYWwgaW5mZXJlbmNlIGFuZCBjYXVzYWxpdHkgc3RvcmllczoKIyAyLjguMTogVXNlIHNpbXVsYXRpb25zIG9yIGNvbmZpZGVuY2UgaW50ZXJ2YWxzCiMgc2ltcygpCg==
2.8: Comment on statistical inference and causality stories: