A Guinea Pig
Does increased dosages of Vitamin C (Vit-C) lead to longer tooth growth in Cavia Porcellus (aka the Guinea Pig)? Also, does the delivery system for Vit-C matter?
This is an analysis of a Tooth Growth Experiment conducted by C.I. Bliss (1952 - The Statistics of Bioassay. Academic Press.) on “The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs. Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods, (orange juice or ascorbic acid (a form of vitamin C and coded as VC).”
Here is the detail of the original experiment :
A biological assay of the vitamin C activity of fresh orange juice may be used as a second example. The response of 10 guinea pigs on each of three doses of ascorbjc acid (8) and of fresh orange juice (U) during a six-week test period was measured by Crampton (26) from the average length of the odontoblasts in each animal (p. 257), ’with the results given in Table XXVIII. Five of the animals at each treatment combination were males and five were females but except for this sex restriction the guinea pigs were assigned to doses entirely at random. The assay could be considered, therefore, as forming a 2 X 3 X 2 factorial experiment and has been so analyzed. The complete analysis (not given here) showed that the effect of sex could be neglected, so that in the interests of simplicity the data will be treated here as a 2 X 3 assay with 10 responses at each dose.
The dataset “ToothGrowth” is part of the standard R base system. Here’s a boxplot of the dataset using dose and suppliment (or supp in the dataset).
Note: All R code in this presentation can be found in the Appendix
The graph shows that the more Vit-C given to the test subjects, the longer their teeth grew. Also, that the use of Orange Juice (coded OJ) at lower doses (0.5 and 1) appear to promote more tooth growth than straight Vit-C (ascorbic acid), but we’ll need to explore further. To do this, we’ll factor the dataset into its 6 tests, and then find the mean and standard deviation (labeled mn and sig respectively):
## test mn sig
## 1 OJ-0.5 13.23 4.459709
## 2 VC-0.5 7.98 2.746634
## 3 OJ-1 22.70 3.910953
## 4 VC-1 16.77 2.515309
## 5 OJ-2 26.06 2.655058
## 6 VC-2 26.14 4.797731
Since the experiment randomized the suppliment and dosage between we’ll treat these as unpaired results with a equal variance between them. Also, since the sample sizes are small (n = 10), we’ll use a T-distribution for all analysis. We’ll also assume a type I error, alpha = 5%.
A exhaustive analysis of the data would require us to statistically compare every possible permuation of the experiment, but we can reduce this by computing the confidence intervals (labeled c.up and c.down) for each dose+supp and make judgements on which tests will be most important:
## test mn sig c.up c.down
## 1 OJ-0.5 13.23 4.46 16.42 10.04
## 2 VC-0.5 7.98 2.75 9.94 6.02
## 3 OJ-1 22.70 3.91 25.50 19.90
## 4 VC-1 16.77 2.52 18.57 14.97
## 5 OJ-2 26.06 2.66 27.96 24.16
## 6 VC-2 26.14 4.80 29.57 22.71
A cursory look at the confidence intervals shows many combinations have “clear daylight” between them. There are two cases that need more analysis:
## [1] 0.2194983 6.5005017
## attr(,"conf.level")
## [1] 0.95
The confidence interval entirely positive, meaning that the two dosages are different in their effect on tooth growth.
## [1] -3.562999 3.722999
## attr(,"conf.level")
## [1] 0.95
Here, the confidence interval spans a mean of 0, meaning that the the two supplements, at a dosage of 2.0, have the same (or similar) effect on tooth growth.
Code for presenting summary data
data("ToothGrowth")
library(ggplot2)
t <- ToothGrowth
t$dose <- as.factor(t$dose)
g <- ggplot(t, aes(group = dose, dose, len))
g + geom_boxplot() + facet_grid(.~ supp) + ggtitle("Vitamin C and Tooth Growth")
s <- aggregate(t$len, by=list(t$supp, t$dose), function(x) cbind(mean(x), sd(x)))
s$test <- paste(s$Group.1, s$Group.2, sep = "-")
s$mn <- s$x[1:6,1]
s$sig <- s$x[1:6,2]
s <- s[, 4:6]
s
Code for confidence intervals
library(dplyr)
s <- mutate(s, c.up = mn + qt(.975, 10-1)*sig/sqrt(10))
s <- mutate(s, c.down = mn - qt(.975, 10-1)*sig/sqrt(10))
s[,3:5] <- round(s[,3:5], 2)
s
Code for T-tests
oj1 <- subset(t, supp == "OJ" & dose == 1)
oj2 <- subset(t, supp == "OJ" & dose == 2)
t.test(oj2$len, oj1$len, var.equal = TRUE)$conf
vc2 <- subset(t, supp == "VC" & dose == 2)
t.test(vc2$len, oj2$len, var.equal = TRUE)$conf