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

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼。
这次要研究的是[统计案例]。

正剧开始:


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


[从头学数学] 第197节 统计案例_第1张图片


[从头学数学] 第197节 统计案例_第2张图片

[从头学数学] 第197节 统计案例_第3张图片

[从头学数学] 第197节 统计案例_第4张图片

[从头学数学] 第197节 统计案例_第5张图片

<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.79847

def 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>

[从头学数学] 第197节 统计案例_第6张图片

[从头学数学] 第197节 统计案例_第7张图片

[从头学数学] 第197节 统计案例_第8张图片


<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>

[从头学数学] 第197节 统计案例_第9张图片

<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>



[从头学数学] 第197节 统计案例_第10张图片

<span style="font-size:18px;">>>> 
置信度 > 99.9%, K^2 = 16.37320688824579

#独立性检验
#例1
def 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>

[从头学数学] 第197节 统计案例_第11张图片


<span style="font-size:18px;">>>> 
置信度 > 97.5%, K^2 = 6.109090909090909

#独立性检验
#题1
def 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>


[从头学数学] 第197节 统计案例_第12张图片

[从头学数学] 第197节 统计案例_第13张图片

<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>

[从头学数学] 第197节 统计案例_第14张图片

<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

#独立性检验
#题3
def 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.67615
SSG = 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>


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

你可能感兴趣的:([从头学数学] 第197节 统计案例)