z的分数(标准偏差和平均值)在PHP中
我想用PHP计算Z分数。从本质上讲,我正在寻找计算数据集(PHP数组)的平均值和标准偏差的最有效方法。有关如何在PHP中执行此操作的任何建议?z的分数(标准偏差和平均值)在PHP中
我想在最小的步数中做到这一点。
计算平均值,你可以这样做:
$mean = array_sum($array)/count($array)
标准差是像这样:
// Function to calculate square of value - mean
function sd_square($x, $mean) { return pow($x - $mean,2); }
// Function to calculate standard deviation (uses sd_square)
function sd($array) {
// square root of sum of squares devided by N-1
return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array)/count($array)))))/(count($array)-1));
}
如何使用内置的统计数据包像stats_standard_deviation和stats_harmonic_mean。我找不到标准方法的功能,但如果您知道有关统计的任何信息,我相信您可以使用内置函数找出问题。
然后有一个upvote :-)鉴于这是最好的答案(“最小步数”和(可能)“最有效的方式”)。 (也许有人不满意说_built-in_;你必须做“sudo pecl install stats”,然后编辑php.ini) – 2011-11-04 08:35:45
@DarrenCook哈,谢谢! – rockerest 2011-11-05 02:20:16
@DarrenCook我不知道这个问题是否有作曲家更新。我与pear/pecl的痛点是作为重新分配的应用程序开发人员,您永远不知道客户何时/是否可以使用pear。作曲家帮助改变:-)只需0.02美元。 PS - Upvote为你摇滚乐 – 2014-04-17 20:44:32
function standard_deviation($aValues)
{
$fMean = array_sum($aValues)/count($aValues);
//print_r($fMean);
$fVariance = 0.0;
foreach ($aValues as $i)
{
$fVariance += pow($i - $fMean, 2);
}
$size = count($aValues) - 1;
return (float) sqrt($fVariance)/sqrt($size);
}
PHP stats_standard_deviation()函数执行C++代码,运行速度比用PHP代码编写的等效函数快得多。 – geofflee 2016-08-11 06:48:41
stats_standard_deviation中的php“built”会返回与您提供的'sd()'函数不同的值。我使用Excel STDDEV进行了检查,它与您的匹配,但有趣的是,stats_standard_deviation似乎返回了95%的置信度......并不完全符合Excel CONFIDENCE函数返回的结果,但非常接近。 – Hank 2012-10-09 12:51:42
这是因为stats_standard_deviation()默认计算**总体**标准偏差,而Excel STDEV则计算**样本**标准差。要获得相同的结果,您必须使用Excel STDEVP或使用$ sample = true调用stats_standard_deviation()。要理解为什么样本与人口之间存在差异,请参阅[贝塞尔更正](https://en.wikipedia.org/wiki/Bessel%27s_correction)。 – geofflee 2016-08-11 06:47:03