Typical workflow setup
a) Define a working directory
You can use any directory in your computer. As in the example below:
setwd("C:/myfolder")
b) Read in data
This is from Wright and London’s book website companion.
mydata<-read.delim("https://us.sagepub.com/sites/default/files/upm-binaries/26934_exercise.dat")
Note: You can safely ignore the warning when reading in the data.
c) Load packages
You always need to load the packages that you will be using. In this practical, we need to use the dplyr package:
library(dplyr)
Task 0: Outcome variable
The data we will use for this practical does not have a binary dependent variable, but we can easily create one by using a threshold for our continuous dependent variable sqw2
First, we gather some information about our variable:
summary(mydata$sqw2)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.7071 1.5811 1.8708 1.7892 2.1213 3.2404
The mean of sqw2 is 1.7892, so we’ll use that as a threshold. The function we use to create a new variable is ifelse:
mydata$bin_sqw2 <- ifelse(mydata$sqw2>=1.7892, 1, 0)
ifelse evaluates the condition mydata$sqw2>=1.7892; if true it returns 1 and if false it returns 0. To check whether this is done correctly, we can do the following:
mydata %>%
group_by(bin_sqw2) %>%
summarise(mean=mean(sqw2))
## # A tibble: 2 x 2
## bin_sqw2 mean
## <dbl> <dbl>
## 1 0 1.28
## 2 1 2.19
The mean for those in group 0 should be lower than the mean for those in group 1.
Task 1: Fit a simple binary logistic model
\[logit(p_i) = \ln(\frac{p_i}{1-p_i}) = \beta_0 + \beta_1x_{i1}\]
\(logit(p_i)\) is the link function that allows us to convert binary variables into continuous measures
\(\ln(\frac{p_i}{1-p_i})\) is the natural logarithm of the odds of the event of interest
\(\beta_0\) is the overall mean or intercept
\(\beta_1\) is the expected increase in the log-odds when x changes in one unit
\(x_{i1}\) is the independent variable
Note: It is worth noting that logistic regression does not have an error term (\(\epsilon\)). Without going into too much detail, this is because the variance \(p(1-p)\) of the binomial distribution depends on the mean \(p\)
Now let’s fit a logistic model. We’ll use the function glm (generalised linear model), which follows the same logic of the function lm that we use for linear regression. The difference is that we need to the subcommand family=binomial(logit) to indicate that this is a binary logistic regression model (BLR).
logmodel1<-glm(bin_sqw2 ~ sqw1,
family=binomial(logit),
data=mydata)
summary(logmodel1)
##
## Call:
## glm(formula = bin_sqw2 ~ sqw1, family = binomial(logit), data = mydata)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.1349 -0.7531 0.2855 0.7986 2.3886
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.0855 0.4989 -10.19 <2e-16 ***
## sqw1 3.2418 0.2966 10.93 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 690.37 on 502 degrees of freedom
## Residual deviance: 461.18 on 501 degrees of freedom
## AIC: 465.18
##
## Number of Fisher Scoring iterations: 5
According to this model, the baseline score sqw1 is significant predictor of scoring an average or above score after the trial. An increase of one unit implies an increase of 3.2418 log-odds of the outcome. The log-odds scale is not readily interpretable as it comes, but we know that a positive log-odds implies an increase in the odds (or probability) of the outcome of interest. So, the higher the score at baseline, the more likely a pupil is to score average or above after the trial. We’ll get back to the interpretation of this in the next task.
This is in line with what we found in the linear model. However, we know that the conditions of the trial also made a difference in scores after trial.
Task 2: Fit a multiple binary logistic model
The logic behind a multiple binary logistic model is the same than for linear regression. We rarely rely on one independent variable to explain variation in a dependent variable. We can extend the previous equation to allow for more independent variables as follows:
\[logit(p_i) = \ln(\frac{p_i}{1-p_i}) = \beta_0 + \beta_1x_{i1}+ \beta_2x_{i2} + \dots + \beta_nx_{in}\] All the terms mean the same as before, so we’ll focus on the new information:
\(\beta_2\) is the expected increase in the dependent variable conditional on the rest of the variables remaining constant
\(x_{i2}\) is a second independent variable
\(\beta_nx_{in}\) is used to indicate that there can be multiple independent variables
Now, let’s fit a model that includes the trial conditions (wcond):
logmodel2<-glm(bin_sqw2 ~ sqw1 + factor(wcond),
family=binomial(logit),
data=mydata)
summary(logmodel2)
##
## Call:
## glm(formula = bin_sqw2 ~ sqw1 + factor(wcond), family = binomial(logit),
## data = mydata)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.2124 -0.7585 0.2443 0.7218 2.6894
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.9697 0.5782 -10.326 < 2e-16 ***
## sqw1 3.3664 0.3074 10.952 < 2e-16 ***
## factor(wcond)2 0.7479 0.3304 2.264 0.02359 *
## factor(wcond)3 1.1452 0.3196 3.583 0.00034 ***
## factor(wcond)4 0.8838 0.3417 2.587 0.00969 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 690.37 on 502 degrees of freedom
## Residual deviance: 446.66 on 498 degrees of freedom
## AIC: 456.66
##
## Number of Fisher Scoring iterations: 5
Each of the wcond coefficients refer to the difference between the specific condition and the control group. For example, wcond4 has an expected log-odds estimate that is 0.8838 larger than the log-odds of the control group. This is statistically significant since p=0.00969.
But the problem is that results are in the log-odds scale; thus, not necessarily easy to interpret. To see the results in odds ratio, we need to do exponentiation. You can do exp() for each coefficient separately, or you can access all the coefficients of the fitted model object.
exp(logmodel2$coefficients)
## (Intercept) sqw1 factor(wcond)2 factor(wcond)3 factor(wcond)4
## 0.002554924 28.974302013 2.112561059 3.142957336 2.420035894
Now you can see that children in Leaflet+plan+quiz are 2.42 times as likely to have an average or above score after the trial as children in the control group.
Question time!
Q1. What is the effect of Leaflet+plan compared to the control group?
Confidence intervals
To get the confidence intervals for logmodel2 in the log-odds and the odds-ratio scales, we can type the following:
confint(logmodel2)
## 2.5 % 97.5 %
## (Intercept) -7.1616042 -4.890266
## sqw1 2.7953334 4.003209
## factor(wcond)2 0.1053595 1.403167
## factor(wcond)3 0.5262875 1.781631
## factor(wcond)4 0.2208882 1.563289
exp(confint(logmodel2))
## 2.5 % 97.5 %
## (Intercept) 0.000775809 0.007519423
## sqw1 16.368085684 54.773627734
## factor(wcond)2 1.111109967 4.068062124
## factor(wcond)3 1.692636721 5.939534741
## factor(wcond)4 1.247183980 4.774499070
Bonus track
Odds can be further converted to probabilities by using the following formula:
\[p = \frac{OR}{1+OR} = \frac{exp(\beta)}{1+exp(\beta)}\]
Question time!
Q2. What is the probability of Leaflet to have an average or above score after the trial?
LS0tDQp0aXRsZTogIkxvZ2lzdGljIFJlZ3Jlc3Npb24gPGltZyBzcmM9XCJzZW1pbmFyc19sb2dvLnBuZ1wiIHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiNTBcIiBzdHlsZT1cImZsb2F0OiByaWdodDtcIi8+Ig0KYXV0aG9yOiAiUGF0cmljaW8gVHJvbmNvc28iDQpkYXRlOiAiTGF0ZXN0IHVwZGF0ZTogTWFyY2ggMjAyMCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgaGlnaGxpZ2h0ZXI6IG51bGwNCiAgICB0aGVtZTogY29zbW8NCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgZm9udHNpemU6IDEycHQNCiAgICBpbmNsdWRlczoNCiAgICAgIGFmdGVyX2JvZHk6IGZvb3Rlci5odG1sDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIyBTb21lIGJhY2tncm91bmQgaW5mb3JtYXRpb24NCg0KRm9yIHRoaXMgcHJhY3RpY2FsLCB3ZeKAmWxsIGJlIHVzaW5nIG9wZW4gZGF0YSBmcm9tIHRoZSBmb2xsb3dpbmcgc291cmNlOiBXcmlnaHQsIEQuIGFuZCBMb25kb24sIEsuICgyMDExKS4gTW9kZXJuIFJlZ3Jlc3Npb24gVGVjaG5pcXVlcyBVc2luZyBSLCBMb25kb246ICBTYWdlLiAoQ2hhcHRlciA4KS4gVGhpcyBpcyBhdmFpbGFibGUgWypoZXJlKl0oaHR0cDovL2R4LmRvaS5vcmcvMTAuNDEzNS85NzgwODU3MDI0NDk3KS4NCg0KVGhpcyBkYXRhc2V0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgcmFuZG9taXNlZCBjb250cm9sbGVkIHRyaWFsLCBpbiB3aGljaCBwcmltYXJ5IHNjaG9vbCBwdXBpbHMgd2VyZSBhc2tlZCBhYm91dCB0aGUgdGltZSB0aGV5IHNwZW50IGRvaW5nIGV4ZXJjaXNlcyAod2Vla2x5KS4gVGhlbiwgdGhlaXIgY2xhc3NlcyAod2l0aGluIHNjaG9vbHMpIHdlcmUgZGl2aWRlZCBpbnRvIDQgZGlmZmVyZW50IGdyb3VwcyBhbmQgcHVwaWxzIHdpdGhpbiB0aG9zZSBjbGFzc2VzIHdlcmUgZ2l2ZW4gZGlmZmVyZW50IHRyZWF0bWVudHM6DQogIA0KMSkgQ29udHJvbCAobm8gdHJlYXRtZW50IGF0IGFsbCkNCjIpIExlYWZsZXQgKGluZm9ybWF0aW9uIGFib3V0IGV4ZXJjaXNpbmcpDQozKSBMZWFmbGV0K3BsYW4gKHRoZSBsZWFmbGV0IGFuZCBhIHBsYW4gb2YgZXhlcmNpc2UpDQo0KSBMZWFmbGV0K3BsYW4rcXVpeiAobGVhZmxldCwgcGxhbiBhbmQgYSBxdWl6IHRvIGRvIGFib3V0IGV4ZXJjaXNpbmcpDQoNClB1cGlscyB3ZXJlIGFza2VkIGFnYWluIGFib3V0IHRoZSB0aW1lIHRoZXkgc3BlbnQgZG9pbmcgZXhlcmNpc2VzICh3ZWVrbHkpIHNvbWUgdGltZSBhZnRlciB0aGUgdHJlYXRtZW50cyB3ZXJlIGdpdmVuLg0KDQpUaGUgdmFyaWFibGUgc3F3MiBpcyB0aGUgb3V0Y29tZSAodGltZSBzcGVudCBkb2luZyBleGVyY2lzZXMgYWZ0ZXIgdHJlYXRtZW50KS4NClRoZSB2YXJpYWJsZSBzcXcxIGlzIHRoZSBtZWFzdXJlIGJlZm9yZSB0aGUgdHJlYXRtZW50Lg0KVGhlIHZhcmlhYmxlIHdjb25kIGlzIHRoZSBncm91cCBvciBjb25kaXRpb24gdG8gd2hpY2ggdGhlIGNsYXNzIG9mIHRoZSBwdXBpbHMgd2FzIGFzc2lnbmVkDQoNCiMgVHlwaWNhbCB3b3JrZmxvdyBzZXR1cA0KDQojIyBhKSBEZWZpbmUgYSB3b3JraW5nIGRpcmVjdG9yeQ0KDQpZb3UgY2FuIHVzZSBhbnkgZGlyZWN0b3J5IGluIHlvdXIgY29tcHV0ZXIuIEFzIGluIHRoZSBleGFtcGxlIGJlbG93Og0KDQpgYGB7fQ0Kc2V0d2QoIkM6L215Zm9sZGVyIikNCmBgYA0KDQojIyBiKSBSZWFkIGluIGRhdGEgDQoNClRoaXMgaXMgZnJvbSBXcmlnaHQgYW5kIExvbmRvbidzIGJvb2sgd2Vic2l0ZSBjb21wYW5pb24uIA0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9Rn0NCm15ZGF0YTwtcmVhZC5kZWxpbSgiaHR0cHM6Ly91cy5zYWdlcHViLmNvbS9zaXRlcy9kZWZhdWx0L2ZpbGVzL3VwbS1iaW5hcmllcy8yNjkzNF9leGVyY2lzZS5kYXQiKQ0KYGBgDQoNCk5vdGU6IFlvdSBjYW4gc2FmZWx5IGlnbm9yZSB0aGUgd2FybmluZyB3aGVuIHJlYWRpbmcgaW4gdGhlIGRhdGEuDQoNCiMjIGMpIExvYWQgcGFja2FnZXMNCg0KWW91IGFsd2F5cyBuZWVkIHRvIGxvYWQgdGhlIHBhY2thZ2VzIHRoYXQgeW91IHdpbGwgYmUgdXNpbmcuIEluIHRoaXMgcHJhY3RpY2FsLCB3ZSBuZWVkIHRvIHVzZSB0aGUgYGRwbHlyYCBwYWNrYWdlOg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GfQ0KbGlicmFyeShkcGx5cikNCmBgYA0KDQo8YnI+DQoNCioqKg0KDQojIFRhc2sgMDogT3V0Y29tZSB2YXJpYWJsZQ0KDQpUaGUgZGF0YSB3ZSB3aWxsIHVzZSBmb3IgdGhpcyBwcmFjdGljYWwgZG9lcyBub3QgaGF2ZSBhIGJpbmFyeSBkZXBlbmRlbnQgdmFyaWFibGUsIGJ1dCB3ZSBjYW4gZWFzaWx5IGNyZWF0ZSBvbmUgYnkgdXNpbmcgYSB0aHJlc2hvbGQgZm9yIG91ciBjb250aW51b3VzIGRlcGVuZGVudCB2YXJpYWJsZSBgc3F3MmANCg0KRmlyc3QsIHdlIGdhdGhlciBzb21lIGluZm9ybWF0aW9uIGFib3V0IG91ciB2YXJpYWJsZToNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9Rn0NCnN1bW1hcnkobXlkYXRhJHNxdzIpDQpgYGANCg0KVGhlIG1lYW4gb2YgYHNxdzJgIGlzIDEuNzg5Miwgc28gd2UnbGwgdXNlIHRoYXQgYXMgYSB0aHJlc2hvbGQuIFRoZSBmdW5jdGlvbiB3ZSB1c2UgdG8gY3JlYXRlIGEgbmV3IHZhcmlhYmxlIGlzIGlmZWxzZToNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9Rn0NCm15ZGF0YSRiaW5fc3F3MiA8LSBpZmVsc2UobXlkYXRhJHNxdzI+PTEuNzg5MiwgMSwgMCkNCmBgYA0KDQpgaWZlbHNlYCBldmFsdWF0ZXMgdGhlIGNvbmRpdGlvbiBgbXlkYXRhJHNxdzI+PTEuNzg5MmA7IGlmIHRydWUgaXQgcmV0dXJucyAxIGFuZCBpZiBmYWxzZSBpdCByZXR1cm5zIDAuIFRvIGNoZWNrIHdoZXRoZXIgdGhpcyBpcyBkb25lIGNvcnJlY3RseSwgd2UgY2FuIGRvIHRoZSBmb2xsb3dpbmc6DQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZ9DQpteWRhdGEgJT4lDQogIGdyb3VwX2J5KGJpbl9zcXcyKSAlPiUNCiAgc3VtbWFyaXNlKG1lYW49bWVhbihzcXcyKSkNCmBgYA0KDQpUaGUgbWVhbiBmb3IgdGhvc2UgaW4gZ3JvdXAgMCBzaG91bGQgYmUgbG93ZXIgdGhhbiB0aGUgbWVhbiBmb3IgdGhvc2UgaW4gZ3JvdXAgMS4NCg0KPGJyPg0KDQoqKioNCg0KIyBUYXNrIDE6IEZpdCBhIHNpbXBsZSBiaW5hcnkgbG9naXN0aWMgbW9kZWwNCg0KJCRsb2dpdChwX2kpID0gXGxuKFxmcmFje3BfaX17MS1wX2l9KSA9IFxiZXRhXzAgKyBcYmV0YV8xeF97aTF9JCQNCg0KJGxvZ2l0KHBfaSkkIGlzIHRoZSBgbGlua2AgZnVuY3Rpb24gdGhhdCBhbGxvd3MgdXMgdG8gY29udmVydCBiaW5hcnkgdmFyaWFibGVzIGludG8gY29udGludW91cyBtZWFzdXJlcw0KDQokXGxuKFxmcmFje3BfaX17MS1wX2l9KSQgaXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSBgb2Rkc2Agb2YgdGhlIGV2ZW50IG9mIGludGVyZXN0DQoNCiRcYmV0YV8wJCBpcyB0aGUgb3ZlcmFsbCBtZWFuIG9yIGludGVyY2VwdA0KDQokXGJldGFfMSQgaXMgdGhlIGV4cGVjdGVkIGluY3JlYXNlIGluIHRoZSBgbG9nLW9kZHNgIHdoZW4gYHhgIGNoYW5nZXMgaW4gb25lIHVuaXQNCg0KJHhfe2kxfSQgaXMgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlDQoNCioqKg0KDQoqKk5vdGU6KiogSXQgaXMgd29ydGggbm90aW5nIHRoYXQgbG9naXN0aWMgcmVncmVzc2lvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIHRlcm0gKCRcZXBzaWxvbiQpLiBXaXRob3V0IGdvaW5nIGludG8gdG9vIG11Y2ggZGV0YWlsLCB0aGlzIGlzIGJlY2F1c2UgdGhlIHZhcmlhbmNlICRwKDEtcCkkIG9mIHRoZSBiaW5vbWlhbCBkaXN0cmlidXRpb24gZGVwZW5kcyBvbiB0aGUgbWVhbiAkcCQgDQoNCioqKg0KPGJyPg0KDQpOb3cgbGV0J3MgZml0IGEgbG9naXN0aWMgbW9kZWwuIFdlJ2xsIHVzZSB0aGUgZnVuY3Rpb24gYGdsbWAgKGdlbmVyYWxpc2VkIGxpbmVhciBtb2RlbCksIHdoaWNoIGZvbGxvd3MgdGhlIHNhbWUgbG9naWMgb2YgdGhlIGZ1bmN0aW9uIGBsbWAgdGhhdCB3ZSB1c2UgZm9yIGxpbmVhciByZWdyZXNzaW9uLiBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHdlIG5lZWQgdG8gdGhlIHN1YmNvbW1hbmQgYGZhbWlseT1iaW5vbWlhbChsb2dpdClgIHRvIGluZGljYXRlIHRoYXQgdGhpcyBpcyBhIGJpbmFyeSBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVsIChCTFIpLg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GfQ0KbG9nbW9kZWwxPC1nbG0oYmluX3NxdzIgfiBzcXcxLCANCiAgICAgICAgICAgICAgIGZhbWlseT1iaW5vbWlhbChsb2dpdCksDQogICAgICAgICAgICAgICBkYXRhPW15ZGF0YSkNCnN1bW1hcnkobG9nbW9kZWwxKQ0KYGBgDQoNCkFjY29yZGluZyB0byB0aGlzIG1vZGVsLCB0aGUgYmFzZWxpbmUgc2NvcmUgYHNxdzFgIGlzIHNpZ25pZmljYW50IHByZWRpY3RvciBvZiBzY29yaW5nIGFuIGF2ZXJhZ2Ugb3IgYWJvdmUgc2NvcmUgYWZ0ZXIgdGhlIHRyaWFsLiBBbiBpbmNyZWFzZSBvZiBvbmUgdW5pdCBpbXBsaWVzIGFuIGluY3JlYXNlIG9mIDMuMjQxOCBsb2ctb2RkcyBvZiB0aGUgb3V0Y29tZS4gVGhlIGxvZy1vZGRzIHNjYWxlIGlzIG5vdCByZWFkaWx5IGludGVycHJldGFibGUgYXMgaXQgY29tZXMsIGJ1dCB3ZSBrbm93IHRoYXQgYSBwb3NpdGl2ZSBsb2ctb2RkcyBpbXBsaWVzIGFuIGluY3JlYXNlIGluIHRoZSBvZGRzIChvciBwcm9iYWJpbGl0eSkgb2YgdGhlIG91dGNvbWUgb2YgaW50ZXJlc3QuIFNvLCB0aGUgaGlnaGVyIHRoZSBzY29yZSBhdCBiYXNlbGluZSwgdGhlIG1vcmUgbGlrZWx5IGEgcHVwaWwgaXMgdG8gc2NvcmUgYXZlcmFnZSBvciBhYm92ZSBhZnRlciB0aGUgdHJpYWwuIA0KV2UnbGwgZ2V0IGJhY2sgdG8gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgaW4gdGhlIG5leHQgdGFzay4gDQoNClRoaXMgaXMgaW4gbGluZSB3aXRoIHdoYXQgd2UgZm91bmQgaW4gdGhlIGxpbmVhciBtb2RlbC4gSG93ZXZlciwgd2Uga25vdyB0aGF0IHRoZSBjb25kaXRpb25zIG9mIHRoZSB0cmlhbCBhbHNvIG1hZGUgYSBkaWZmZXJlbmNlIGluIHNjb3JlcyBhZnRlciB0cmlhbC4NCg0KPGJyPg0KDQoqKioNCg0KIyBUYXNrIDI6IEZpdCBhIG11bHRpcGxlIGJpbmFyeSBsb2dpc3RpYyBtb2RlbA0KDQpUaGUgbG9naWMgYmVoaW5kIGEgbXVsdGlwbGUgYmluYXJ5IGxvZ2lzdGljIG1vZGVsIGlzIHRoZSBzYW1lIHRoYW4gZm9yIGxpbmVhciByZWdyZXNzaW9uLiBXZSByYXJlbHkgcmVseSBvbiBvbmUgaW5kZXBlbmRlbnQgdmFyaWFibGUgdG8gZXhwbGFpbiB2YXJpYXRpb24gaW4gYSBkZXBlbmRlbnQgdmFyaWFibGUuIFdlIGNhbiBleHRlbmQgdGhlIHByZXZpb3VzIGVxdWF0aW9uIHRvIGFsbG93IGZvciBtb3JlIGluZGVwZW5kZW50IHZhcmlhYmxlcyBhcyBmb2xsb3dzOg0KDQokJGxvZ2l0KHBfaSkgPSBcbG4oXGZyYWN7cF9pfXsxLXBfaX0pID0gXGJldGFfMCArIFxiZXRhXzF4X3tpMX0rIFxiZXRhXzJ4X3tpMn0gKyBcZG90cyArIFxiZXRhX254X3tpbn0kJA0KQWxsIHRoZSB0ZXJtcyBtZWFuIHRoZSBzYW1lIGFzIGJlZm9yZSwgc28gd2UnbGwgZm9jdXMgb24gdGhlIG5ldyBpbmZvcm1hdGlvbjoNCg0KJFxiZXRhXzIkIGlzIHRoZSBleHBlY3RlZCBpbmNyZWFzZSBpbiB0aGUgZGVwZW5kZW50IHZhcmlhYmxlIGNvbmRpdGlvbmFsIG9uIHRoZSByZXN0IG9mIHRoZSB2YXJpYWJsZXMgcmVtYWluaW5nIGNvbnN0YW50DQoNCiR4X3tpMn0kIGlzIGEgc2Vjb25kIGluZGVwZW5kZW50IHZhcmlhYmxlIA0KDQokXGJldGFfbnhfe2lufSQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBpbmRlcGVuZGVudCB2YXJpYWJsZXMNCg0KTm93LCBsZXQncyBmaXQgYSBtb2RlbCB0aGF0IGluY2x1ZGVzIHRoZSB0cmlhbCBjb25kaXRpb25zIChgd2NvbmRgKToNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9Rn0NCmxvZ21vZGVsMjwtZ2xtKGJpbl9zcXcyIH4gc3F3MSArIGZhY3Rvcih3Y29uZCksIA0KICAgICAgICAgICAgICAgZmFtaWx5PWJpbm9taWFsKGxvZ2l0KSwNCiAgICAgICAgICAgICAgIGRhdGE9bXlkYXRhKQ0Kc3VtbWFyeShsb2dtb2RlbDIpDQpgYGANCg0KRWFjaCBvZiB0aGUgd2NvbmQgY29lZmZpY2llbnRzIHJlZmVyIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNwZWNpZmljIGNvbmRpdGlvbiBhbmQgdGhlIGNvbnRyb2wgZ3JvdXAuIEZvciBleGFtcGxlLCBgd2NvbmQ0YCBoYXMgYW4gZXhwZWN0ZWQgbG9nLW9kZHMgZXN0aW1hdGUgdGhhdCBpcyAwLjg4MzggbGFyZ2VyIHRoYW4gdGhlIGxvZy1vZGRzIG9mIHRoZSBjb250cm9sIGdyb3VwLiBUaGlzIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgc2luY2UgYHA9MC4wMDk2OWAuDQoNCkJ1dCB0aGUgcHJvYmxlbSBpcyB0aGF0IHJlc3VsdHMgYXJlIGluIHRoZSBsb2ctb2RkcyBzY2FsZTsgdGh1cywgbm90IG5lY2Vzc2FyaWx5IGVhc3kgdG8gaW50ZXJwcmV0LiBUbyBzZWUgdGhlIHJlc3VsdHMgaW4gb2RkcyByYXRpbywgd2UgbmVlZCB0byBkbyBleHBvbmVudGlhdGlvbi4gWW91IGNhbiBkbyBleHAoKSBmb3IgZWFjaCBjb2VmZmljaWVudCBzZXBhcmF0ZWx5LCBvciB5b3UgY2FuIGFjY2VzcyBhbGwgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgZml0dGVkIG1vZGVsIG9iamVjdC4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9Rn0NCg0KZXhwKGxvZ21vZGVsMiRjb2VmZmljaWVudHMpDQoNCmBgYA0KDQpOb3cgeW91IGNhbiBzZWUgdGhhdCBjaGlsZHJlbiBpbiBMZWFmbGV0K3BsYW4rcXVpeiBhcmUgMi40MiB0aW1lcyBhcyBsaWtlbHkgdG8gaGF2ZSBhbiBhdmVyYWdlIG9yIGFib3ZlIHNjb3JlIGFmdGVyIHRoZSB0cmlhbCBhcyBjaGlsZHJlbiBpbiB0aGUgY29udHJvbCBncm91cC4NCg0KIyMgUXVlc3Rpb24gdGltZSENCg0KKipRMS4qKiBXaGF0IGlzIHRoZSBlZmZlY3Qgb2YgTGVhZmxldCtwbGFuIGNvbXBhcmVkIHRvIHRoZSBjb250cm9sIGdyb3VwPw0KDQojIyBDb25maWRlbmNlIGludGVydmFscw0KDQpUbyBnZXQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGZvciBsb2dtb2RlbDIgaW4gdGhlIGxvZy1vZGRzIGFuZCB0aGUgb2Rkcy1yYXRpbyBzY2FsZXMsIHdlIGNhbiB0eXBlIHRoZSBmb2xsb3dpbmc6DQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZ9DQoNCmNvbmZpbnQobG9nbW9kZWwyKQ0KZXhwKGNvbmZpbnQobG9nbW9kZWwyKSkNCg0KYGBgDQoNCjxicj4NCg0KKioqDQoNCiMgQm9udXMgdHJhY2sNCg0KT2RkcyBjYW4gYmUgZnVydGhlciBjb252ZXJ0ZWQgdG8gcHJvYmFiaWxpdGllcyBieSB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm11bGE6DQoNCiQkcCA9IFxmcmFje09SfXsxK09SfSA9IFxmcmFje2V4cChcYmV0YSl9ezErZXhwKFxiZXRhKX0kJA0KPGJyPg0KDQoNCiMjIFF1ZXN0aW9uIHRpbWUhDQoNCioqUTIuKiogV2hhdCBpcyB0aGUgcHJvYmFiaWxpdHkgb2YgTGVhZmxldCB0byBoYXZlIGFuIGF2ZXJhZ2Ugb3IgYWJvdmUgc2NvcmUgYWZ0ZXIgdGhlIHRyaWFsPw0K
Patricio Troncoso
patricio.troncoso@manchester.ac.uk