Hi,

Thanks again for your answers, just so as I can get clear what is happening, 
with the uniroot method, I'm defining a function in which the binomial 
probability function pbinom is present but in addition p0 is subtracted from 
the result - in this case p0 is the large P I want to plug in so 0.05, 0.50 and 
0.95, or even just 0.05 and 0.95? Then uniroot finds the root of this function 
and doing so find me the small p I need?

Best,
Ben.


________________________________________
From: Rolf Turner [rolf.tur...@vodafone.co.nz]
Sent: 11 October 2013 02:11
To: Benjamin Ward (ENV)
Cc: Stefan Evert; R-help Mailing List
Subject: Re: [R] Small p from binomial probability function.

It is mysterious to me why the procedure proposed by Stefan Evert works.
It appears to work --- once you modify the call to binom.test() to have the
correct syntax.  In a sequence of 1000  trials with random values of N, x,
and p0, the answers from Evert's procedure agreed with the answer given
by uniroot() to within +/- 3.045e-05.

However your question was (in effect) how to solve the equation

     Pr(X <= x) = p0

for p, where X ~ Binom(N,p), with N and x known.  What this has to do with
confidence intervals for p is, to my mind at least, completely opaque.
In contrast it is obvious why the procedure using uniroot() works.

I would suggest that you stick with the uniroot() procedure in that it is
readily comprehensible.

     cheers,

     Rolf Turner

On 10/11/13 03:56, Benjamin Ward (ENV) wrote:
> Hi,
>
> Thank you for your answers, I'm not completely sure if it's to bino.test I 
> need or the uniroot. Perhaps I should explain more the idea behind the code 
> and the actual task I'm trying to do. The idea is to calculate a confidence 
> interval as to the age of two DNA sequences which have diverged, where I know 
> the number of mutations that happened in them, and I know the mutation rate.
>
> The binomial probability can be used since, mutations have a probability of 
> occurring or being observed so many times in a sequence. This is dependent on 
> the length of the DNA stretch (which equates to the number of trials since 
> each base is a possibility of observing a mutation), the probability of a 
> single mutation occurring which is p = t * u, since more time means a higher 
> probability a mutation may have occurred.
>
> So my code, using pbinom, is supposed to calculate the probability that my 
> DNA stretches contain the number of mutations observed P(X = k), given their 
> size (trials) and the probability of a single mutation (p = t * u). However 
> I'm interested in finding t: t is what is unknown, so the loop repeatedly 
> evaluates the calculation, increasing t each time and checking P(X=k), when 
> it is 0.05, 0.50 and 0.95, we record t.
>
> Ideally I'd like to rearrange this so I can get the probability of a single 
> success (mutation) p, and then divide by the mutation rate to get my t. My 
> supervisor gave my the loopy code but I imagine there is a way to plug in 
> P(X=k) as 0.05 and 0.95 and get my upper and lower t estimates.
>
> According to the R built in docs:
>
> binom.test
> Description:
>
>       Performs an exact test of a simple null hypothesis about the
>       probability of success in a Bernoulli experiment.
>
> Perhaps this is the one I need rather than uniroot?
>
> Best,
> Ben.
>
>
> ________________________________________
> From: Stefan Evert [stefa...@collocations.de]
> Sent: 10 October 2013 09:37
> To: R-help Mailing List
> Cc: Benjamin Ward (ENV)
> Subject: Re: [R] Small p from binomial probability function.
>
> Sounds like you want a 95% binomial confidence interval:
>
>          binom.test(N, P)
>
> will compute this for you, and you can get the bounds directly with
>
>          binom.test(N, P)$conf.int
>
> Actually, binom.test computes a two-sided confidence interval, which 
> corresponds roughly to 2.5 and 97.5 percentages in your approach. It doesn't 
> give you the 50% point either, but I don't think that's a meaningful quantity 
> with a two-sided test.
>
> Hope this helps,
> Stefan
>
>
> On 9 Oct 2013, at 15:53, Benjamin Ward (ENV) <b.w...@uea.ac.uk> wrote:
>
>> I got given some code that uses the R function pbionom:
>>
>> p <- mut * t
>> sumprobs <- pbinom( N, B, p ) * 1000
>>
>> Which gives the output of a probability as a percentage like 5, 50, 95.
>>
>> What the code currently does is find me the values of t I need, by using the 
>> above two code lines in a loop, each iteration it increaces t by one and 
>> runs the two lines. When sumprobs equals 5, it records the value t, then 
>> again when sumprobs is equal to 50, and again when sumprobs is equal to 95 - 
>> giving me three t values. This is not an efficient way of doing this if t is 
>> large. Is it possible to rearrange pbinom so it gives me the small p (made 
>> of mut*t) as the result of plugging in the sumprobs instead, and is there an 
>> R function that already does this?
>>
>> Since pbinom is the binomial probability equation I suppose the question is 
>> - in more mathematical terminology - can I change this code so that instead 
>> of calculating the Probability of N successes given the number of trials and 
>> the probability of a single success, can I instead calculate the probability 
>> of a single success using the probability of N successes and number of 
>> trials, and the number of successes? Can R do this for me. So instead I plug 
>> in 5, 50, and 95, and then get the small p out?

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to