矿脉分布的回归模型建立与选择

来源:岁月联盟 作者:未知 时间:2010-07-11

  关键词:散点图 回归模型 剩余标准差

  论文摘要:本文主要研究的是矿脉分布的模型建立,通过对已知数据的分析,作出散点图,然后建立合适的回归模型,如:线性模型、二次模型、双曲线模型、对数模型等。运用MATLAB软件,通过对建立模型的剩余标准差比较,选择出最合适的回归模型为二次模型。通过对论文的研究,熟悉MATLAB软件的应用以及在模型建立中对模型选择的认识。

  1  引言

  本文通过研究矿脉的分布的研究,建立回归模型,包括线性模型、二次模型、双曲线模型、对数模型等模型。应用MATLAB软件对模型的比较与分析,选择出最合适的模型并对结果进行分析。

  2  模型分析

  2.1  问题的重述

  一矿脉有13个相邻样本点,人为地设定一原点,现测得各样本点对原点的距离x,与该样本点处某种金属含量y 的一组数据如下(附录表2.1),画出散点图观测二者的关系,试建立合适的回归模型,如二次曲线、双曲线、对数曲线等。


  2.2    问题的分析

  2.2.1  模型假设

  本问题中没有给出明确的模型选择,我们先画出其散点图,然后对其分析,建立模型。

  从数理统计的观点看,这里涉及的都是随机变量,我们根据一个样本出的那些系数,只是它们的一个(点)估计,应该对它们作区间估计或假设检验,如果置信区间太大,甚至包含了零点,那么系数的估计值是没有多大意义的。另外也可以用方差分析方法对模型的误差进行分析,对拟合的优劣给出评价。

  具体地说,回归分析在一组数据的基础上研究这样几个问题:

  ( i ) 建立因变量y与自变量 QUOTE   … QUOTE   之间的回归模型 (经验公式);

  (ii)对回归模型的可信度进行检验;

  (iii)判断每个自变量对y的影响是否显著;

  (iv)诊断回归模型是否适合这组数据;

  (v )利用回归模型对y 进行预报或控制。

  2.2.2  模型建立

    Matlab 统计工具箱用命令regress 实现多元线性回归,用的方法是最小二乘法,用法是:b=regress(Y,X).

  其中X ,Y是按照 QUOTE      , QUOTE   式排列的数据,b 为回归系数估计值为 QUOTE       通过码头MATLAB建立回归模型。     

  [b,bint, ,rint,stats]=regress(Y,X,alpha) 这里Y,X 同上,alpha 为显著性水平(缺省时设定为0.05 ),b,bint 为回归系数估计值 和它们的置信区间,,rint 为残差 (向量)及其置信区间,stats 是用于检验回归模型的统计量,有三个数值,第一个是 QUOTE     ,第二个是 QUOTE  ,第三个是与F对应的概率P,P QUOTE  拒绝  QUOTE     ,回归模型成立.残差以及置信区间可以用rcoplot( ,rint)画图。

  3  模型求解


  3.1散点图模型的求解

    输入程序及题目数据,绘出散点图:

      

<图3.1>

  从图像上看,如果第一个点数据剔除,线性关系比较明显,但并不能排除其他模型。下面就对几种模型都加以计算比较。(图3.1,程序见附录3.1)

  3.1.1  线性模型

  输入程序得到图(3.2),程序见附录3.2

     

<图3.2>


结果输出:

b =108.2581  0.1742

Bint =107.2794  109.2367  0.0891    0.2593

stats =0.6484   20.2866    0.0009

  线性相关系数较小,线性回归模型在alpha>0.0009成立第一个点为异常点(仅指线性模型下),予以剔除,再次输入程序得图(3.3),程序见附录3.3  

                                                                                                                  

<图3.3>

结果输出:

b =109.0668  0.1159

bint =108.8264  109.3072  0.0958    0.1360

stats =0.9428  164.8060    0.0000

  剔除第一个点后线性系数和p值都变得好了很多。没有异常点。

  线性模型为:  QUOTE   

  对该模型求剩余标准差:

  rmse=sqrt(sum((y-b(1)-b(2)*x1).^2)/10)得:rmse =0.1635

  3.1.2  二次曲线

  考虑第一个点偏离太多,予以剔除后重新输入程序计算可得:

        p =-0.0043    0.2102  108.6718

  二次模型  QUOTE   


  对该模型求剩余标准差:

[Y,delta]=polyconf(p,x,S);

rmse=sqrt(sum((y-Y).^2)./10),得:

rmse =0.1231

    程序见附录3.4

  3.1.3  双曲线模型

  双曲线模型类似于 QUOTE     ,可以通过将x的倒数代换转化为线性模型来求。输入程序得到图(3.4),程序见附录3.5

<图3.4>

输出结果:b =111.4405  -9.0300

bint =111.1068  111.7743  -10.6711   -7.3889

stats =0.9302  146.6733    0.0000

有两个异常点,剔除后再次输入程序可得图(3.5),程序见附录3.6

<图3.5>

输出结果:b =111.5653  -10.9938

bint =111.2882  111.8424  -13.5873   -8.4002

stats =0.9309  107.7623    0.0000

双曲线模型 QUOTE   

对该模型求剩余标准差:

