Thanks Ted (and other) for your suggestion. Here I have implemented following:

Tab <- matrix(c(8, 10, 12, 6), nr = 2)

Simu_Number <- 50000
Tab_Simulate <- vector("list", length = Simu_Number)
for (i in 1:Simu_Number) {
Tab_Simulate[[i]] <- matrix(rmultinom(1, sum(Tab), rep(0.25, 4)), nrow = 2) ## All Cells have equal probability
    }
Sample_ChiSq <- sapply(Tab_Simulate, function(x) {
                                Statistic <-
sum((chisq.test(as.table(x))$observed - chisq.test(as.table(x))$expected)^2/chisq.test(as.table(x))$expected)
                                return(Statistic)
                            })

length(Sample_ChiSq[Sample_ChiSq < qchisq(0.95, 1)])/Simu_Number

hist(Sample_ChiSq, freq = FALSE)
lines(dchisq(seq(min(Sample_ChiSq), max(Sample_ChiSq), by = 0.5), 1))


However I think I am making some serious mistake as histogram did not match the density curve.

Can somebody help me where I am making mistake?

Thanks and regards,


On 01-12-2012 21:45, (Ted Harding) wrote:
You will need to be clear about whether you are conditioning on
the marginal totals as well as on the overall total. As stated,
you are only asking for the overall total (36) to be fixed.

In that case, one possible (and by no means unique) approach
would be to:

[A]: Choose any four "random integers" a,b,c,d that add up to 36
(even there, you still have to make a choice about what distribution
to adopt for the "random integers").
[B]: Place the results into the 2x2 matrix; then evaluate chi-squared.
[C]: Repeat until you have enough cases.

Example (using equiprobable multinomial to generate 4 "random integers")

   Tab <- matrix(rmultinom(1,36,c(1,1,1,1)/4), nrow=2)

A more specific choice would be to fix the row and column probablilties
(but not the sample row and column totals), e.g.:

   P.row1 <- 0.25 ; P.row2 <- 1 - P.row1
   P.col1 <- 0.50 ; P.col2 <- 1 - P.col1

Then, adopting the hypothesis of independence between rows and columns:

   P11 <- P.row1*P.col1
   P21 <- P.row2*P.col1
   P12 <- P.row1*P.col2
   P22 <- P.row2*P.col2

   Tab <- matrix(rmultinom(1,36,c(P11,P21,P12,P22)), nrow=2)

On the other hand, if you want to also fix the sample row margins
and column margins, then your sampled table needs to be generated
using a hypergeometric distribution, (which is the basis of the
fisher.test mentioned by Bert Gunter). Since explaining how to
do this is a bit mjore complicated than the above, please first
confirm what constraints (e.g. only total count; row-margins
only; col-margins only; both row- & col-margins) you wich to impose.

Hoping this helps,
Ted.

On 01-Dec-2012 14:28:24 Christofer Bogaso wrote:
Thanks Bert for your reply.

I am trying to understand/visualize the Sample Chi-Squared Statistic's
Null distribution. Therefore I need all possible Contingency tables
under Independence case.

What could be better way to visualize that?

Thanks and regards,

On 01 December 2012 20:03:00, Bert Gunter wrote:
Christopher:

Don't do this!

  If I understand you correctly, you want FIsher's exact test. This is
already available in R, using far smarter algorithms then you would. See:

?fisher.test

-- Bert

On Sat, Dec 1, 2012 at 5:48 AM, Christofer Bogaso
<bogaso.christo...@gmail.com  <mailto:bogaso.christo...@gmail.com>> wrote:

     Thanks John for your reply. However still not clear how I should
     proceed.

     My goal is to generate all possible contingency tables. Basically
     I want to see the distribution of Chi-squared Statistic under
     independence (NULL).

     So I was thinking if I can generate all possible permutation of
     integer numbers having sum equal to (8 + 10 + 12 + 6) = 36. Is
     there any R function to do that?

     Thanks and regards,


     On 01-12-2012 18:39, John Kane wrote:

         Are you basically asking for all possible permutations of the
         table?  If so see ?permn in the combinat package.

         John Kane
         Kingston ON Canada


             -----Original Message-----
             From:bogaso.christo...@gmail.com
             <mailto:bogaso.christo...@gmail.com>
             Sent: Sat, 01 Dec 2012 18:10:15 +0545
             To:r-help@r-project.org  <mailto:r-help@r-project.org>
             Subject: [R] Getting all possible contingency tables

             Hello all,

             Let say I have 2-way contingency table:

             Tab <- matrix(c(8, 10, 12, 6), nr = 2)

             and the Chi-squared test could not reject the independence:

               > chisq.test(Tab)

                       Pearson's Chi-squared test with Yates'
             continuity correction

             data:  Tab
             X-squared = 1.0125, df = 1, p-value = 0.3143


             However I want to get all possible contingency tables
             under this
             independence scenario (one of them would obviously be the
             given table
             as, we could not reject the independence), and for each
             such table I
             want to calculate the Ch-sq statistic.

             Can somebody help me how to generate all such tables?

             Thanks and regards,
-------------------------------------------------
E-Mail: (Ted Harding)<ted.hard...@wlandres.net>
Date: 01-Dec-2012  Time: 16:00:16
This message was sent by XFMail
-------------------------------------------------


______________________________________________
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