I am looking for a statistical test for whether the ratio of variances vary significantly among groups. I have 100 groups, each with ~50 A individuals and ~50 B individuals (n varies somewhat between groups). For each individual I have a single measure. A priori, I expect that the A individuals in each group are more variable than the B individuals, and I can test this using an F-test on the ratio of variances. However, I also want to know whether the ratio of variances changes significantly across groups. Does anyone know how to do this? My data are normally distributed etc
1 Answer
I don't know how to approach this for more than two groups, but for two groups my idea was to compute $$ S^2_{i,A} = \sum_{a \in A} \left(x_{i,a} - \mu_{i,A}\right)^2 $$ and similarly $S^2_{i,B}$ for $i=1,2$ where $\mu_{i,A}$ is the sample mean of the $A$ data for the $i$th group. Your $F$ statistics are basically $$ F_i = \frac{S^2_{i,A}}{n_{i,A}-1} \frac{n_{i,B}-1}{S^2_{i,B}}. $$
Instead compute $$ \Delta = \log\left(S^2_{1,A}\right)-\log\left(S^2_{1,B}\right)-\log\left(S^2_{2,A}\right) + \log\left(S^2_{2,B}\right). $$ Now $\Delta$ should have known mean and variance under the null hypothesis that the ratios of variances are equal.
A test:
sigrat <- 3
n1s <- c(100,40)
n2s <- c(30,50)
library(sadists)
sfunc <- function(x) { sum((x-mean(x))^2) }
set.seed(1234)
pvals <- replicate(1000,{
xa1 <- rnorm(n1s[1],mean=0.1,sd=2*sigrat)
xb1 <- rnorm(n1s[2],mean=0.2,sd=2)
xa2 <- rnorm(n2s[1],mean=0.3,sd=0.157*sigrat)
xb2 <- rnorm(n2s[2],mean=0.4,sd=0.157)
S2_1A <- sfunc(xa1)
S2_1B <- sfunc(xb1)
S2_2A <- sfunc(xa2)
S2_2B <- sfunc(xb2)
stat <- log(S2_1A / S2_1B) - log(S2_2A / S2_2B)
pv <- psumlogchisq(stat,wts=c(1,-1,-1,1), # the powers essentially
df=c(n1s,n2s)-1, # the d.f.s of the chi-squares
ncp=0) # they are central chi squares
})
# do this:
# plot(ecdf(pvals))
# instead, for txt plot I do this:
library(txtplot)
xvs <- ppoints(100)
yvs <- quantile(ecdf(pvals),xvs)
txtplot(xvs,yvs)
I get the following txtplot, confirming uniformity:
+-+----------+----------+----------+----------+---------+--+
1 + **** +
| **** |
0.8 + ***** +
| ***** |
| ***** |
0.6 + ***** +
| ***** |
0.4 + ***** +
| ***** |
| **** |
0.2 + ***** +
| **** |
0 + **** +
+-+----------+----------+----------+----------+---------+--+
0 0.2 0.4 0.6 0.8 1
sadists
has approximate CDF and quantile functions for the products of log chi-square variables. $\endgroup$