Normality Assumption – How to Compare Truncated Distributions Using Statistical Tests

censoringnormality-assumptiontobit-regression

I have been taking measures of two populations of mice. One population runs for 10minutes and the other can barely run for 2-3 minutes. The problem is that I have too many mice to keep testing them and I know that the healthy ones can run more than 10 minutes but for the sake of my life I had to stop them at 10.
What would be the statistical test to use? The results a pretty obvious but I do not know the proper way to test this. I would use two way anova with repeated measures but that would assume normal distribution, which my truncated data at 10 minutes do not fit.

Any help?

Best Answer

You can use the Wilcoxon–Mann–Whitney rank sum test.

  • Null hypothesis: Healthy and unhealthy mice run for the same length of time.
  • Alternative hypothesis (one-sided): Healthy mice run longer than unhealthy mice.

All running times of the healthy mice are censored (since you stopped them before they were done running). Even though we know that their mean (or median) running time is at least 10 minutes, we cannot estimate is exactly and so we cannot know how much longer healthy mice can run than unhealthy mice.

However we know that (during the experiment) all heathy mice ran longer than all unhealthy mice. That is, we know the ranking of running times exactly. The Wilcoxon–Mann–Whitney test statistic is based on ranks, so it can be computed correctly even with the censoring.


Fun fact: In your data there is no overlap between the running times (and ranks) of healthy mice and unhealthy mice: the two groups are completely separated. In this special case the one-sided p-value is $n_h!n_u!/(n_h + n_u)!$ where $n_h$ and $n_u$ are the number of healthy and unhealthy mice respectively and $n!$ is the factorial of $n$ [1].

n_U <- 10  # number of unhealthy mice
n_H <- 12  # number of healthy mice

t_U <- runif(n_U, 2, 3)
t_H <- rep(10, n_H) # times are censored at 10 minutes

# The running times of healthy mice are all tied at 10.
# The `wilcox.test` warns about it and approximates the p-value.
wilcox.test(t_H, t_U, alternative = "greater")
#> Warning in wilcox.test.default(t_H, t_U, alternative = "greater"): cannot
#> compute exact p-value with ties
#> 
#>  Wilcoxon rank sum test with continuity correction
#> 
#> data:  t_H and t_U
#> W = 120, p-value = 9.158e-06
#> alternative hypothesis: true location shift is greater than 0

# However in the case when the two groups are separated,
# the exact one-sided p-value is (n1!n2!) /(n1+n2)!

# For numerical stability, I compute log(p-value) first and then take exp.
exp(lfactorial(n_U) + lfactorial(n_H) - lfactorial(n_U + n_H))
#> [1] 1.546441e-06

[1] Biostatistics for Biomedical Research course notes. Available online. See Section 7.3 about the Wilcoxon–Mann–Whitney two-sample test.

Related Question