利用php进行线性回归

笔者在一家中石化内部的企业工作,主要从事高分子聚合物的相关开发。
目前因工作需要,需要学习聚合物特性黏度测试方面的知识,采用多点稀释法进行测试。在得到数据后,通过外推法求得纯熔体的特性黏度。
比如我们在三种浓度下测得特性黏度分别如下:
纯溶剂 t0=76.56s ηr ηsp ηsp/c lnηr/c
0.04g/dl t1=228.16 2.98 1.98 49.5 27.3
0.02g/dl t2=135.37 1.77 0.77 38.5 28.5
0.01g/dl t3=105.25 1.37 0.37 37 31.38
定义为溶液浓度无限稀释时的比浓黏度和比浓对数黏度。其值与浓度无关。


特性黏度

我们可以通过作图推算出浓度为零时的特性黏度,如下图:


特性黏度推算

当然我们更准确的可以通过EXCEL工具进行作图并线性模拟出计算公式。
因为笔者在PHP编程方面颇有一些研究,下面通过PHP编程计算出线性方程式。
如果两组数据相关系数很高, 可以用一条近似直线Y=a + bX 来预估, 谓之线性回归
根据统计学理论, Y = a + bX 中
斜率 b = X,Y 离均差交乘积和 / X离均差平方和
常数项 a = Y平均值 - b * X平均值
具体实现代码如下:
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>线性回归 Linear Regression</title>
</head>
<body>
<h2>计算线性回归方程式 Y = a + bX</h2>
<p>
    如果两组数据相关系数很高, 可以用一条近似直线Y=a + bX 来预估, 谓之线性回归<br />
    根据统计学理论, Y = a + bX 中 <br />
 
    斜率 b = X,Y 离均差交乘积和 / X离均差平方和 <br />
    常数项 a = Y平均值 - b * X平均值<br />
</p>
<?php
header("Content-Type: text/html; charset=utf-8");
if (empty($_REQUEST["X"])) {
    ?>
    <form method="post" action="jisuan.php">
        X : <input type="text" name="X" size="30" value="25,23,27,35,30"><br>
        Y : <input type="text" name="Y" size="30" value="35,27,36,45,42"><br>
        <input type="submit" value="ok">
    </form>
<?php
} else {
    $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; $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>";
}
 
echo '<hr />';
 
echo '计算两点之间的角度。';
$a = array('x' => 10, 'y' => 0);
$c = array('x' => 80, 'y' => 80);
$pi_v = atan2($c['y'] - $a['y'], $c['x'] - $a['x']);
$n_v = rad2deg($pi_v);
echo '弧度:',$pi_v,' 角度:',$n_v;
 
 
?>
</body>
</html>

根据我们前面提供的数据,可计算出
X = 0.04, 0.02
Y = 7, 6.5
常数项 a = 6
斜率 b = 25
线性回归方程式 Y = 6 + (25)X
X 平均值 = 0.03
Y 平均值 = 6.75
X 离均差 = 0.01, -0.01
Y 离均差 = 0.25, -0.25
X,Y 离均差交乘积和 = 0.005
X 离均差平方和 = 0.0002

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容