某地区作物生长所需的营养主要是氮(N)、磷(P)、钾(K)。某作物研究所在该地区对土豆与生菜做了一定数量的实验,实验数据如表4-1记录了土豆的实验数据,表4-2记录了生菜的实验数据。其中hm2表示公顷,t表示吨,kg表示千克。当一个营养的施肥发生变化时,总将另外两个营养施肥量保持在第七个水平。如对土豆产量关于N的施肥做实验时,P和K的施肥量分别取196kg/hm2与372kg/hm2.
目标:试分析施肥量与产量之间的关系,并对所有结果从应用价值与如何改进方案方面做出估计。
表4-1土豆的N、P、K效果:
施肥量(N) Kg/hm2 |
产量 t/hm2 |
施肥量(P) Kg/hm2 |
产量 t/hm2 |
施肥量(K) Kg/hm2 |
产量 t/hm2 |
0 |
15.81 |
0 |
33.46 |
0 |
18.98 |
34 |
21.36 |
24 |
32.47 |
47 |
27.35 |
67 |
25.72 |
49 |
36.06 |
93 |
34.86 |
101 |
32.29 |
73 |
37.96 |
140 |
39.52 |
135 |
34.03 |
98 |
41.04 |
186 |
38.44 |
202 |
39.45 |
147 |
40.09 |
279 |
37.73 |
259 |
43.15 |
196 |
41.26 |
372 |
38.43 |
336 |
43.46 |
245 |
42.17 |
465 |
43.87 |
404 |
40.83 |
294 |
40.36 |
558 |
42.77 |
471 |
30.75 |
342 |
42.73 |
651 |
46.22 |
表4-2生菜的N、P、K效果:
施肥量(N) Kg/hm2 |
产量 t/hm2 |
施肥量(P) Kg/hm2 |
产量 t/hm2 |
施肥量(K) Kg/hm2 |
产量 t/hm2 |
0 |
11.2 |
0 |
6.39 |
0 |
15.75 |
28 |
12.70 |
49 |
9.48 |
47 |
16.67 |
56 |
14.56 |
98 |
12.46 |
93 |
16.89 |
84 |
16.27 |
147 |
14.33 |
140 |
16.24 |
112 |
17.75 |
196 |
17.10 |
186 |
17.56 |
169 |
22.59 |
294 |
21.94 |
279 |
19.20 |
224 |
21.63 |
391 |
22.64 |
372 |
17.97 |
280 |
19.34 |
489 |
21.34 |
465 |
15.84 |
336 |
16.12 |
587 |
22.07 |
558 |
20.11 |
392 |
14.11 |
685 |
24.53 |
651 |
19.40 |
>> tn=[0 34 67 101 135 202 259 336 404 471];
yn=[15.18 21.36 25.72 32.29 34.03 39.45 43.15 43.46 40.83 30.75];
tp=[0 24 49 73 98 147 196 245 294 342];
>> yp=[33.46 32.47 36.06 37.96 41.04 40.09 41.26 42.17 40.36 42.73];
tk=[0 47 93 140 186 279 372 465 558 651];
yk=[18.98 27.35 34.86 39.52 38.44 37.73 38.43 43.87 42.77 46.32];
>> sn=[0 28 56 84 112 168 224 280 336 392];
xn=[11.02 12.70 14.56 16.27 17.75 22.59 21.63 19.34 16.12 14.11];
sp=[0 49 98 147 196 294 391 489 587 685];
>> xp=[6.39 9.48 12.46 14.33 17.10 21.49 22.46 21.34 22.07 24.53];
sk=[0 47 93 140 186 279 372 465 558 651];
xk=[15.75 16.76 16.89 16.24 17.56 19.20 17.97 15.84 20.11 19.40];
以土豆产量与氮肥施肥量为例,初步观察,用二次函数作为经验方程。
调用matlab的回归求解函数regress,下面逐步解释。
>> clear %清除内存里的一切变量;
>> load d:\tudou %调回存储的数据;
>>[b,bt,r,rt,st]=regress(yn‘,[ones(length(tn),1),tn’,(tn.^2)‘]) %调用格式
- b 回归系数,升幂排列
- bt 回归系数的置信区间,默认95%
- r 残差,即理论值与测量值的差
- rt 残差的95%的置信区间
- st 模型检验参数(R2,F,P,sig2).(R2表示方程因变量与自变量之间的相关性检验,R也称为可决系数;F,p是方程显著性检验;sig2是σ2的估计值。)
regress matlaba回归命令
yn’ 因变量(列)
[ones(length(tn),1),tn’,(tn.^2)‘]) 矩阵,形式是
回归系数
b =
14.7416 a0
0.1971 a1
-0.0003 a2
回归系数的95%的置信区间
bt =
12.6301 16.8532
0.1736 0.2207
-0.0004 -0.0003
回归系数的置信区间不应包括0;若包括0,说明该系数不显著(100次实验,95次以上离0非常近,非常危险(或者贡献不大))
方程显著性指标F=251.7971>Fα(2,7)说明回归结果显著。
残差的置信区间以包含0为好,说明残差总在0附近,意味着残差较小。如果出现残差置信区间不包括零,这个样本观测值极可能是极端值。
残差平方和记为SSE,利用SSE/(n-p-1)可以作为σ2的无偏估计值。
在该问题里,R2=0.9863表示控制氮肥施肥量,在100次种植实验里,至少有98次土豆的产量可以用该经验公式解释
根据上面的计算,发现第10个样本的残差置信区间右端点小于0,即第10个样本可能不正常。去掉第10个样本后(可以再线性插值替换),回归得到结果为R2=0.9956;F=678.5246;p<0.000
根据上面的分析当土豆的施肥量tn给定时,土豆的产量Yn服从分布
那么,在土豆的种植中,给定每公顷施肥量为tn=380kg时,土豆产量Yn的分布为
即土豆产量的95%的置信区间为( 39.8725 , 42.9181)
磷肥施肥量过了100以后,土豆的产量几乎没有怎么增加,即土豆与磷肥的关系里,有一个上界,下面几个经验函数可以试试:
不管用哪个,都是非线性回归,误差和可信度分析都不如线性回归那么成熟好用。
(1)阅读数据和散点图发现,磷肥施肥量为24kg/hm2时的土豆产量反而不如不施肥的产量,认为第二个数据被污染了,用第一和第三个数据线性插值替代。
上述几个非线性模型,不管用哪个,都会涉及到自变量取负指数函数,由于自变量太大,取负指数后在0附近,太敏感。所以先对磷肥施肥量标准化:
如上图所示,土豆的最大产量不超过44,而威布尔函数的最大值就是A,不妨假定A=44,则
取Y=ln(44-y),a0=lnB,a1=-C,则韦布尔函数就线性划为绘制(tp’,Y)散点图验证猜测。
如下图所示,猜测正确。
Yp表示施磷肥时土豆的产量,tp表示磷肥的施肥量,模型设为【3.2】
取Y=ln(44-Yp),a0=lnB,a1=-C,【3.2】就等价于下面的线性回归模型【3.3】
matlab计算代码如下
>> clear
>> load d:\tudou
>> yp(2)=(yp(1)+yp(3))/2;
>> tp1=(tp-mean(tp))/std(tp);
>> Y=log(44-yp);
>> plot(tp1,Y,'*')
>> [mean(tp),std(tp)]
ans =
146.8000 118.2547
>> [a,at,r,rt,st]=regress(Y',[ones(length(tp),1),tp1']);
>> a
a =
1.4041
-0.6211
>> at
at =
1.1495 1.6587
-0.8895 -0.3527
>> st
st =
0.7807 28.4829 0.0007 0.1219
>> rt
rt =
-0.5561 0.9161
-0.5894 0.9383
-0.6351 0.9434
-0.8102 0.8236
-1.2249 0.0744
-0.8761 0.7971
-0.9568 0.6814
-1.0436 0.4756
0.1942 1.1279
-0.8104 0.5307
第9个样本异常,修正后计算
>> Y(9)=[];tp1(9)=[];
[a,at,r,rt,st]=regress(Y',[ones(length(tp1),1),tp1']);
>> st
st =
0.9154 75.7884 0.0001 0.0536
(极显著)
a =
1.3133
-0.7467
实验值与理论值对比如下图所示。
理论值 实验值
34.6242 33.4600
35.9398 34.7600
37.1144 36.0600
38.0806 37.9600
38.9432 41.0400
40.2863 40.0900
41.2726 41.2600
41.9970 42.1700
42.5290 40.3600
42.9129 42.7300
在上面的土豆产量与磷肥关系(1)里,我们假定土豆的最大产量为44后才得以线性化(这个假设有时候不太合理),如果不能线性化,就只能非线性拟合。
调用matlab的最小二乘曲线拟合函数lsqcurvefit,来求解模型参数beta。先编写模型的经验函数的m文件tpfun.m。
调用格式为:
>> clear
>> load d:\tudou
>> x=tp';y=yp';
>> [beta,res]=lsqcurvefit(@tpfun,[40,0.2,2],x,y)
[beta,res]=lsqcurvefit(@tpfun,[40,0.2,2],x,y)
- beta为返回的参数的估计值,按照tpfun.m中顺序给出
- res 返回残差平方和,即经验值与实验值之间的误差平方和
- @tpfun 调用函数名为tpfun.m的m文件
- [40,0.2,2] 是参数beta的初始值
- X 土豆试验中的磷肥施肥量(列向量)
- Y 土豆实验中的土豆产量(列向量)
计算结果为
beta =
19.4643 3.9464 27.4523
res =
18.1411
经验值与实验值对比图像
实验值y 回归值y*
33.4600 32.5365
32.4700 35.0157
36.0600 36.5785
37.9600 37.6559
41.0400 38.5330
40.0900 39.8342
41.2600 40.8111
42.1700 41.5935
40.3600 42.2462
土豆产量的实验值与拟合值差的分布图
>> E=y-tpfun(beta,x)
E =
0.9235
-2.5457
-0.5185
0.3041
2.5070
0.2558
0.4489
0.5765
-1.8862
-0.0654
>> normplot(E)
除了3个点外,其余的点都均匀分布在直线两侧,即数据近似服从正态分布
>> [h,p,jbstat,critval]=jbtest(E,0.05)
h =
0
p =
0.5000
jbstat =
0.1221
critval =
2.5239
Jbtest检验:h=1时拒绝原假设H0;当jbstat>critval时拒绝原假设。计算结果显示,没有理由拒绝H0,即接受H0。
认为E服从均值为0的正态分布。