Here is a programming question. The code I am using is quite slow and I was wondering if there is a way to get rid of the for loop. I am dealing with "interaction" in 2x2 table, and am using Edwards's G_I (Likelihood, p. 194). I label the cells in the table as follows stim response "y" "n" total -------------------------------- y hit miss nsignal -------------------------------- n false correct nnoise alarm rejection --------------------------------- Gsens<-function(nhit,nmiss,nfa,ncr) { # Edwards's G_I, measure of interaction, is measure of sensitivity (xlogx(nhit)+xlogx(nmiss)+xlogx(nfa)+xlogx(ncr))-(xlogx(nhit+nmiss)+xlogx(nfa+ncr))-(xlogx(nhit+nfa)+xlogx(nmiss+ncr))+xlogx(nhit+nmiss+nfa+ncr) } BTW I can't figure out how to break the line at 80 cols. I tried \ but it didn't work (error message). The question is about this function. It calculates 95% CI based on Monte Carlo simulation. [Edwards gives no ref on the sampling distrib of G_I] The number of signal trials is binomial random variable with p=.5, so it is simulated that way. This is fine, I can get a vector of 2000 ns numbers that way. However, for each ns I want an associated binomial variate with p=phit. Is there a better way to do this than by looping? Gsens.ci.mc<-function(nhit,nmiss,nfa,ncr) { #monte carlo simulated 95% CI nsignal<-nhit+nmiss nnoise<-nfa+ncr phit<-nhit/nsignal pfa<-nfa/nnoise ns<-rbinom(2000,nsignal,.5) nn<-nsignal+nnoise-ns nh<-NULL nf<-NULL for(i in 1:2000) { nh<-c(nh,rbinom(1,ns[i],phit)) nf<-c(nf,rbinom(1,nn[i],pfa)) } g<-Gsens(nh,ns-nh,nf,nn-nf) quantile(g,c(.025,.975), na.rm=TRUE) } Thanks very much for any help! Bill Simpson -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

Bill Simpson <wsimpson at uwinnipeg.ca> writes:> associated binomial variate with p=phit. Is there a better way to do this > than by looping? > > Gsens.ci.mc<-function(nhit,nmiss,nfa,ncr) > { > #monte carlo simulated 95% CI > nsignal<-nhit+nmiss > nnoise<-nfa+ncr > phit<-nhit/nsignal > pfa<-nfa/nnoise > ns<-rbinom(2000,nsignal,.5) > nn<-nsignal+nnoise-ns > nh<-NULL > nf<-NULL > for(i in 1:2000) > { > nh<-c(nh,rbinom(1,ns[i],phit)) > nf<-c(nf,rbinom(1,nn[i],pfa)) > } > g<-Gsens(nh,ns-nh,nf,nn-nf) > quantile(g,c(.025,.975), na.rm=TRUE) > }Yes. [prepare to slap forehead...] nh<-rbinom(2000,ns,phit) nf<-rbinom(2000,nn,pfa) This will generate NA's whereever ns==0, but you had that problem anyway. -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._