Diagnostic

Original por https://simplystatistics.org/2017/08/08/code-for-my-educational-gifs/

library("rafalib")
library("animation")

Assumptions

set.seed(2)
prev <- 1/20
acc <- 0.90
N <- 20; M <- 50
N_sick <- round(N*M*prev)
x<-sample(c(rep(1, N_sick), rep(0, N*M - N_sick)))
cols <- c("grey","red")
people <- expand.grid(1:M,N:1)
people2 <- expand.grid(1:round(M/2),N:(round(N/2)+1))
cols1 <- cols[x+1]
cols2 <- rep(NA, nrow(people2))
count2 <- 1
cols3 <- rep(NA, nrow(people2))
count3 <- 1

GIF

i <- 1
maxCount <- nrow(people2) + 1
saveGIF({
  while(count2<=maxCount & count3<=maxCount){
    test <- sample(100,1)
    min <- round(100*acc)
    rafalib::mypar()
    layout(matrix(c(1,2,1,3),2,2), heights = c(1.75,1))
    plot(people, col=cols1, pch=16, xaxt="n", yaxt="n", xlab="", ylab="", 
         main=paste0("Population: ",round(mean(x)*100),"% are red. ",
                     "Test accuracy is ", round(acc*100),"%"))
    if(test>min){
      axis(side=1, M/2, paste("Test",i,"Wrong"), col="red", tick=FALSE, 
           cex.axis=3,line=1) 
      } else{ 
        axis(side=1, M/2, paste("Test",i,"Right"), col="black", tick=FALSE,
             cex.axis=2,line=1)
      }
    points(people[i,], pch=1, cex=1.5)
    if(all(is.na(cols2))){
      plot(people2, type="n", pch=16, xaxt="n", yaxt="n", xlab="", ylab="",
           main="Tested Positive")
      } else{
        plot(people2, col=cols2, pch=16, xaxt="n", yaxt="n", xlab="", ylab="", 
             main=paste0("Tested Positive: ", 
                         round(mean(cols2=="red",na.rm=TRUE)*100),"% are red"))
      }
    if(all(is.na(cols3))){
      plot(people2, type="n", pch=16, xaxt="n", yaxt="n", xlab="", ylab="", 
           main="Tested Negative")
      } else{ 
        plot(people2, col=cols3, pch=16, xaxt="n", yaxt="n", xlab="", ylab="",
             main=paste0("Tested Negative: ", 
                         round(mean(cols3=="red",na.rm=TRUE)*100,1),
                         "% are red"))
      }
    outcome <- ifelse(x[i]==1, as.numeric(test<=min), as.numeric(test>min))
    if(outcome==0) {
      cols3[count3] <- cols1[i]
      count3<-count3+1
      } else {
        cols2[count2] <- cols1[i]
        count2<-count2+1
      }
    i<-i+1
    }
  },'bayes.gif', interval = .1)
