How do I analyse data with a ceiling effect? We generated repeated measures data from a sample of people evaluated at 4 timepoints in 2 groups. We wish to compare the groups over time. There are significant missing values. The questionnaire is very insensitive and has a score range from 1-30, however the vast majority of people are scoring 29 or 30. The numbers fall off exponentially below 29. Admittedly there is more of a downward spread in the measurements made at the first timepoint. Log-transforming (nor any transformation) has not made a difference. Notwithstanding the obvious rubbishness of the actual questionnaire, have people encountered this situation before? At the moment we are simply using 29 as a cutoff for a categorical analysis. Is there anything more elegant which can be done?
 A: Is it the case that each individual's score is composed of the sum of 30 binary questions? If so, then you should analyze the raw data (1 or 0 for each question for each individual) genearlized additive mixed effects models, treating individuals as random effects, and specify a binomial link. For example (in R):
library(lme4)
fit1 = lmer(
    data = my_raw_data
    , formula = accuracy ~ (1|individual)
    , family = binomial
)

This would fit a model where there is only an intercept. If you have a between-individuals manipulation coded in a variable called "A", you could evaluate the amount of evidence for an effect of A by:
fit2 = lmer(
    data = my_raw_data
    , formula = accuracy ~ (1|individual) + A
    , family = binomial
)
(AIC(fit1)-AIC(fit2))*log2(exp(1)) #bits of evidence for an effect of A

Where "bits of evidence" refers to a likelihood ratio represented on the log-base-2 scale. Negative bits would represent evidence against an effect of A.
The ezMixed() function from the ez package automates the computation of such evidence metrics, and the ezPredict() and ezPlot2() functions facilitate obtaining and visualizing effects.
If I am wrong and the score does not represent the sum of 30 binary questions but instead the sum of some smaller number of likert-coded questions, you could recode the likert responses to binomial as I suggest here, then proceed as above.
