Modelul de regresie simplă
pentru calculul coeficienților a și b se folosesc formulele
subprogramele de calcul pentru coeficienții a și b sunt următoarele:
SUMVEC - sumă elemente ale unui vector S=X(1)+X(2)+....+X(N);
PATRAT - ridicare la pătrat a elementelor unui vector Z(I)=X(I)*X(I);
PRODEL - calcul produse elemente ale unui vector Z(I)=X(I)*Y(I);
COEF - calculează coeficineții A și B după formulele de mai sus.
SUBROUTINE SUMVEC(X,N,S)
S=0.
DO 10 I=1,N
S=S+X(I)
10 CONTINUE
RETURN
END
SUBROUTINE PATRAT(X,N,S2)
S2=0.
DO 10 I=1,N
S2=S2+X(I)*X(I)
10 CONTINUE
RETURN
END
SUBROUTINE PRODEL(X,Y,Z,N)
DO 10 I=1,N
Z(I)=X(I)*Y(I)
10 CONTINUE
RETURN
END
SUBROUTINE COEF(X,Y,N,A,B,IK)
IK=0
IF(N.LE.0) GO TO 10
AN=N
IK=1
CALL PRODEL(X,Y,XY,N)
CALL SUMVEC(X,N,SX)
CALL SUMVEC(XY,N,SXY)
CALL SUMVEC(Y,N,SY)
CALL PATRAT(X,XN,SXX)
A=(AN*SXY-SX*SY)/(AN*SXX-SX*SX)
B=(SY-A*SX)/AN
10 CONTINUE
RETURN
END
Variabila IK este 0 dacă nu se calculează coeficienții că seriile de date sunt vide și IK=1 dacă acești coeficienți se calculează. Subprogramul COEF() se optimizează și dacă se elimină puzderia de apeluri de subprograme, dar devine mai mărișor și cu instrucțiuni ceva mai regrupate după cum urmează:
SUBROUTINE COEF(X,Y,N,A,B,IK)
IK=0
IF(N.LE.0) GO TO 20
AN=N
IK=1
SX=0.
SY=0.
SXX=0.
SXY=0.
DO 10 I=1,N
SX=SX+X(I)
SY=SY+Y(I)
SXX=SXX+X(I)*X(I)
SXY=SXY+X(I)*Y(I)
10 CONTINUE
A=(AN*SXY-SX*SY)/(AN*SXX-SX*SX)
B=(SY-A*SX)/AN
20 CONTINUE
RETURN
END
Dacă subprogramul ar fi scris în limbajul C++ cu siguranță că inițializările s-ar fi scris SX=SY=SXX=SXY=0.; ceea ce ar fi fost cu mult mai drăguț. Coeficienții ecuației de regresie simplă se calculează fie apelând tot felul de alte subprograme simple, fie scriind un subprogram ce include toate calculele. Trebuie ales un echilibru între a apela subprograme și a avea redundanță în program prin nereutilizare de componente de bibliotecă. Programatorul e suveran în programul pe care-l scrie și el alege dacă vrea să fie genial sau penibil, riscuș fiind în ambele cazuri 50% și 50%.
(29 decembrie 2017)
No comments:
Post a Comment