## Executing: 
## convert -loop 0 -delay 10 Rplot1.png Rplot2.png Rplot3.png
##     Rplot4.png Rplot5.png Rplot6.png Rplot7.png Rplot8.png
##     Rplot9.png Rplot10.png Rplot11.png Rplot12.png Rplot13.png
##     Rplot14.png Rplot15.png Rplot16.png Rplot17.png Rplot18.png
##     Rplot19.png Rplot20.png Rplot21.png Rplot22.png Rplot23.png
##     Rplot24.png Rplot25.png Rplot26.png Rplot27.png Rplot28.png
##     Rplot29.png Rplot30.png Rplot31.png Rplot32.png Rplot33.png
##     Rplot34.png Rplot35.png Rplot36.png Rplot37.png Rplot38.png
##     Rplot39.png Rplot40.png Rplot41.png Rplot42.png Rplot43.png
##     Rplot44.png Rplot45.png Rplot46.png Rplot47.png Rplot48.png
##     Rplot49.png Rplot50.png Rplot51.png Rplot52.png Rplot53.png
##     Rplot54.png Rplot55.png Rplot56.png Rplot57.png Rplot58.png
##     Rplot59.png Rplot60.png Rplot61.png Rplot62.png Rplot63.png
##     Rplot64.png Rplot65.png Rplot66.png Rplot67.png Rplot68.png
##     Rplot69.png Rplot70.png Rplot71.png Rplot72.png Rplot73.png
##     Rplot74.png Rplot75.png Rplot76.png Rplot77.png Rplot78.png
##     Rplot79.png Rplot80.png Rplot81.png Rplot82.png Rplot83.png
##     Rplot84.png Rplot85.png Rplot86.png Rplot87.png Rplot88.png
##     Rplot89.png Rplot90.png Rplot91.png Rplot92.png Rplot93.png
##     Rplot94.png Rplot95.png Rplot96.png Rplot97.png Rplot98.png
##     Rplot99.png Rplot100.png Rplot101.png Rplot102.png
##     Rplot103.png Rplot104.png Rplot105.png Rplot106.png
##     Rplot107.png Rplot108.png Rplot109.png Rplot110.png
##     Rplot111.png Rplot112.png Rplot113.png Rplot114.png
##     Rplot115.png Rplot116.png Rplot117.png Rplot118.png
##     Rplot119.png Rplot120.png Rplot121.png Rplot122.png
##     Rplot123.png Rplot124.png Rplot125.png Rplot126.png
##     Rplot127.png Rplot128.png Rplot129.png Rplot130.png
##     Rplot131.png Rplot132.png Rplot133.png Rplot134.png
##     Rplot135.png Rplot136.png Rplot137.png Rplot138.png
##     Rplot139.png Rplot140.png Rplot141.png Rplot142.png
##     Rplot143.png Rplot144.png Rplot145.png Rplot146.png
##     Rplot147.png Rplot148.png Rplot149.png Rplot150.png
##     Rplot151.png Rplot152.png Rplot153.png Rplot154.png
##     Rplot155.png Rplot156.png Rplot157.png Rplot158.png
##     Rplot159.png Rplot160.png Rplot161.png Rplot162.png
##     Rplot163.png Rplot164.png Rplot165.png Rplot166.png
##     Rplot167.png Rplot168.png Rplot169.png Rplot170.png
##     Rplot171.png Rplot172.png Rplot173.png Rplot174.png
##     Rplot175.png Rplot176.png Rplot177.png Rplot178.png
##     Rplot179.png Rplot180.png Rplot181.png Rplot182.png
##     Rplot183.png Rplot184.png Rplot185.png Rplot186.png
##     Rplot187.png Rplot188.png Rplot189.png Rplot190.png
##     Rplot191.png Rplot192.png Rplot193.png Rplot194.png
##     Rplot195.png Rplot196.png Rplot197.png Rplot198.png
##     Rplot199.png Rplot200.png Rplot201.png Rplot202.png
##     Rplot203.png Rplot204.png Rplot205.png Rplot206.png
##     Rplot207.png Rplot208.png Rplot209.png Rplot210.png
##     Rplot211.png Rplot212.png Rplot213.png Rplot214.png
##     Rplot215.png Rplot216.png Rplot217.png Rplot218.png
##     Rplot219.png Rplot220.png Rplot221.png Rplot222.png
##     Rplot223.png Rplot224.png Rplot225.png Rplot226.png
##     Rplot227.png Rplot228.png Rplot229.png Rplot230.png
##     Rplot231.png Rplot232.png Rplot233.png Rplot234.png
##     Rplot235.png Rplot236.png Rplot237.png Rplot238.png
##     Rplot239.png Rplot240.png Rplot241.png Rplot242.png
##     Rplot243.png Rplot244.png Rplot245.png Rplot246.png
##     Rplot247.png Rplot248.png Rplot249.png Rplot250.png
##     Rplot251.png Rplot252.png Rplot253.png Rplot254.png
##     Rplot255.png Rplot256.png Rplot257.png Rplot258.png
##     Rplot259.png Rplot260.png Rplot261.png Rplot262.png
##     Rplot263.png Rplot264.png Rplot265.png Rplot266.png
##     Rplot267.png Rplot268.png Rplot269.png Rplot270.png
##     Rplot271.png Rplot272.png Rplot273.png Rplot274.png
##     Rplot275.png Rplot276.png Rplot277.png Rplot278.png
##     Rplot279.png Rplot280.png Rplot281.png Rplot282.png
##     Rplot283.png Rplot284.png Rplot285.png Rplot286.png
##     Rplot287.png Rplot288.png Rplot289.png Rplot290.png
##     Rplot291.png Rplot292.png Rplot293.png Rplot294.png
##     Rplot295.png Rplot296.png Rplot297.png Rplot298.png
##     Rplot299.png Rplot300.png Rplot301.png Rplot302.png
##     Rplot303.png Rplot304.png 'bayes.gif'
## Output at: bayes.gif
## [1] TRUE