Guest User

Gambling Machine revisited

a guest
Mar 25th, 2013
25
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ### Gambling Machine Puzzle
  2. ### Author: Corey Chivers
  3. ### http://wordplay.blogs.nytimes.com/2013/03/04/machine/
  4. ### original code adapted by: annoporci (R newbie), 25 March 2013.
  5. ### purpose: use continuous uniform distribution on reals instead of discrete distribution on integers
  6.  
  7. ### Doesn't seem to work as intended...
  8.  
  9. ### Refine computations
  10. ### Initialize
  11. rm(list=ls())
  12. xmin = 69
  13. xmax = 72
  14. step = 0.05
  15. df <- data.frame()
  16.  
  17. for( N in list(10,100,1000,10000,100000) )
  18. #for( N in list(1000000) ) # extra large
  19.   { ### start loop over sample size -N-
  20.     vector.cutoff <- numeric(length=0)
  21.     vector.payoff <- numeric(length=0)
  22.    
  23.     for( cutoff in seq(xmin, xmax, by = step) )
  24.     { ### start loop over strategies -cutoff-
  25.       set.seed(123456789)
  26.       x <- runif(N, min = 0, max = 100)
  27.       y <- runif(N, min = 0, max = 100)
  28.       payoff <- numeric(N)
  29.      
  30.       for(i in 1:N)
  31.         { ### start loop over grid values -i-
  32.           ### Correct guess payoff = y
  33.           if( (x[i]>cutoff & y[i]<x[i]) | (x[i]<=cutoff & y[i]>x[i]) )
  34.             payoff[i] <- y[i]
  35.          
  36.           ### Wrong guess payoff = 0
  37.           if( (x[i]>cutoff & y[i]>x[i]) | (x[i]<=cutoff & y[i]<x[i]) )
  38.             payoff[i] < -0
  39.          
  40.           ### Tie payoff =  0
  41.           if(x[i] == y[i])
  42.             payoff[i] <- 0
  43.         } ### end loop over grid values -i-
  44.      
  45.       ### Expected Payoff All Contingencies Considered
  46.       #print(paste(cutoff,mean(payoff)))
  47.       vector.cutoff <- c(vector.cutoff,cutoff)
  48.       vector.payoff <- c(vector.payoff,mean(payoff))
  49.       print(vector.payoff)
  50.       dfN <- data.frame(vector.cutoff, vector.payoff, stringsAsFactors = FALSE)
  51.       colnames(dfN) <- c("Cutoff","Payoff")
  52.      
  53.     } ### end loop over strategies -cutoff-
  54.  
  55.   # export pdf plot
  56.   pdfname <- paste0("gamble-payoff-sample-size-",N,".pdf")
  57.   pdf(pdfname)
  58.   par(cex=0.8) # cex = character expansion factor
  59.   plot(dfN, main = paste( "samples of size",  N )
  60.        , xlab = 'Cutoff', ylab = 'Payoff'
  61.        , pch = 20, col = "red", axes = FALSE )
  62.   axis(1, pos = min(vector.payoff))
  63.   axis(2, pos = min(vector.cutoff), las = 1)
  64.   segments(0, max(vector.payoff), which.max(vector.payoff), max(vector.payoff), lty = "dashed")
  65.   segments(which.max(vector.payoff), min(vector.payoff), which.max(vector.payoff), max(vector.payoff), lty = "dashed")
  66.   dev.off()
  67.  
  68.   assign(paste0("df",N),dfN)
  69.   df <- c(df,dfN)
  70.   print( get(paste0("df",N)) )
  71.   save(dfN, file = paste0("df",N,".RData"))
  72.  
  73.   } ### end loop over sample size -N-
  74.  
  75.  
  76. # clean-up
  77. library(gdata)
  78. # keep only objects with names starting in df
  79. keep(list = ls(pattern = "^df", envir = .GlobalEnv), all = TRUE, sure = TRUE)
  80. rm(dfN)
RAW Paste Data