时间:2024-05-10
北京市中关村中学 张译方
由自己出生时体重与父亲出生时体重相近而产生好奇,经向同学随机提问,作出猜想——父代新生儿体重与子代新生儿体重呈正相关关系。
1.回归分析是数据分析中常用的一种方法,它可以提供变量间的回归方程,并判断所建立回归方程的有效性。在方程有效性的前提下,可以用方程做预测和控制,并了解预测和控制的精度。多元回归分析预测法,是指通过对两个或两个以上的自变量与一个因变量的相关分析,建立预测模型进行预测的方法。当自变量与因变量呈线性关系时,称为多元线性回归分析。
2.Matlab是一种以矩阵为基本单位的数据分析软件,它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
3.多项式拟合:a=polyfit(xdata,ydata,n),其中,n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入。输出参数a为拟合多项式的系数,相对应的次数为由高到低。多项式在x处的值y可用y=polyval(a,x)计算。
4.最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法可用于曲线拟合。
最近,我们就父代新生儿体重与子代新生儿体重这一问题进行了抽样调查。通过询问我的老师、同学及父母同事的有关情况,并加以筛选(如:当一家庭有两个或两个以上子代新生儿时,我们只取第一个新生儿的体重),最终得到36组数据。我们把程序放在附录,这里只做输出结果的说明和分析。
数据的散点分布如下:
在此基础上,我们利用一元回归分析的方法,得到了父代新生儿体重与子代新生儿体重的线性回归方程:y= 7.3356-0.0630x。
经过残差分析,我们去掉数据中的2组极端值,随后用最小二乘法进行高次拟合。首先进行线性拟合,输出反映了函数整体下降的趋势,但具体细节部分并没有反映出来。然后对数据进行二次拟合,对比两次的拟合图,会发现二次拟合出来的结果比一次拟合结果更加准确,但仍未反映出数据的真实情况。最后对曲线进行高次拟合,输出的图像是进行5次拟合的结果,基本上反映出了数据的真实变化情况。需要注意的是不可以对数据进行太高次数的拟合,次数太高就会出现警告。
经研究表明,父代新生儿体重与子代新生儿体重存在一定相关性。
本次研究模型并不精确,子代新生儿体重与父代新生儿体重相关的同时,不排除空气环境、医生建议、饮食结构、生活条件等因素也会对子代新生儿体重产生某种影响。
附录:
数据预处理:
我们猜想两组数据线性相关,下面借助matlab求相关系数。
Matlab程序为:(输入如下命令)
>> x=[9.1,6.8,9.2,7.3,6.8,7.2,8.6,6.0,9.1,6.0,4.9,7.0,6.5,8,7,6.5,5.8,6.1,7,5.5,5,6,8,7,6.6,6.6,6.8,7.8,6.5,6.5,7.8,6.8,5.3,6.5,6,6.2];
y=[7.8,8.0,6.8,7.6,7.0,6.5,6.6,7.4,5.9,7.5,6.6,7.0,3,6.9,6.3,7.3,5.8,5.1,6.5,6.9,7.8,6.6,6.9,6.6,6.5,8.8,5.4,7.5,7.8,9.2,6.2,7.4,7.9,7.5,7.2,6.8];
X=[ones(length(y),1),x’];
Y=y’;
[b,bint,r,rint,stats]=regress(Y,X);
b,bint,stats
输出结果:
b=
7.3356
-0.0630
bint =
4.9389 9.7323
-0.4098 0.2838
stats =
0.0040 0.1362 0.7144 1.1864
因此我们可得:孩子新生儿体重和父亲新生儿体重的线性相关的公式为:y= 7.3356-0.0630x。
>>scatter(x,y)
我们得到散点图:
(残差分析)
接着输入 rcoplot(r,rint)
结果显示
>> [R,P]=corrcoef(x,y)
我们得到协方差矩阵
R =
1.0000 -0.0642
-0.0642 1.0000
有前面的残差分析,我们去掉两个极端值,再进行相关性分析和系数估计,matlab程序如下:
>> x=[9.1,6.8,9.2,7.3,6.8,7.2,8.6,6.0,9.1,6.0,4.9,7.0,8,7,6.5,5.8,6.1,7,5.5,5,6,8,7,6.6,6.6,6.8,7.8,6.5,7.8,6.8,5.3,6.5,6,6.2];
y=[7.8,8.02,6.8,7.6,7.0,6.5,6.6,7.4,5.88,7.5,6.6,7.0,6.9,6.3,7.3,5.8,5.1,6.5,6.9,7.8,6.6,6.9,6.6,6.5,8.8,5.4,7.5,7.8,6.2,7.4,7.9,7.5,7.2,6.8];
X=[ones(length(y),1),x’];
Y=y’;
[b,bint,r,rint,stats]=regress(Y,X);
b,bint,stats
b =
7.4889
-0.0783
bint =
5.7460 9.2319
-0.3297 0.1731
stats =
0.0124 0.4023 0.5304 0.6169
>> [R,P]=corrcoef(x,y)
R =
1.0000 -0.1114
-0.1114 1.0000
P =
1.0000 0.5304
0.5304 1.0000
我们看到,两组数据的相关性明显增强,我们可以认为,新生儿体重和父亲的出生体重有线性关系:y=7.4889 -0.0783x。
求解最小二乘曲线拟合:
我们首先进行线性拟合:
>> x=[9.1,6.8,9.2,7.3,6.8,7.2,8.6,6.0,9.1,6.0,4.9,7.0,8,7,6.5,5.8,6.1,7,5.5,5,6,8,7,6.6,6.6,6.8,7.8,6.5,7.8,6.8,5.3,6.5,6,6.2];
y=[7.8,8.02,6.8,7.6,7.0,6.5,6.6,7.4,5.88,7.5,6.6,7.0,6.9,6.3,7.3,5.8,5.1,6.5,6.9,7.8,6.6,6.9,6.6,6.5,8.8,5.4,7.5,7.8,6.2,7.4,7.9,7.5,7.2,6.8];
a=polyfit(x,y,1);
x1=4:0.1:10;
y1=a(1)*x1+a(2);
plot(x,y,’*’,x1,y1,’r’)
反映了函数整体下降的趋势,但具体细节部分并没有反映出来。下面对曲线进行二次拟合,其程序代码如下:
>> b=polyfit(x,y,2);
x2=4∶0.1∶10;
y2=b(1)*x2.^2+b(2)*x2+b(3)
plot(x,y,’*’,x2,y2,’r’)
得到结果:
y2 =
1至15列
7.2487 7.2356 7.2226 7.2099 7.1973 7.1848 7.1726 7.1605 7.1486 7.1369 7.1253 7.1139 7.1027 7.0916 7.0808
16 至 30 列
7.0701 7.0595 7.0492 7.0390 7.0290 7.0191 7.0095 7.0000 6.9906 6.9815 6.9725 6.9637 6.9551 6.9466 6.9383
31 至 45 列
6.9302 6.9222 6.9145 6.9069 6.8994 6.8922 6.8851 6.8782 6.8714 6.8649 6.8585 6.8523 6.8462 6.8403 6.8346
46 至 60 列
6.8291 6.8237 6.8185 6.8135 6.8087 6.8040 6.7995 6.7952 6.7910 6.7871 6.7832 6.7796 6.7761 6.7729 6.7697
61 列
6.7668
对比两次的拟合图会发现,二次拟合出来的结果比一次拟合结果更加准确,但仍未反映出数据的真实情况。再对曲线进行高次拟合:
>> c=polyfit(x,y,5);
x3=4:0.1:10;
y3=c(1)*x3.^5+c(2)*x3.^4+c(3)*x3.^3+c(4)*x3.^2+c(5)*x3+c(6);
plot(x,y,’*’,x3,y3,’-r’)
这个图像是对曲线进行5次拟合的结果,基本上反映出了数据的真实变化情况。需要注意的是,不可以对数据进行太高次数的拟合,次数太高就会出现警告。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!