正剧开始:
星历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.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>
<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 #独立性检验 #例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>
<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>
<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 #独立性检验 #题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>
本节到此结束,欲知后事如何,请看下回分解。