rmse=sqrt(sum((y-b(1)-b(2)./x1).^2)/8)得:

rmse =0.1487


  3.1.4  对数曲线

类似于双曲线模型,输入程序得图(3.6),程序见附录3.7


<图3.6>

输出结果:b =106.7113  1.5663

bint =105.6382  107.7844  1.0828    2.0499

stats =0.8221   50.8285    0.0000

剔除异常点,重新输入程序计算可得图(3.7),程序见附录3.8

<图3.7>

 

    输入结果:b =107.9762  1.0496

bint =107.6403  108.3121  0.9037    1.1956


stats =0.9625  256.7014    0.0000

对数模型  QUOTE  

对该模型求剩余标准差:rmse=sqrt(sum((y-b(1)-b(2)*log(x1)).^2)/10)得:rmse =0.1324


  3.2  结果比较

通过对几个模型的比较可得,二次模型的剩余标准差最小。不过几个模型的差别很小。如表(3.1)

线性模型

二次模型

双曲线模型

对数模型

0.1635

0.1213

0.1487

0.1324

<表3.1>


  4结果分析

   第一个点的讨论。纵观四个模型,第一个点都属于异常点,需要剔除。但什么样的点必须剔除?对于这个问题,不合理的点固然要剔除,但同时点数的减少又将使得样本的容量变小,信度降低,这就需要使用者的判断。向本题中的第一个数据,很明显不符合任何模型,严重干扰回归分析,可以判断为是异常点,予以剔除。

  第二个是模型的选择。本题目的特点在于,因为对矿物分布和地质知识的缺乏,不能从理论上加以分析,只能从数据本身出发,加以分析。这就隐藏了很多问题。

  5 中的公式

     QUOTE       , QUOTE   

                      (2.1)      


     QUOTE                                                  (2.2)


    QUOTE    

                  (2.3)


  6  结论

    通过对几个模型的比较可得,二次模型的剩余标准差最小。不过几个模型的差别很小。固采用二次模型为最合适模型

附录

表2.1

X

2

3

4

5

7

8

10

Y

106.42

109.20

109.58

109.50

110.00

109.93

110.49

x

11

14

15

16

18

19

Y

110.59

110.60

110.90

110.76

111.00

111.20


程序3.1

    x1=[2 3 4 5 7 8 10 11 14 15 15 18 19]';

y=[106.42  109.20 109.58 109.50 110.00 109.93 110.49 110.59 110.60      110.90  110.76 111.00 111.20]';

plot(x1,y,'+')

程序3.2

   alpha=0.05;

x1=[2  3 4 5 7 8 10 11 14 15 15 18 19]';

y=[106.42 109.20 109.58 109.50 110.00 109.93 110.49 110.59 110.60     110.90 110.76 111.00 111.20]';

x=[ones(13,1),x1];

[b,bint,r,rint,stats]=regress(y,x,alpha);

b,bint,stats,rcoplot(r,rint)


程序3.3

alpha=0.05;

x1=[3 4 5 7 8 10 11 14 15 15 18 19]';

y=[109.20  109.58 109.50 110.00 109.93 110.49 110.59 110.60 110.90  110.76 111.00 111.20]';

x=[ones(12,1),x1];

[b,bint,r,rint,stats]=regress(y,x,alpha);

b,bint,stats,rcoplot(r,rint)


程序3.4

x=[3 4 5 7 8 10 11 14 15 15 18 19];

y=[109.20 109.58 109.50 110.00 109.93 110.49 110.59 110.60 110.90     110.76 111.00 111.20];

[p,S]=polyfit(x,y,2);p


程序3.5

alpha=0.05;

x1=[2 3  4  5  7  8  10 11 14 15 15 18 19]';

y=[106.42   109.20  109.58  109.50  110.00  109.93  110.49 110.59 110.60  110.90  110.76  111.00  111.20]';

 

x=[ones(13,1),1./x1];

[b,bint,r,rint,stats]=regress(y,x,alpha);

b,bint,stats,rcoplot(r,rint)


程序3.6

alpha=0.04;

x1=[5 7  8  10 11 14 15 15 18 19]';

y=[109.50   110.00  109.93  110.49  110.59  110.60  110.90 110.76 111.00  111.20]';

x=[ones(10,1),1./x1];

[b,bint,r,rint,stats]=regress(y,x,alpha);

b,bint,stats,rcoplot(r,rint)


程序3.7

alpha=0.05;

x1=[2 3  4  5  7  8  10 11 14 15 15 18 19]';

y=[106.42   109.20  109.58  109.50  110.00  109.93  110.49     110.59   110.60  110.90  110.76  111.00  111.20]';

x=[ones(13,1),log(x1)];

[b,bint,r,rint,stats]=regress(y,x,alpha);

b,bint,stats,rcoplot(r,rint)


程序3.8

alpha=0.05;

x1=[3 4  5  7  8  10 11 14 15 15 18 19]';

y=[109.20   109.58  109.50  110.00  109.93  110.49  110.59 110.60 110.90  110.76  111.00  111.20]';

x=[ones(12,1),log(x1)];

[b,bint,r,rint,stats]=regress(y,x,alpha);

b,bint,stats,rcoplot(r,rint)