[从头学数学] 第197节 统计案例

来源:互联网 发布:iphone照片mac air同步 编辑:程序博客网 时间:2024/04/27 16:46
剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼。
这次要研究的是[统计案例]。

正剧开始:


星历2016年04月26日 16:34:30, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[统计案例]。








<span style="font-size:18px;">X= [165, 165, 157, 170, 175, 165, 155, 170]Y= [48, 57, 50, 54, 64, 61, 43, 59]拟合结果: y =    0.84848 x +  -85.71212 , r=   0.79847def linefit(x , y):        N = float(len(x))        sx,sy,sxx,syy,sxy=0,0,0,0,0        for i in range(0,int(N)):            sx  += x[i]            sy  += y[i]            sxx += x[i]*x[i]            syy += y[i]*y[i]            sxy += x[i]*y[i]        a = (sy*sx/N -sxy)/( sx*sx/N -sxx)        b = (sy - a*sx)/N        r = abs(sy*sx/N-sxy)/math.sqrt((sxx-sx*sx/N)*(syy-sy*sy/N))        return a,b,r            def tmp():        X=[ 165, 165, 157, 170, 175, 165, 155, 170];       Y=[ 48, 57, 50, 54, 64, 61, 43, 59];            a,b,r=linefit(X,Y)        print("X=",X)        print("Y=",Y)        print("拟合结果: y = %10.5f x + %10.5f , r=%10.5f" % (a,b,r));    </span>

