Оценивание линейных регрессионных моделей в условиях гетероскедастичности возмущений., страница 4

for (int j=0;j<m;j++) y1[i]=y1[i]+a[i][j]*t[j];

}

}

/****** teta optimition */

void teta_opt1(float a[n][m],float y[n],float u[n],float t[m])

{ float matr[m][m];

float s;

int i,j;

TXvX(a,u,matr);   //matr=aTa

TXvy(a,y,u,t);    //t=aTy

// llT

matr[0][0]=sqrt(matr[0][0]);

for (i=1;i<m;i++)

{ for (j=0;j<i;j++)

{ s=0;

for (int k=0;k<j;k++) s=s+matr[i][k]*matr[j][k];

matr[i][j]=(matr[i][j]-s)/matr[j][j];

}

s=0;

for (int k=0;k<i;k++) s=s+matr[i][k]*matr[i][k];

matr[i][i]=sqrt(matr[i][i]-s);

}

// aXteta^=f

t[0]=t[0]/matr[0][0];

for (i=1;i<m;i++)

{ for (j=i;j<m;j++) t[j]=t[j]-t[i-1]*matr[j][i-1];

t[i]=t[i]/matr[i][i];

}

t[m-1]=t[m-1]/matr[m-1][m-1];

for (i=m-2;i>=0;i--)

{ for (j=i;j>=0;j--) t[j]=t[j]-t[i+1]*matr[i+1][j];

t[i]=t[i]/matr[i][i];

}

return;

}

/**************************************/

void D_el(float y[n],float y1[n],float u1[n])

{int i;

float LR;

for(i=0;i<n;i++) u1[i]=(y[i]-y1[i])*(y[i]-y1[i])/n;

LR=0;

for(i=0;i<n;i++) LR=LR+log(u1[i]);

cout<<"LR = "<<LR<<"\n";

}

//____________________________________________________________//

void lab2(float a[n][m],float y[n],float u[n],float teta1[m],float y1[n])

{int i;

getera(y,u);

teta_opt1(a,y,u,teta1);

for(i=0;i<m;i++) cout<<teta[i]<<"    "<<teta1[i]<<"\n";

scal1(a,teta1,y1);

ofstream out3("y1.dat");

for(i=0;i<n;i++) out3<<y1<<"\n";

out3.close();

}

//___________________________________________//

void test1(float y[n],float y1[n])

{int i;    float z[n];

float s=0;

for(i=0;i<n;i++) s=s+(y[i]-y1[i])*(y[i]-y1[i]);

cout <<"||y-y1||:  "<<sqrt(s)<<"\n";

s=s/n;

cout <<"test1 sigma = "<<s<<"\n";

for(i=0;i<n;i++) z[i]=(y[i]-y1[i])*(y[i]-y1[i])/s;

ofstream out2("t1.dat");

for(i=0;i<n;i++) out2<<y[i]<<"   "<<y1[i]<<"    "<<z[i]<<"\n";

s=0;

for(i=0;i<n;i++) s=s+(abs(y[i])-z[i])*(abs(y[i])-z[i]);

cout <<"test1 ||y-z||  "<<sqrt(s)<<"\n";

cout <<"test1 RRS/2  "<<s/2<<"\n";

s=0;

for(i=0;i<n;i++) s=s+(y1[i]-z[i])*(y1[i]-z[i]);

cout <<"test1 ||y1-z||  "<<sqrt(s)<<"\n";

cout <<"test1 RRS/2  "<<s/2<<"\n";

}

//___________________________________________//

void test2(float y[n],float y1[n])

{int i,j,nc;

float rrs1,rrs2;

nc=n/3;

rrs1=0;

for(i=0;i<nc;i++) rrs1=rrs1+(y[i]-y1[i])*(y[i]-y1[i]);

rrs2=0;

for(i=2*nc;i<n;i++) rrs2=rrs2+(y[i]-y1[i])*(y[i]-y1[i]);

cout <<"test2 rrs1 ="<<rrs1<<"\n";

cout <<"test2 rrs2 ="<<rrs2<<"\n";

cout <<"test2 rrs1/rrs2 =  "<<rrs1/rrs2<<"\n";

cout <<"test2 rrs2/rrs1 =  "<<rrs2/rrs1<<"\n";

}

//////////////////////////////////////////////

main()

{ float y[n],x[n],u[n],u1[n],teta1[m],y1[n],eps[n];

float a[n][m];

int i,j,k;

float sg,sg1,s,sge;

clrscr();

matrix(a);

lab1(u,eps,y);

lab2(a,y,u,teta1,y1);

test1(y,y1);

test2(y,y1);

return 0;

}

Вывод