To answer my own question, the notes that I was drawing from made it seem as
through the mean I was using for my sum of squares was unweighted. In
reality, I needed to weight the contribution of each contributing mean by
the sample size. Once I did that, I got a value that agreed with SAS.

So, the solution for computing power of an unbalanced ANOVA is:

within.var = 9 ^ 2
means = c(17.5, 19, 25, 20.5)
J = length(means)

# Quantile of the cutoff point in the central F
central.quart = qf(.05, J - 1, N - J, lower.tail = FALSE)

weighted.means = data.frame(Mean = means, n = c(10, 10, 50, 10))
N = sum(weighted.means$n)

weighted.mean = weighted.mean(weighted.means$Mean, weighted.means$n)

# Noncentrality parameter for unbalanced ANOVA
noncentral.param = sum(weighted.means$n * (weighted.means$Mean -
weighted.mean) ^ 2) / within.var

# Probability of central quantile in noncentral distribution
noncentral.p = pf(central.quart, J - 1, N - J, noncentral.param,
lower.tail= FALSE)

Will

2008/2/21 Will Holcomb <[EMAIL PROTECTED]>:

> I sent a message a couple days ago about doing calculations for power of
> the ANOVA. Several people got back to me very quickly which I really
> appreciated.
>
> I'm working now on a similar problem, but instead of a balanced ANOVA, I
> have an unbalanced one. The first part of the question was:
>
> You assume that the within-population standard deviations all equal 9. You
> set the Type 1 error rate at รก = .05. You presume that the population means
> will have the following values: uA = 17.5, uB = 19, uC = 25, and uD = 20.5.
> You intend to run 80 subjects in all, with equal n's across all 4 groups.
> You plan on conducting a one-way ANOVA. Compute your power to reject the
> null hypothesis under these conditions.
>
> I did:
>
> within.var = 9 ^ 2
> means = c(17.5, 19, 25, 20.5)
> N = 80
> J = length(means)
> power.anova.test(groups = J, n = N / J,
>                  between.var = var(means),
>                  within.var = within.var,
>                  sig.level = 0.05)
>
> This gives me 0.6155 which agrees with SAS. The next problem though is:
>
> You have the same Type 1 error rate and make the same assumptions about
> the population standard deviation and the population means as in part a. You
> still have 80 subjects in all but now you want to know how power might
> change by running 10 subjects in groups A, B, and D and 50 subjects in group
> C. Determine the power under this subject allocation scheme.
>
> For this one I am doing:
>
> # Quantile of the cutoff point in the central F
> central.quant = qf(.05, J - 1, N - J, lower.tail = FALSE)
> weighted.means = data.frame(Mean = means, Weight = c(10, 10, 50, 10))
> # Noncentrality parameter for unbalanced ANOVA
> noncentral.param = 0
> for(i in 1:length(weighted.means$Mean)) {
>   noncentral.param = (noncentral.param + weighted.means$Weight[i] *
>                       (weighted.means$Mean[i] - mean(weighted.means$Mean))
> ^ 2)
> }
> noncentral.param = noncentral.param / within.var
> # Probability of central quantile in noncentral distribution
> noncentral.p = pf(central.quant, J - 1, N - J, noncentral.param,
> lower.tail = FALSE)
> noncentral.p
>
> The logic behind this is in my assignment at:
>
> http://odin.himinbi.org/classes/psy304b/homework_2.xhtml#p2b
>
> This works for a balanced ANOVA and gives the same result as
> power.anova.test (and SAS). For the unbalanced ANOVA though it is giving
> me a different result though than SAS, 0.8759455 versus 0.680.
>
> So is there a straightforward way to compute the power of an unbalanced
> ANOVA? If there isn't, does anyone have any idea what is wrong with my code?
> The SAS I am comparing it to is:
>
> Data Dep;
> Input cue $ mean uneven_weight;
> datalines;
> A 17.5  1
> B 19    1
> C 25    5
> D 20.5  1
> ;
>
> proc glmpower;
> class cue;
> model mean = cue;
> weight uneven_weight;
> power
>         stddev = 9
>         alpha = 0.05
>         ntotal= 80
>         power = .;
> run;
>
> Any help would be much appreciated.
>
> Will
>

        [[alternative HTML version deleted]]

______________________________________________
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