Instructions

We are given a dataset with information regarding 500 individuals and their state transition status within the justice system.

Steps to Complete the Assignment

Load relevant libraries

library(matlib)
library(ggplot2)

Read the data

read.csv('JusticeDataset.csv')->data
head(data)

Identify all the states

Extract states and print them

states <- unique(c(unique(data$Current_State), unique(data$Next_State)))
print(states)
[1] "Citizen (No Record)" "First-Time Offender" "Long-Term Prison"   
[4] "Probation/Parole"    "Short-Term Prison"   "Reformed Citizen"   
[7] "Life Sentence"      

Extract the transition probability matrix

mat <- matrix(NA, nrow = length(states), ncol = length(states))


for(i in 1:length(states)){

  for(j in 1:length(states)){

      mat[i,j] <- sum(data$Current_State == states[i] & data$Next_State == states[j])

  }


}

Define absorbing states and set the probability of staying in those states to 1 manually

absorbing_states <- c("Reformed Citizen", "Life Sentence")
absorbing.idx.vect <- which(states %in% absorbing_states)
for(state.idx in absorbing.idx.vect){
  mat[state.idx, state.idx]<-1
}

mat <- mat/rowSums(mat)

This is the transition probability matrix

mat
          [,1]       [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
[1,] 0.9728507 0.02714932 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
[2,] 0.0000000 0.00000000 0.0640000 0.4560000 0.2160000 0.2640000 0.0000000
[3,] 0.0000000 0.00000000 0.3333333 0.0000000 0.0000000 0.5454545 0.1212121
[4,] 0.0000000 0.00000000 0.1111111 0.1666667 0.2638889 0.4583333 0.0000000
[5,] 0.0000000 0.00000000 0.2340426 0.2765957 0.1914894 0.2978723 0.0000000
[6,] 0.0000000 0.00000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000
[7,] 0.0000000 0.00000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000

Compute absorption probabilities

R <- mat[1:5, 6:7]
Q <- mat[1:5, 1:5]
absorption.probs <- inv(diag(5)-Q)%*%R
absorption.probs
          [,1]       [,2]
[1,] 0.9526840 0.04731601
[2,] 0.9526840 0.04731601
[3,] 0.8181818 0.18181818
[4,] 0.9541206 0.04587935
[5,] 0.9316729 0.06832715

Interpretation

print(paste0('The percentage of first time offenders that eventually become a reformed citizen is: ', absorption.probs[2,1]*100, ' %'))
[1] "The percentage of first time offenders that eventually become a reformed citizen is: 95.2683991462766 %"
print(paste0('The percentage of first time offenders that eventually get a life sentence is: ', absorption.probs[2,2]*100, ' %'))
[1] "The percentage of first time offenders that eventually get a life sentence is: 4.73160133333333 %"

time.period.reformed <- data[data$Next_State=='Reformed Citizen',]$Time_Period+1
time.period.life.sentence <- data[data$Next_State=='Life Sentence',]$Time_Period+1
ggplot()+geom_density(aes(time.period.reformed, color='reformed'), size=1.3)+
  geom_density(aes(time.period.life.sentence, color='life sentence'),size=1.3)+
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black"),
    plot.title = element_text(hjust = 0.5, size = 20),
    axis.text = element_text(size = 15),
    text = element_text(size = 18)
  )+
  scale_color_manual(values=c('reformed'='darkred', 'life sentence'='navy'))+
  labs(colour="Absorbing state", x='Time period', y='Density')

print(paste0('The average time it takes for a person to exit the justice system reformed is ', round(mean(time.period.reformed), 3), ' \n'))
[1] "The average time it takes for a person to exit the justice system reformed is 2.622 \n"
print(paste0('The average time it takes for a person to exit the justice system reformed is ', round(mean(time.period.life.sentence), 3)))
[1] "The average time it takes for a person to exit the justice system reformed is 4.75"

If someone proposes a new policy that improves the system, we can evaluate its effectiveness by running similar analysis. We can assess whether the policy decreases the mean absorption time to the reformed state for people in the Markov chain system or whether the number of people that get absorbed to the reformed state increases.

