图5-2
图5-3 (二)给定相应数据 对于问题二,在数据完整但出现异常的情况下,可以考虑使用异常值检验中标准差未知的t检验法。将除可疑测定值xd以外的其余测定值当做一个总体,并假设该总体服从正态分布。由这些测定值计算平均值x与标准差s,而将可疑值xd当做一个样本容量为1的特殊总体。如果xd与其余测定值同属于一个总体,则它与其余测定值之间不应有显著性差异。检测统计量为:k?xd?x?,假设可由标准差s替代?来进行检验,则检测统计量可视为:k?xd?xs。若统计量值大于相应置信度?下的t检验法的临界值T?(该临界值通过查表法得出),则将xd判为异常值。具体数据见附表二,具体程序详见附录二,结果图如下5-4所示。 图5-4 六、 问题(3)的分析与求解
6.1问题分析
对于问题三,我们采用了分段线性插值,最近方法插值,三次样条函数插值以及三次多项式方法插值法来修正数据异常。同时也需利用外插法修正最后一个数据的异常。详见2.3对问题三的处理原理。 具体代码见附录三。
附录一 多元线性回归matlab程序 clear;
data1=xlsread('C:\\Users\\Lenovo\\Desktop\\1960-2005.xls'); %做出散点图 figure(1)
scatter3(data1(:,4),data1(:,5),data1(:,6),'r'); x=[ones(262,1),data1(:,4),data1(:,5)]; y=data1(:,6);
[b,bint,r,rint,stats]=regress(y,x);
xlabel('X54511(x1)'); ylabel('X57494(x2)'); zlabel('X59287(y)'); text(0.1,0.06,0.2,'回归方程式为:y=18.014+0.051x1+0.352x2','color','b'); title('x1,x2,y的关系:','color','m'); %做残差分析图 figure(2)
reoplot(r,rint);
xlabel('数据');ylabel('残差'); title('残差绘制图'); %补缺失数据 x1=[32.6,31.3]; y1=x1*b;
x2=[33.2,26.5]; y2=x2*b;
附录二 t检验spss代码
GET DATA /TYPE=XLS
/FILE='C:\\Users\\bwx\\Desktop\\2.xls' /SHEET=name 'Sheet1' /CELLRANGE=full /READNAMES=on
/ASSUMEDSTRWIDTH=32767. EXECUTE.
DATASET NAME 数据集2 WINDOW=FRONT. T-TEST
/TESTVAL=0
/MISSING=ANALYSIS /VARIABLES=y
/CRITERIA=CI(.95).
附录三 插值修正数据matlab代码 clear
>> T=0:5:65 T =
0 5 10 15 20 25 30 35 40 45 50 55 60 65
>> X=2:5:57
X =
2 7 12 17 22 27 32 37 42 47 52 57 >>
F=[3.2015,2.2560,879.5,1835.9,2968.8,4136.2,5237.9,6152.7,6725.3,6848.3,6403.5,6824.7,7328.5,7857.6]; >> F1=interp1(T,F,X) F1 =
1.0e+003 *
Columns 1 through 10
0.0028 0.3532 1.2621 2.2891 5.6038 6.3817 6.7745 6.6704
Columns 11 through 12
6.5720 7.0262
>> F1=interp1(T,F,X,'nearest') F1 =
1.0e+003 *
Columns 1 through 10
0.0032 0.0023 0.8795 1.8359 5.2379 6.1527 6.7253 6.8483
Columns 11 through 12
6.4035 6.8247
>> F1=interp1(T,F,X,'nearest')%最近方法插值 F1 =
1.0e+003 *
3.4358 2.9688 4.5769 4.1362 Columns 1 through 10
0.0032 0.0023 0.8795 1.8359 2.9688 4.1362 5.2379 6.1527 6.7253 6.8483
Columns 11 through 12
6.4035 6.8247
>> F1=interp1(T,F,X,'spline')%三次样条方法插值 F1 =
1.0e+003 *
-0.1702 0.3070 1.2560 2.2698 5.6370 6.4229 6.8593 6.6535 6.4817 7.0441
>> F1=interp1(T,F,X,'cubic')%三次多项式方法插值 F1 =
1.0e+003 *
0.0025 0.2232 1.2484 2.2736 5.6362 6.4362 6.7978 6.6917 6.5077 7.0186
附录四 随机数据缺失鉴别R语言代码 set.seed(2016) > x<-rnorm(100) > summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max. -3.3150 -0.4837 0.1867 0.1098 0.7120 2.6860 > summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max. -3.3150 -0.4837 0.1867 0.1098 0.7120 2.6860 > # outliers
> boxplot.stats(x)#out $stats
[1] -1.9338617 -0.4858811 0.1866546 0.7267571 1.9850002 $n
[1] 100
3.4396 3.4365 4.5896 4.5913 $conf
[1] -0.004942252 0.378251413 $out
[1] -3.315391 2.685922 -3.055717 2.571203
> boxplot.stats(x)$out
[1] -3.315391 2.685922 -3.055717 2.571203 > boxplot(x) > y<-rnorm(100)
> df<-data.frame(x,y) > rm(x,y) > head(df)
x y 1 -3.31539150 0.7619774 2 -0.04765067 -0.6404403 3 0.69720806 0.7645655 4 0.35979073 0.3131930 5 0.18644193 0.1709528 6 0.27493834 -0.8441813 > attach(df)
> # find the index of outliers from x
> (a <-which(x %in% boxplot.stats(x)$out)) [1] 1 33 64 74
> # find the index of outliers from y
> (b <-which(y %in% boxplot.stats(y)$out)) [1] 24 25 49 64 74 > detach(df)
> # outliers in both x and y > (outlier.list<-intersect(a,b)) [1] 64 74 > plot(df)
> points(df[outlier.list,],col=\