
Раздел 5.
Однофакторные регрессионные модели {x}i=f(t) и прогнозные величины факторов {x}i.
Используем программу PROG3.PAS.
PROGRAM prog3;
Uses crt;
Label 0,1,2,3,4,5,6,7,8,9,11,12;
Var i,n,m,k,p,j,O :integer;
x, y ,yr,yo : array[1..22] of real;
kof: array [1..3,1..5] of real;
tab: array [1..5,1..11] of real;
f,f1,f2 : text;
slovo : array [1..18] of string;
Sx,Sy,Sxy,Sxx,Sx3,Sx4,Sxxy:real;
Slnx,Slny,Slnxy,Slnxx,Sxlny:real;
a,b,d1,d2,d3,c,sigmaYY,xm,sigmaX1,dispP:real;
e,sigmay,dispF,ym,nu,z,w,ta,tb,tc:real;
q:char;
PROCEDURE analis;
Label 10;
Var
xmm,sigmaY1,sigmaZ1:real;
sigmaX,sigmaXX,sigmaA,sigmaB,sigmaC:real;
v,yv:real;
begin
i:=0;e:=0;dispF:=0;ym:=0;xm:=0;xmm:=0;
dispP:=0;sigmaX1:=0;sigmaY1:=0;sigmaZ1:=0;nu:=0;z:=0;w:=0;
for i:=1 to n do
begin
if k=1 then yr[i]:=kof[1,1]+kof[2,1]*x[i];
if k=2 then yr[i]:=kof[1,2]*exp(kof[2,2]*ln(x[i]));
if k=3 then yr[i]:=kof[1,3]*exp(x[i]*ln(kof[2,3]));
if k=4 then yr[i]:=kof[1,4]*exp(kof[2,4]*x[i]);
if k=5 then yr[i]:=kof[1,5]+kof[2,5]*x[i]+kof[3,5]*SQR(x[i]);
yo[i]:=yr[i]-y[i];
e:=e+Abs(y[i]-yr[i])/y[i]*100/n;
dispF:= dispF + sqr(y[i]-yr[i])/(n-p);
ym:=ym + y[i]/n;
xm:=xm + x[i]/n;
xmm:=xmm + sqr(x[i])/n;
end;
tab[k,1]:=e;
tab[k,3]:=dispF;
sigmay:= sqrt(dispF);
tab[k,2]:=sigmay;
tab[k,4]:=ym;
for i:=1 to n do
begin
dispP:=dispP + sqr(y[i]-ym)/(n-1);
sigmaY1:=sigmaY1 + sqr(y[i]-ym)/(n-2);
sigmaX1:=sigmaX1 + sqr(x[i]-xm)/(n-1);
sigmaZ1:=sigmaZ1 + sqr(x[i]*x[i]-xmm)/(n-1);
end;
tab[k,5]:=dispP;
nu:=dispF/dispP;
nu:=sqrt(1-nu);
tab[k,6]:=nu;
z:=ln(sqr(nu)/(1-sqr(nu)))/2*(n-p)/(p-1);
tab[k,7]:=z;
w:=dispP/dispF;
tab[k,8]:=w;
sigmaYY:=0;sigmaX:=0;sigmaXX:=0;
sigmaYY:=sqrt(sigmaY1);
sigmaX:=sqrt(sigmaX1);
sigmaXX:=sqrt(sigmaZ1);
sigmaA:=0;sigmaB:=0;sigmaC:=0;
ta:=0;tb:=0;tc:=0;tab[k,11]:=0;
if k<>5 then goto 10;
sigmaC:=sigmaYY/(sqrt(n-1)*sqr(sigmaXX));
tc:= abs(c/sigmaC);
tab[k,11]:=tc;
10: sigmaA:=sigmaYY*sqrt(1/n+sqr(xm)/((n-1)*sqr(sigmaX)));
ta:=abs(a/sigmaA);
sigmaB:=sigmaYY/(sqrt(n-1)*sqr(sigmaX));
tb:=abs(b/sigmaB);
tab[k,9]:=ta;
tab[k,10]:=tb;
end;
PROCEDURE ocenka;
LABEL 18,19,20,21,22,23,24,25,26;
VAR v,yv:real;
begin
v:=0;
clrscr;
{TextColor(4);}
writeln(' РАСЧЕТЫ ДЛЯ ФАКТОРА N ',O:3);
18: {TextColor(1); }
writeln(' ВЫБЕРИТЕ НАИЛУЧШУЮ МОДЕЛЬ ');
writeln;
writeln('Код Показатели');
write('мод. e sigmay dispF ym dispP nu z F ');
writeln(' ta tb tc ');
for i:=1 to 5 do
begin
write(i:2);
for j:=1 to 11 do
begin
if (j=11) and (i<5)then
begin
write(' ');
goto 20;
end;
write(tab[i,j]:7:1);
end;
20: writeln;
end;
writeln;
19: write(' Введите код выбранной модели ');
readln(k);
write(' Введите значение " x " для планового года ');readln(v);
writeln;
yv:=0;
if k=1 then goto 21;
if k=2 then goto 22;
if k=3 then goto 23;
if k=4 then goto 24;
if k=5 then goto 25;
writeln('Вы неправильно ввели код.');
goto 19;
21: yv:=kof[1,1] + kof[2,1]*v;
writeln(' Модель 1 y=',kof[1,1]:5:2,' + ',kof[2,1]:5:2,'* x');
write(f1,' y=',kof[1,1]:7:2,' + ',kof[2,1]:6:2,'* x');
writeln(f1,yv:10:2);
write(f2,yv:7:2);
goto 26; 16
22: yv:=kof[1,2]*exp(kof[2,2]*ln(v));
writeln(' Модель 2 y=',kof[1,2]:5:2,'*exp(',kof[2,2]:5:2,'*x)');
write(f1,' y=',kof[1,2]:7:2,'*exp(',kof[2,2]:7:2,'*x)');
writeln(f1,yv:9:2);
write(f2,yv:7:2);
goto 26;
23: yv:=kof[1,3]*exp(v*ln(kof[2,3]));
writeln(' Модель 3 y=',kof[1,3]:5:2,'*exp(x*ln(',kof[2,3]:5:2,')');
write(f1,' y=',kof[1,3]:7:2,'*exp(x*ln(',kof[2,3]:7:2,')');
writeln(f1,yv:9:2);
write(f2,yv:7:2);
goto 26;
24: yv:=kof[1,4]*exp(kof[2,4]*v);
writeln(' Модель 4 y=',kof[1,4]:5:2,'*exp(',kof[2,4]:5:2,'*x)');
write(f1,' y=',kof[1,4]:7:2,'*exp(',kof[2,4]:7:2,'*x)');
writeln(f1,yv:9:2);
write(f2,yv:7:2);
goto 26;
25: yv:=kof[1,5] + kof[2,5]*v + kof[3,5]*sqr(v);
write(' Модель 5 y=',kof[1,5]:5:2,' + ');
writeln(kof[2,5]:5:2,'*x + ',kof[3,5]:5:2,'*SQR(x)');
write(f1,' y=',kof[1,5]:7:2,' + ');
write(f1,kof[2,5]:7:2,'*x+',kof[3,5]:7:2,'*SQR(x)');
writeln(f1,yv:9:2);
write(f2,yv:7:2);
26: writeln;
TextColor(4);
writeln(' П Р О Г Н О З ');
writeln;
TextColor(1);
writeln(' x(план)=',v:5:2,' y(план)=',yv:5:2);
writeln;
write(' Точечная оценка прогноза " y " ');
writeln(yv:5:2);writeln;
end;
PROCEDURE pechat;
Label 15;
Var e1:real;
Begin
writeln(' y(факт) y(расч) y(откл) y(откл) %');
for i:=1 to n do
begin
write(y[i]:7:2);
write(yr[i]:10:2);
write(yo[i]:10:2);
e1:=Abs(y[i]-yr[i])/y[i]*100/n;
write(e1:10:2);
writeln;
end;
GotoXY(50,2);
writeln('Средняя относительная');
GotoXY(50,3);
writeln(' ошибка аппроксимации');
GotoXY(50,4);
writeln(' е=',e:5:2,'%');
GotoXY(50,5);
writeln('Среднее квадратическое');
GotoXY(50,6);
write('отклонение - ');writeln(sigmay:9:2);
GotoXY(50,8);
write('Дисперсия - ');writeln(dispF:9:2);
GotoXY(50,10);
write('Полная дисперсия -');writeln(dispP:5:2);
GotoXY(50,12);
writeln('Математическое ожидание');
GotoXY(50,13);
write('показателя y - ');writeln(ym:5:2);
GotoXY(1,15);
writeln(' Показатель оценки надежности модели nu ',nu:8:2);
writeln(' Z-критерий Фишера ',z:9:2);
15: writeln(' F - критерий Фишера ',w:9:2);
writeln(' Показатели оценки значимости расчетных коэффициентов:');
write(' Коэффициент " а " t=');writeln(ta:5:2);
write(' Коэффициент " b " t=');writeln(tb:5:2);
if k=5 then
writeln(' Коэффициент " с " t=',tc:5:2,' ');
end;
Begin
TextBackGround(7);
clrscr;
n:=0;
Assign(f,'a:\razd_5\prog2d.rez');
reset(f);
readln(f,m);
writeln(m:5);
readln(f,n);
writeln(n:5);
Assign(f1,'a:\razd_5\prog3.rez');
Assign(f2,'a:\razd_5\prog4d.rez');
append(f2);
rewrite(f1);
writeln(f1,' N ФАКТОРА(П/П) ВИД ФУНКЦИИ ЗНАЧЕНИЯ (ПЛАНИРУЕМЫЕ)');
writeln(f1);
O:=1;
12: clrscr;
TextColor(4);
if O=m+1 then goto 8;
writeln(' РАСЧЕТЫ ДЛЯ ФАКТОРА N ',O:2);
write(f1,O:2);
9: readln(f,slovo[O]);
TextColor(1);
writeln(' ',slovo[O]);
i:=0;
write(' ');
for i:=1 to n do
begin
y[i]:=0;
read(f,y[i]);
write(y[i]:5:0);
end;
writeln;
readln(f);
readln(f,slovo[O+1]);
writeln(' ',slovo[O+1]);
write(' ');
for i:=1 to n do
begin
read(f,x[i]);
write(x[i]:5:0);
end;
readln(f);
writeln;
Sx:=0;Sy:=0;Sxy:=0;Sxx:=0;Sx3:=0;Sx4:=0;Sxxy:=0;
Slnx:=0;Slny:=0;Slnxy:=0;Slnxx:=0;Sxlny:=0;
for i:=1 to n do
begin
Sx:=Sx + x[i];
Sy:=Sy + y[i];
Sxy:=Sxy + x[i]*y[i];
Sxx:=Sxx + x[i]*x[i];
Sx3:=Sx3 + x[i]*x[i]*x[i];
Sx4:=Sx4 + x[i]*x[i]*x[i]*x[i];
Sxxy:=Sxxy + y[i]*x[i]*x[i];
Slnx:=Slnx + ln(x[i])/ln(10); 17
Slny:=Slny + ln(y[i])/ln(10);
Slnxy:=Slnxy +( ln(x[i])/ln(10))*(ln(y[i])/ln(10));
Slnxx:=Slnxx + (ln(x[i])/ln(10))*(ln(x[i])/ln(10));
Sxlny:=Sxlny + x[i]*(ln(y[i])/ln(10));
end;
writeln;
TextColor(4);
writeln(' МЕНЮ');
TextColor(1);
writeln(' Вид функции Код');writeln;
writeln(' y = a + b*x[i] 1');
writeln(' y = a*exp(b*ln(x[i])) 2');
writeln(' y = a*exp(x[i]*ln(b)) 3');
writeln(' y = a*exp(b*x[i]) 4');
writeln(' y = a + b*x[i] + c*SQR(x[i]) 5');writeln;
writeln(' Окончание работы 0');writeln;
0: k:=0;write(' Введите код ');readln(k);writeln;
clrscr;
TextColor(4);
writeln(' РАСЧЕТЫ ДЛЯ ФАКТОРА N ',O:2);
11: TextColor(1);
a:=0;b:=0;c:=0;d1:=0;d2:=0;d3:=0;p:=0;
if k=1 then goto 1;
if k=2 then goto 2;
if k=3 then goto 3;
if k=4 then goto 4;
if k=5 then goto 5;
if k=0 then goto 7;
writeln('Вы неправильно ввели код.');goto 0;
1: b:=(Sy*Sx - n*Sxy)/(Sx*Sx - n*Sxx);
a:=(Sy - b*Sx)/n;
p:=2;
writeln(' Модель 1 y= ',a:5:2,'+',b:5:2,'* x[i]');
kof[1,1]:=a;
kof[2,1]:=b;
kof[3,1]:=0;
goto 6;
2: b:=(Slny*Slnx - n*Slnxy)/(Slnx*Slnx - n*Slnxx);
a:=exp(ln(10)*(Slny - b*Slnx)/n);
p:=2;
writeln(' Модель 2 y= ',a:5:2,'*exp(',b:5:2,'*x[i])');
kof[1,2]:=a;
kof[2,2]:=b;
kof[3,2]:=0;
goto 6;
3: b:=exp(ln(10)*(Slny*Sx - n*Sxlny)/(Sx*Sx - n*Sxx));
a:=exp(ln(10)*(Slny - ln(b)*0.43429*Sx)/n);
p:=2;
writeln(' Модель 3 y= ',a:5:2,'*exp(x[i]*ln(',b:5:2,')');
kof[1,3]:=a;
kof[2,3]:=b;
kof[3,3]:=0;
goto 6;
4: b:=(Slny*Sx - n*Sxlny)/(Sx*Sx - n*Sxx);
a:=exp(ln(10)*(Slny - b*0.43429*Sx)/n);
p:=2;
writeln(' Модель 4 y= ',a:5:2,'*exp(',b:5:2,'*x[i])');
kof[1,4]:=a;
kof[2,4]:=b;
kof[3,4]:=0;
goto 6;
5: d1:=n*Sx3 - Sx*Sxx;
d2:=n*Sxx - Sx*Sy;
d3:=(n*Sxxy-Sy*Sxx+d1*(Sx*Sy-n*Sxy)/d2);
c:=d3/(n*Sx4 - Sxx*Sxx - (d1*d1)/d2);
b:=(n*Sxy - Sx*Sy - c*d1)/d2;
a:=(Sy - Sx*b - Sxx*c)/n;
p:=3;
writeln(' Модель 5 y=',a:5:2,'+',b:5:2,'*x[i]+',c:5:2,'*SQR(x[i])');
kof[1,5]:=a;
kof[2,5]:=b;
kof[3,5]:=c;
goto 6;
6: writeln;
analis;
pechat;
writeln;
goto 0;
7: writeln;
write(' Вы хотите выбрать модель и сделать прогноз(y/n)?');readln(q);
if q='y' then
begin
k:=0;
ocenka;
end;
write(' Вы будете проводить расчеты по остальным линиям(y/n)?');
readln(q);
if q='n' then goto 8;
O:=O+1;
goto 12;
8: writeln(f2);
close(f2);
close(f1);
close(f);
end.
18
Файл исходных данных :
2
15
Вектор Y
56.00 63.00 66.00 75.00 81.00 88.00 94.00 105.00 111.00 123.00 132.00 144.00 155.00 167.00 175.00
Вектор X
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Вектор Y
32.00 35.00 48.00 41.00 54.00 57.00 61.00 64.00 77.00 71.00 83.00 89.00 92.00 97.00 103.00
Вектор X
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Файл результатов :
N ФАКТОРА(П/П) ВИД ФУНКЦИИ ЗНАЧЕНИЯ (ПЛАНИРУЕМЫЕ)
1 y= 53.11*exp(x*ln( 1.09) 197.74
2 y= 26.59 + 5.04* x 107.28
Получили прогнозные величины факторов на плановый 16-ый год.
19