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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._