lundi 2 mars 2020

While loop with sampling until object takes on one of select values

I am trying to set up a process using a while loop in order to have my code consistently sample among certain xd[i] before one particular xd[i] becomes equal to x.

I know it would be more efficient to put everything under one for loop (except for the while loop) but I am trying to create this step by step. Right now, I am stuck on the while loop part. I cannot run that part of the code without R crashing, or if it does not crash, it seems to continue sampling nonstop until I manually stop it. How can I change my while loop such that it samples over the xd vector until one of the elements of xd matches with x?

Thank you

reset1 = {

a = 0.3 #lower legal threshold 

b = 0.9 #upper legal threshold

x = 0  

theta = runif(1,min = a, max = b)
theta


A = 5 ## monetary value of harm from 

maxw = 2*A

minw = 0

wbar = (maxw+minw)/2  ##average cost
wbar

xd = c(1,2,3)

w = c(1,2,3)

}
for (i in 1:length(xd)){w[i] = runif(1, min = 0, max = 2)} #trying to make it create a w for each person



##Drivers problem: pick the x that will minimize your cost

for(i in 1:length(xd)){xd[i] = min(c(1-(w[i]/(2*A)),((2+b)-sqrt(b^2-2*b+1+3*(w[i]/A)*(b-a)))/3,b))}

xd  

for(i in 1:length(xd)){proba = function(xd){(xd-1)^2}}  
proba(xd)   #ith individual probability of getting in an accident given their xd[i]
proba(xd[c(1:3)])

probn = 1 - proba(xd)      #probability of not getting in an accident given driveri's effort level
probn

while (any(x!=xd)) {x = sample(c(xd[c(1,2,3)],0,0,0),size = 1, replace = TRUE, prob = c(proba(xd), probn)) ###the x is selected based on which ever x resulted in an accident   

  }

show(x)   



Aucun commentaire:

Enregistrer un commentaire