[R] Fisher test
Thomas Lumley
tlumley at u.washington.edu
Thu May 30 17:29:46 CEST 2002
On Thu, 30 May 2002, Ambrosini Alessandro wrote:
> Hello! I started from two matrix. I made "margin.table" and so now I have
> two vectors. I have to take the first elements of the two vectors, and the
> sum of the remaining element of each vector.
> I make a example.Suppose to have (1,3,5,7,9)
> (2,6,8,0,1)
> I want to take 1,2 that are the first elements of the vectors, and make
> 3+5+7+9=24 for the first vector and 6+8+0+1=15 for the second. At this point
> I build a table in this way
> 1 24
> 2 15
> For this table I use the Fisher exact test. After this I have to take the
> second elements of the vectors, find the sum of the rest of the vectors,
> build another table and make Fisher. I have to do it for all the elements of
> the vectors. In this case I have to find 5 tables. The problem is that I
> have vectors with 1000 elements.
> I know that I have to use "for" to build the table.
> I know also that everytime fisher.test gives me the reslut.
Suppose a and b are your two vectors. You can do
A<-rev(cumsum(rev(a))
B<-rev(cumsum(rev(b))
and then
pvalues<-sapply(1:999, function(i)
fisher.test(matrix(c(a[i],b[i],A[i+1],B[i+1]),2))$p.values)
using the fact (which you can discover from the help or by using str())
that the p value is the $p.value component of the result of the test.
You could also construct a 2x2x999 array from a[-1000],b[-1000],A[-1] and
B[-1] and use apply() to do the tests to each layer
M<-array(c(a[-1000],b[-1000],A[-1],B[-1]),dim=c(999,2,2))
pvalues<-apply(M,1,function(m) fisher.test(m)$p.value)
or use a for() loop explicitly, in which case you need to define the
vector first
pvalues<-numeric(999)
for(i in 1:999){
pvalues[i]<- fisher.test(matrix(c(a[i],b[i],A[i+1],B[i+1]),2))$p.values
}
I think the apply version is the neatest. They all seem to have about the
same speed on the one example I tried.
-thomas
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list