<span style="font-size:18px;"> if (1) {            var r = 20;                  config.setSector(10,5,9,1);                    config.graphPaper2D(0, 0, r);                  config.axis2D(0, 0, 320, 1.6);                                  //坐标轴设定              var scaleX = 2*r, scaleY = 2*r;                var spaceX = 2, spaceY = 10;                 var xS = 150, xE = 180;                var yS = 0, yE = 70;                config.axisSpacing(xS, xE, spaceX, scaleX, 'X');                  config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');                                       var X=[ 165, 165, 157, 170, 175, 165, 155, 170],                 Y=[ 48, 57, 50, 54, 64, 61, 43, 59];                            var array = [];            var size = X.length;                        for (var i = 0; i < size; i++) {                array.push([X[i], Y[i]]);            }                            var transform = new Transform();            var tmp = [];                        array = transform.scale(transform.translate(array, -xS, -yS), scaleX/spaceX, scaleY/spaceY);                tmp = [].concat(array);                  shape.pointDraw(tmp, 'green');                   array = [];          for (var i = 0; i < size; i++) {                array.push([X[i], taskFun(X[i])]);            }                 array = transform.scale(transform.translate(array, -xS, -yS), scaleX/spaceX, scaleY/spaceY);            tmp = [].concat(array);                  shape.multiLineDraw(tmp, 'red');                 plot.setFillStyle('blue');          plot.fillText('拟合结果: y = 0.84848x -85.71212', 30, -270, 200);                              }             }    function taskFun(x) {      return 0.84848*x-85.71212;}</span>





<span style="font-size:18px;">[21, 23, 25, 27, 29, 32, 35][1.9459101490553132, 2.3978952727983707, 3.044522437723423, 3.1780538303479458, 4.189654742026425, 4.74493212836325, 5.783825182329737]X= [21, 23, 25, 27, 29, 32, 35]Y= [1.9459101490553132, 2.3978952727983707, 3.044522437723423, 3.1780538303479458, 4.189654742026425, 4.74493212836325, 5.783825182329737]拟合结果: y =    0.27203 x +   -3.84917 , r=   0.99260</span>


<span style="font-size:18px;"> if (1) {            var r = 20;                  config.setSector(10,5,9,1);                    config.graphPaper2D(0, 0, r);                  config.axis2D(0, 0, 320, 1.6);                                  //坐标轴设定              var scaleX = 2*r, scaleY = 2*r;                var spaceX = 1.5, spaceY = 1;                 var xS = 20, xE = 36;                var yS = 0, yE = 7;                config.axisSpacing(xS, xE, spaceX, scaleX, 'X');                  config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');                               var X = [21, 23, 25, 27, 29, 32, 35];var Y = [1.9459101490553132, 2.3978952727983707, 3.044522437723423, 3.1780538303479458, 4.189654742026425, 4.74493212836325, 5.783825182329737];                        var array = [];            var size = X.length;                        for (var i = 0; i < size; i++) {                array.push([X[i], Y[i]]);            }                            var transform = new Transform();            var tmp = [];                        array = transform.scale(transform.translate(array, -xS, -yS), scaleX/spaceX, scaleY/spaceY);                tmp = [].concat(array);                  shape.pointDraw(tmp, 'green');                   array = [];          for (var i = 0; i < size; i++) {                array.push([X[i], taskFun(X[i])]);            }                 array = transform.scale(transform.translate(array, -xS, -yS), scaleX/spaceX, scaleY/spaceY);            tmp = [].concat(array);                  shape.multiLineDraw(tmp, 'red');                 plot.setFillStyle('blue');          plot.fillText('拟合结果: y = 0.27203x-3.84917', 30, -270, 200);                              }             }    function taskFun(x) {      return 0.27203*x-3.84917;}</span>



<span style="font-size:18px;">>>> 置信度 > 99.9%, K^2 = 56.631879146114834#独立性检验def tmp3():    #数据    #[a, b]    #[c, d]    a = 7775;    b = 42;    c = 2099;    d = 49;    kSquare = (a+b+c+d)*(a*d-b*c)**2/(a+b)/(c+d)/(a+c)/(b+d);    #置信度查对表    trust = [[0.5,0.455],[0.4,0.708],[0.25,1.323],[0.15,2.072],[0.1,2.706],\             [0.025,5.024],[0.01,6.635],[0.005,7.879],[0.001,10.828]];    size = len(trust);    for i in range(size-1, -1, -1):        if kSquare >= trust[i][1]:            print('置信度 > {0}%, K^2 = {1}'.format(round((1-trust[i][0])*100, 3), kSquare));            return trust[i][0];</span>




<span style="font-size:18px;">>>> 置信度 > 99.9%, K^2 = 16.37320688824579#独立性检验#例1def tmp3():    #数据    #[a, b]    #[c, d]    a = 214    b = 175    c = 451    d = 597    kSquare = (a+b+c+d)*(a*d-b*c)**2/(a+b)/(c+d)/(a+c)/(b+d);    #置信度查对表    trust = [[0.5,0.455],[0.4,0.708],[0.25,1.323],[0.15,2.072],[0.1,2.706],\             [0.025,5.024],[0.01,6.635],[0.005,7.879],[0.001,10.828]];    size = len(trust);    for i in range(size-1, -1, -1):        if kSquare >= trust[i][1]:            print('置信度 > {0}%, K^2 = {1}'.format(round((1-trust[i][0])*100, 3), kSquare));            return trust[i][0];</span>



<span style="font-size:18px;">>>> 置信度 > 97.5%, K^2 = 6.109090909090909#独立性检验#题1def tmp3():    #数据    #[a, b]    #[c, d]    a = 10    b = 45    c = 20    d = 30    kSquare = (a+b+c+d)*(a*d-b*c)**2/(a+b)/(c+d)/(a+c)/(b+d);    #置信度查对表    trust = [[0.5,0.455],[0.4,0.708],[0.25,1.323],[0.15,2.072],[0.1,2.706],\             [0.025,5.024],[0.01,6.635],[0.005,7.879],[0.001,10.828]];    size = len(trust);    for i in range(size-1, -1, -1):        if kSquare >= trust[i][1]:            print('置信度 > {0}%, K^2 = {1}'.format(round((1-trust[i][0])*100, 3), kSquare));            return trust[i][0];</span>




<span style="font-size:18px;">>>> X= [126.974, 96.933, 86.656, 63.438, 55.264, 50.976, 39.069, 36.156, 35.209, 32.416]Y= [4.224, 3.835, 3.51, 3.758, 3.939, 1.809, 2.946, 0.359, 2.48, 2.413]拟合结果: y =    0.02556 x +    1.33452 , r=   0.67615</span>


<span style="font-size:18px;"> if (1) {            var r = 20;                  config.setSector(10,5,9,1);                    config.graphPaper2D(0, 0, r);                  config.axis2D(0, 0, 320, 1.6);                                  //坐标轴设定              var scaleX = 2*r, scaleY = 2*r;                var spaceX = 10, spaceY = 1;                 var xS = 0, xE = 150;                var yS = 0, yE = 10;                config.axisSpacing(xS, xE, spaceX, scaleX, 'X');                  config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');                               var X = [126.974, 96.933,86.656,63.438,55.264,50.976,39.069,36.156,35.209,32.416];var Y = [4.224,3.835,3.510,3.758,3.939,1.809,2.946,0.359,2.480,2.413];                        var array = [];            var size = X.length;                        for (var i = 0; i < size; i++) {                array.push([X[i], Y[i]]);            }                            var transform = new Transform();            var tmp = [];                        array = transform.scale(transform.translate(array, -xS, -yS), scaleX/spaceX, scaleY/spaceY);                tmp = [].concat(array);                  shape.pointDraw(tmp, 'green');                   array = [];          for (var i = 0; i < size; i++) {                array.push([X[i], taskFun(X[i])]);            }                 array = transform.scale(transform.translate(array, -xS, -yS), scaleX/spaceX, scaleY/spaceY);            tmp = [].concat(array);                  shape.multiLineDraw(tmp, 'red');                 plot.setFillStyle('blue');          plot.fillText('拟合结果: y = 0.02556*x + 1.33452', 30, -270, 200);                              } </span>


<span style="font-size:18px;">置信度 > 90.0%, K^2 = 3.6889201613659814#独立性检验#题3def tmp3():    #数据    #[a, b]    #[c, d]    a = 24    b = 31    c = 8    d = 26    kSquare = (a+b+c+d)*(a*d-b*c)**2/(a+b)/(c+d)/(a+c)/(b+d);    #置信度查对表    trust = [[0.5,0.455],[0.4,0.708],[0.25,1.323],[0.15,2.072],[0.1,2.706],\             [0.025,5.024],[0.01,6.635],[0.005,7.879],[0.001,10.828]];    size = len(trust);    for i in range(size-1, -1, -1):        if kSquare >= trust[i][1]:            print('置信度 > {0}%, K^2 = {1}'.format(round((1-trust[i][0])*100, 3), kSquare));            return trust[i][0];</span>



<span style="font-size:18px;">>>> X= [126.974, 96.933, 86.656, 63.438, 55.264, 50.976, 39.069, 36.156, 35.209, 32.416]Y= [4.224, 3.835, 3.51, 3.758, 3.939, 1.809, 2.946, 0.359, 2.48, 2.413]拟合结果: y =    0.02556 x +    1.33452 , r=   0.67615SSG = 12.870180099999999, SSE = 6.986174058384116, SSR = 5.884006041615882残差: [-0.356302026825019, 0.02262360033670774, -0.039669709794743824, 0.8018423973734929, 1.1917909702046225, -0.8285966637200308, 0.6127770403049579, -1.8997591485062628, 0.24544861984106747, 0.24984492078520049]回归: [1.653002026825019, 0.885076399663292, 0.6223697097947434, 0.02885760262650683, -0.18009097020462272, -0.28970333627996947, -0.594077040304958, -0.6685408514937374, -0.6927486198410677, -0.7641449207852009]def tmp():        X = [126.974, 96.933,86.656,63.438,55.264,50.976,39.069,36.156,35.209,32.416];    Y = [4.224,3.835,3.510,3.758,3.939,1.809,2.946,0.359,2.480,2.413];    a,b,r=linefit(X,Y)        print("X=",X)        print("Y=",Y)        print("拟合结果: y = %10.5f x + %10.5f , r=%10.5f" % (a,b,r));    size = len(X);    #平均值    average = sum(Y)/size;    SST = 0;    #残差    residual = [];    SSE = 0;    #回归    regression = [];    SSR = 0;    for i in range(size):        SST += (Y[i]-average)**2;        value = a*X[i]+b;        residual.append(Y[i]-value);        SSE += (Y[i]-value)**2;        regression.append(value-average);        SSR += (value-average)**2;            print('SSG = {0}, SSE = {1}, SSR = {2}'.format(SST, SSE, SSR));    print('残差:', residual);    print('回归:', regression);</span>


本节到此结束,欲知后事如何,请看下回分解。

0 0
原创粉丝点击