/**
* One-sample Z-test
* When the population mean and standard deviation are known.
* https://en.wikipedia.org/wiki/Z-test
*
* Hₐ - H₀ M - μ M - μ M - μ
* z = ------- = ----- = ----- = -----
* σ σ SEM σ/√n
*
* p1 = CDF below if left tailed
* = CDF above if right tailed
* p2 = CDF outside
*
* @param number $Hₐ Alternate hypothesis (M Sample mean)
* @param int $n Sample size
* @param number $H₀ Null hypothesis (μ Population mean)
* @param number $σ SD of population (Standard error of the mean)
*
* @return array [
* z => z score
* p1 => one-tailed p value (left or right tail depends on how Hₐ differs from H₀)
* p2 => two-tailed p value
* ]
*/
public static function zTest($Hₐ, $n, $H₀, $σ) : array
{
// Calculate z score (test statistic)
$sem = self::sem($σ, $n);
$z = self::zScore($Hₐ, $H₀, $sem, self::Z_RAW_VALUE);
// One- and two-tailed P values
if ($Hₐ < $H₀) {
$p1 = StandardNormal::CDF($z);
} else {
$p1 = StandardNormal::above($z);
}
$p2 = StandardNormal::outside(-abs($z), abs($z));
return ['z' => $z, 'p1' => $p1, 'p2' => $p2];
}