今天去左新還書借書, 找到這本 "真希望老師這樣教統計", 覺得很面熟, 好像有買過, 又怕萬一沒買, 所以先借再說, 結果回家一找, 真的在書架上有, 下週再還吧. 稍微翻了一下, 剛好翻到上回討論的變異係數, 哇, 解說非常清楚, 這種好書買來竟然擱在書架上這麼久! 接著看到介紹迴歸分析, 如果兩組數據相關係數很高, 可以用一條近似直線 Y=a + bX 來預估, 謂之線性迴歸, 嘿, 那這斜率 b 是否可以用來代表營益率的變化趨勢呢?
根據統計學理論, Y=a + bX 中,
b=X,Y 離均差交乘積和 / X 離均差平方和
a=Y 平均值 - b * X 平均值
其 PHP 程式如下 :
線性迴歸方程式 : http://mybidrobot.allalla.com/finance/regression.php [看原始碼]
$X=explode(",",$_REQUEST["X"]);
$Y=explode(",",$_REQUEST["Y"]);
$xavg=array_sum($X)/count($X); //X 平均值
$yavg=array_sum($Y)/count($Y); //Y 平均值
$XMD=Array(); //X 離均差
$YMD=Array(); //Y 離均差
$mdcross_sum=0; //X,Y 離均差交乘積和
$xdif_square_sum=0; //X 離均差平方和
$count=count($X);
for ($i=0; $i<count($X); $i++) {
$xdif=(float)$X[$i]-$xavg; //X 離均差
$ydif=(float)$Y[$i]-$yavg; //Y 離均差
$XMD[$i]=$xdif;
$YMD[$i]=$ydif;
$mdcross_sum += $xdif*$ydif; //X,Y 離均差交乘積和
$xdif_square_sum += pow($xdif, 2); //X 離均差平方和
} //end of for
$b=round($mdcross_sum/$xdif_square_sum, 2); //計算斜率 b
$a=round($yavg-$b*$xavg,2); //計算常數項 a
echo "X=".join(", ",$X)."<br>";
echo "Y=".join(", ",$Y)."<br>";
echo "常數項 a=".$a."<br>";
echo "斜率 b=".$b."<br>";
echo "線性迴歸方程式 Y = ".$a." + (".$b.")X<br>";
echo "X 平均值=".$xavg."<br>";
echo "Y 平均值=".$yavg."<br>";
echo "X 離均差=".join(", ",$XMD)."<br>";
echo "Y 離均差=".join(", ",$YMD)."<br>";
echo "X,Y 離均差交乘積和=".$mdcross_sum."<br>";
echo "X 離均差平方和=".$xdif_square_sum."<br>";
參考 : SQL server一元线性回归统计说明
1 則留言 :
如果以下列為例 y=3.174+1.404x1+0.251x2
β0=3.174,β1=1.404,β2=0.251
如何用 PHP 程式語言撰寫公式算出其係數值。
https://theriseofdavid.github.io/2021/05/15/statistics/statistics-ch15/
張貼留言