LS0tCnRpdGxlOiAiQWJzb3JiaW5nIE1hcmtvdiBDaGFpbnMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgo8aDM+SW5zdHJ1Y3Rpb25zPC9oMz4KV2UgYXJlIGdpdmVuIGEgZGF0YXNldCB3aXRoIGluZm9ybWF0aW9uIHJlZ2FyZGluZyA1MDAgaW5kaXZpZHVhbHMgYW5kIHRoZWlyIHN0YXRlIHRyYW5zaXRpb24gc3RhdHVzIHdpdGhpbiB0aGUganVzdGljZSBzeXN0ZW0uIAoKPHVsPgo8bGk+VGhlIGRhdGFzZXQgdHJhY2tzIDUwMCBpbmRpdmlkdWFscyBvdmVyIGEgbWF4aW11bSBvZiA1IHRpbWUgcGVyaW9kcywgcmVjb3JkaW5nIHRoZWlyIHN0YXRlIHRyYW5zaXRpb25zIHdpdGhpbiB0aGUganVzdGljZSBzeXN0ZW0uPC9saT4KPGxpPkluZGl2aWR1YWxzIHN0YXJ0IGFzIGVpdGhlciBsYXctYWJpZGluZyBjaXRpemVucyAoTm8gUmVjb3JkKSBvciBGaXJzdC1UaW1lIE9mZmVuZGVycy48L2xpPgo8bGk+QXMgdGltZSBwcm9ncmVzc2VzLCB0aGV5IG1vdmUgdGhyb3VnaCBkaWZmZXJlbnQgc3RhdGVzIChwcm9iYXRpb24sIHByaXNvbiwgcmVmb3JtYXRpb24sIGxpZmUgc2VudGVuY2UpIGJhc2VkIG9uIHJlYWxpc3RpYyB0cmFuc2l0aW9uIHByb2JhYmlsaXRpZXMuPC9saT4KPGxpPklmIGFuIGluZGl2aWR1YWwgcmVhY2hlcyBSZWZvcm1lZCBDaXRpemVuIG9yIExpZmUgU2VudGVuY2UsIHRoZXkgZXhpdCB0aGUgc3lzdGVtIChhYnNvcmJpbmcgc3RhdGVzKS48L2xpPgoKPC91bD4KCgpTdGVwcyB0byBDb21wbGV0ZSB0aGUgQXNzaWdubWVudAoKPHVsPgo8bGk+SWRlbnRpZnkgYWxsIHRoZSBzdGF0ZXM8L2xpPgo8bGk+RXh0cmFjdCB0aGUgVHJhbnNpdGlvbiBQcm9iYWJpbGl0eSBNYXRyaXg8L2xpPgo8bGk+Q29tcHV0ZSBBYnNvcnB0aW9uIFByb2JhYmlsaXRpZXM8L2xpPgo8bGk+SW50ZXJwcmV0IHRoZSByZXN1bHRzOgo8YnI+CldoYXQgJSBvZiBmaXJzdC10aW1lIG9mZmVuZGVycyBldmVudHVhbGx5IGJlY29tZSByZWZvcm1lZCB2cy4gZW5kIHVwIGluIGxpZmUgc2VudGVuY2U/Cjxicj4KT24gYXZlcmFnZSwgaG93IG1hbnkgc3RlcHMgKHllYXJzKSBkb2VzIGl0IHRha2UgZm9yIHNvbWVvbmUgdG8gZXhpdCB0aGUganVzdGljZSBzeXN0ZW0/Cjxicj4KSWYgc29tZW9uZSBwcm9wb3NlcyBhIG5ldyBwb2xpY3kgdGhhdCBpbXByb3ZlcyB0aGUgc3lzdGVtIGhvdyBjYW4geW91IHByb3ZlIGl0cyBlZmZlY3RpdmVuZXNzPwo8YnI+PC9saT48L3VsPgoKCkxvYWQgcmVsZXZhbnQgbGlicmFyaWVzCmBgYHtyfQpsaWJyYXJ5KG1hdGxpYikKbGlicmFyeShnZ3Bsb3QyKQpgYGAKCgpSZWFkIHRoZSBkYXRhCgpgYGB7cn0KcmVhZC5jc3YoJ0p1c3RpY2VEYXRhc2V0LmNzdicpLT5kYXRhCmhlYWQoZGF0YSkKYGBgCjxoND5JZGVudGlmeSBhbGwgdGhlIHN0YXRlczwvaDQ+CkV4dHJhY3Qgc3RhdGVzIGFuZCBwcmludCB0aGVtCgpgYGB7cn0Kc3RhdGVzIDwtIHVuaXF1ZShjKHVuaXF1ZShkYXRhJEN1cnJlbnRfU3RhdGUpLCB1bmlxdWUoZGF0YSROZXh0X1N0YXRlKSkpCnByaW50KHN0YXRlcykKYGBgCgo8aDQ+RXh0cmFjdCB0aGUgdHJhbnNpdGlvbiBwcm9iYWJpbGl0eSBtYXRyaXg8L2g0PgoKYGBge3J9Cm1hdCA8LSBtYXRyaXgoTkEsIG5yb3cgPSBsZW5ndGgoc3RhdGVzKSwgbmNvbCA9IGxlbmd0aChzdGF0ZXMpKQoKCmZvcihpIGluIDE6bGVuZ3RoKHN0YXRlcykpewoKICBmb3IoaiBpbiAxOmxlbmd0aChzdGF0ZXMpKXsKCiAgICAgIG1hdFtpLGpdIDwtIHN1bShkYXRhJEN1cnJlbnRfU3RhdGUgPT0gc3RhdGVzW2ldICYgZGF0YSROZXh0X1N0YXRlID09IHN0YXRlc1tqXSkKCiAgfQoKCn0KCmBgYAoKRGVmaW5lIGFic29yYmluZyBzdGF0ZXMgYW5kIHNldCB0aGUgcHJvYmFiaWxpdHkgb2Ygc3RheWluZyBpbiB0aG9zZSBzdGF0ZXMgdG8gMSBtYW51YWxseQoKYGBge3J9CmFic29yYmluZ19zdGF0ZXMgPC0gYygiUmVmb3JtZWQgQ2l0aXplbiIsICJMaWZlIFNlbnRlbmNlIikKYWJzb3JiaW5nLmlkeC52ZWN0IDwtIHdoaWNoKHN0YXRlcyAlaW4lIGFic29yYmluZ19zdGF0ZXMpCmZvcihzdGF0ZS5pZHggaW4gYWJzb3JiaW5nLmlkeC52ZWN0KXsKICBtYXRbc3RhdGUuaWR4LCBzdGF0ZS5pZHhdPC0xCn0KCm1hdCA8LSBtYXQvcm93U3VtcyhtYXQpCgpgYGAKClRoaXMgaXMgdGhlIHRyYW5zaXRpb24gcHJvYmFiaWxpdHkgbWF0cml4CgpgYGB7cn0KbWF0CmBgYAoKPGg0PkNvbXB1dGUgYWJzb3JwdGlvbiBwcm9iYWJpbGl0aWVzPC9oND4KCmBgYHtyfQpSIDwtIG1hdFsxOjUsIDY6N10KUSA8LSBtYXRbMTo1LCAxOjVdCmFic29ycHRpb24ucHJvYnMgPC0gaW52KGRpYWcoNSktUSklKiVSCmFic29ycHRpb24ucHJvYnMKYGBgCgo8aDQ+SW50ZXJwcmV0YXRpb248L2g0PgpgYGB7cn0KcHJpbnQocGFzdGUwKCdUaGUgcGVyY2VudGFnZSBvZiBmaXJzdCB0aW1lIG9mZmVuZGVycyB0aGF0IGV2ZW50dWFsbHkgYmVjb21lIGEgcmVmb3JtZWQgY2l0aXplbiBpczogJywgYWJzb3JwdGlvbi5wcm9ic1syLDFdKjEwMCwgJyAlJykpCnByaW50KHBhc3RlMCgnVGhlIHBlcmNlbnRhZ2Ugb2YgZmlyc3QgdGltZSBvZmZlbmRlcnMgdGhhdCBldmVudHVhbGx5IGdldCBhIGxpZmUgc2VudGVuY2UgaXM6ICcsIGFic29ycHRpb24ucHJvYnNbMiwyXSoxMDAsICcgJScpKQpgYGAKYGBge3J9Cgp0aW1lLnBlcmlvZC5yZWZvcm1lZCA8LSBkYXRhW2RhdGEkTmV4dF9TdGF0ZT09J1JlZm9ybWVkIENpdGl6ZW4nLF0kVGltZV9QZXJpb2QrMQp0aW1lLnBlcmlvZC5saWZlLnNlbnRlbmNlIDwtIGRhdGFbZGF0YSROZXh0X1N0YXRlPT0nTGlmZSBTZW50ZW5jZScsXSRUaW1lX1BlcmlvZCsxCmBgYAoKYGBge3J9CmdncGxvdCgpK2dlb21fZGVuc2l0eShhZXModGltZS5wZXJpb2QucmVmb3JtZWQsIGNvbG9yPSdyZWZvcm1lZCcpLCBzaXplPTEuMykrCiAgZ2VvbV9kZW5zaXR5KGFlcyh0aW1lLnBlcmlvZC5saWZlLnNlbnRlbmNlLCBjb2xvcj0nbGlmZSBzZW50ZW5jZScpLHNpemU9MS4zKSsKICB0aGVtZSgKICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwKICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIHNpemUgPSAyMCksCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE1KSwKICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE4KQogICkrCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1jKCdyZWZvcm1lZCc9J2RhcmtyZWQnLCAnbGlmZSBzZW50ZW5jZSc9J25hdnknKSkrCiAgbGFicyhjb2xvdXI9IkFic29yYmluZyBzdGF0ZSIsIHg9J1RpbWUgcGVyaW9kJywgeT0nRGVuc2l0eScpCmBgYAoKCmBgYHtyfQpwcmludChwYXN0ZTAoJ1RoZSBhdmVyYWdlIHRpbWUgaXQgdGFrZXMgZm9yIGEgcGVyc29uIHRvIGV4aXQgdGhlIGp1c3RpY2Ugc3lzdGVtIHJlZm9ybWVkIGlzICcsIHJvdW5kKG1lYW4odGltZS5wZXJpb2QucmVmb3JtZWQpLCAzKSwgJyBcbicpKQoKcHJpbnQocGFzdGUwKCdUaGUgYXZlcmFnZSB0aW1lIGl0IHRha2VzIGZvciBhIHBlcnNvbiB0byBleGl0IHRoZSBqdXN0aWNlIHN5c3RlbSByZWZvcm1lZCBpcyAnLCByb3VuZChtZWFuKHRpbWUucGVyaW9kLmxpZmUuc2VudGVuY2UpLCAzKSkpCmBgYAoKCklmIHNvbWVvbmUgcHJvcG9zZXMgYSBuZXcgcG9saWN5IHRoYXQgaW1wcm92ZXMgdGhlIHN5c3RlbSwgd2UgY2FuIGV2YWx1YXRlIGl0cyBlZmZlY3RpdmVuZXNzIGJ5IHJ1bm5pbmcgc2ltaWxhciBhbmFseXNpcy4gV2UgY2FuIGFzc2VzcyB3aGV0aGVyIHRoZSBwb2xpY3kgZGVjcmVhc2VzIHRoZSBtZWFuIGFic29ycHRpb24gdGltZSB0byB0aGUgcmVmb3JtZWQgc3RhdGUgZm9yIHBlb3BsZSBpbiB0aGUgTWFya292IGNoYWluIHN5c3RlbSBvciB3aGV0aGVyIHRoZSBudW1iZXIgb2YgcGVvcGxlIHRoYXQgZ2V0IGFic29yYmVkIHRvIHRoZSByZWZvcm1lZCBzdGF0ZSBpbmNyZWFzZXMuIAoKCgoK