Skip to content

Previously attainable fisher's exact test

6 messages · (Ted Harding), Jim Silverton, Peter Dalgaard

#
On 13-Apr-11 17:40:53, Jim Silverton wrote:
I do not understand what you mean by "previously attainable".

As far as that particular matrix is concerned, the fisher.test()
function will yield its exact Fisher P-value:

  M <- matrix(c(1, 4, 23, 30), byrow=TRUE, nrow=2)
  M
  #      [,1] [,2]
  # [1,]    1    4
  # [2,]   23   30
  fisher.test(M)
  #         Fisher's Exact Test for Count Data
  # data:  M 
  # p-value = 0.3918
  # alternative hypothesis: true odds ratio is not equal to 1 
  # 95 percent confidence interval:
  #  0.006355278 3.653391412 
  # sample estimates:
  # odds ratio 
  #  0.3316483

So the P-value is 0.3918 (as attained now, and as attainable
at any time previously if you had done the above ... !).

Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <ted.harding at wlandres.net>
Fax-to-email: +44 (0)870 094 0861
Date: 14-Apr-11                                       Time: 00:28:59
------------------------------ XFMail ------------------------------
#
On Apr 14, 2011, at 01:29 , (Ted Harding) wrote:

            
What Ted said, plus

f <- fisher.test(M)
f$p.value
# [1] 0.3917553
#
Thanks for the clarification, Jim. The terminology "previous"
was not self-explanatory!

The following implements (in a somewhat crude way, but explicit)
a solution to your question:

  M <- matrix(c(1, 4, 23, 30), byrow=TRUE, ncol=2)
  M
  #      [,1] [,2]
  # [1,]    1    4
  # [2,]   23   30
  fisher.test(M)$p.value
  # [1] 0.3917553
  mina <- (-1) ; maxa <- 4
  As <- (mina:maxa)
  Ps <- numeric(length(As))
  for(i in (1:length(As))){
    a <- As[i]
    dM <- matrix(c(a,-a,-a,a),nrow=2)
    Ps[i] <- fisher.test(M+dM)$p.value
  }
  Ps
  # [1] 0.070002593 0.391755250 1.000000000 0.639558667
  # [5] 0.148849134 0.009276064

So, amongst the P-values, the one below the attained one (0.3917553)
which is greatest is Ps[5] = 0.148849134. This could be identified
by the expression

  max(Ps[Ps < fisher.test(M)$p.value])
  # [1] 0.1488491

If fisher.test(M)$p.value were already the smallest possible value,
then this expression would return -Inf.

Ted.
On 14-Apr-11 14:55:36, Jim Silverton wrote:
--------------------------------------------------------------------
E-Mail: (Ted Harding) <ted.harding at wlandres.net>
Fax-to-email: +44 (0)870 094 0861
Date: 14-Apr-11                                       Time: 16:37:44
------------------------------ XFMail ------------------------------
#
On Apr 14, 2011, at 16:55 , Jim Silverton wrote:

            
Well, you might have said so...

For one-sided tests, just add/subtract matrix(c(1,-1,1,1),2) and recompute. Otherwise, I guess that you get to play with dhyper and phyper because you need to know where the opposite tail starts. Check the internals of fisher.test.