ToothGrowth.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace MathPHP\SampleData;
  3. /**
  4. * ToothGrowth data set (The Effect of Vitamin C on Tooth Growth in Guinea Pigs)
  5. *
  6. * The response is the length of odontoblasts (cells responsible for tooth growth) in 60 guinea pigs.
  7. * Each animal received one of three dose levels of vitamin C (0.5, 1, and 2 mg/day) by one of two delivery methods,
  8. * orange juice or ascorbic acid (a form of vitamin C and coded as VC).
  9. *
  10. * 60 observations on 3 variables: tooth length, supplement type (VC or OJ), and dose in milligrams/day
  11. * R ToothGrowth
  12. *
  13. * Source: C. I. Bliss (1952) The Statistics of Bioassay. Academic Press.
  14. */
  15. class ToothGrowth
  16. {
  17. private const LABELS = ['len', 'supp', 'dose'];
  18. private const DATA = [
  19. [4.2, 'VC', 0.5],
  20. [11.5, 'VC', 0.5],
  21. [7.3, 'VC', 0.5],
  22. [5.8, 'VC', 0.5],
  23. [6.4, 'VC', 0.5],
  24. [10.0, 'VC', 0.5],
  25. [11.2, 'VC', 0.5],
  26. [11.2, 'VC', 0.5],
  27. [5.2, 'VC', 0.5],
  28. [7.0, 'VC', 0.5],
  29. [16.5, 'VC', 1.0],
  30. [16.5, 'VC', 1.0],
  31. [15.2, 'VC', 1.0],
  32. [17.3, 'VC', 1.0],
  33. [22.5, 'VC', 1.0],
  34. [17.3, 'VC', 1.0],
  35. [13.6, 'VC', 1.0],
  36. [14.5, 'VC', 1.0],
  37. [18.8, 'VC', 1.0],
  38. [15.5, 'VC', 1.0],
  39. [23.6, 'VC', 2.0],
  40. [18.5, 'VC', 2.0],
  41. [33.9, 'VC', 2.0],
  42. [25.5, 'VC', 2.0],
  43. [26.4, 'VC', 2.0],
  44. [32.5, 'VC', 2.0],
  45. [26.7, 'VC', 2.0],
  46. [21.5, 'VC', 2.0],
  47. [23.3, 'VC', 2.0],
  48. [29.5, 'VC', 2.0],
  49. [15.2, 'OJ', 0.5],
  50. [21.5, 'OJ', 0.5],
  51. [17.6, 'OJ', 0.5],
  52. [9.7, 'OJ', 0.5],
  53. [14.5, 'OJ', 0.5],
  54. [10.0, 'OJ', 0.5],
  55. [8.2, 'OJ', 0.5],
  56. [9.4, 'OJ', 0.5],
  57. [16.5, 'OJ', 0.5],
  58. [9.7, 'OJ', 0.5],
  59. [19.7, 'OJ', 1.0],
  60. [23.3, 'OJ', 1.0],
  61. [23.6, 'OJ', 1.0],
  62. [26.4, 'OJ', 1.0],
  63. [20.0, 'OJ', 1.0],
  64. [25.2, 'OJ', 1.0],
  65. [25.8, 'OJ', 1.0],
  66. [21.2, 'OJ', 1.0],
  67. [14.5, 'OJ', 1.0],
  68. [27.3, 'OJ', 1.0],
  69. [25.5, 'OJ', 2.0],
  70. [26.4, 'OJ', 2.0],
  71. [22.4, 'OJ', 2.0],
  72. [24.5, 'OJ', 2.0],
  73. [24.8, 'OJ', 2.0],
  74. [30.9, 'OJ', 2.0],
  75. [26.4, 'OJ', 2.0],
  76. [27.3, 'OJ', 2.0],
  77. [29.4, 'OJ', 2.0],
  78. [23.0, 'OJ', 2.0],
  79. ];
  80. /**
  81. * Raw data without labels
  82. * [[4.2, 'VC', 0.5], [11.5, 'VC', '0.5], ... ]
  83. *
  84. * @return mixed[]
  85. */
  86. public function getData(): array
  87. {
  88. return \array_values(self::DATA);
  89. }
  90. /**
  91. * Raw data with each observation labeled
  92. * [['len' => 4.2, 'supp' => 'VC', 'dose' => 0.5], ... ]
  93. *
  94. * @return array<array<string, float|string>>
  95. */
  96. public function getLabeledData(): array
  97. {
  98. return \array_map(
  99. function (array $data) {
  100. return \array_combine(self::LABELS, $data);
  101. },
  102. self::DATA
  103. );
  104. }
  105. /**
  106. * Tooth length observations
  107. *
  108. * @return float[]
  109. */
  110. public function getLen(): array
  111. {
  112. return \array_column(self::DATA, 0);
  113. }
  114. /**
  115. * Supplement type (VC or OJ) observations
  116. *
  117. * @return string[]
  118. */
  119. public function getSupp(): array
  120. {
  121. return \array_column(self::DATA, 1);
  122. }
  123. /**
  124. * Dose in milligrams/day observations
  125. *
  126. * @return float[]
  127. */
  128. public function getDose(): array
  129. {
  130. return \array_column(self::DATA, 2);
  131. }
  132. }