1
C @(#)prc.for 19.1 (ES0-DMD) 02/25/03 14:29:02
2
C===========================================================================
3
C Copyright (C) 1995 European Southern Observatory (ESO)
5
C This program is free software; you can redistribute it and/or
6
C modify it under the terms of the GNU General Public License as
7
C published by the Free Software Foundation; either version 2 of
8
C the License, or (at your option) any later version.
10
C This program is distributed in the hope that it will be useful,
11
C but WITHOUT ANY WARRANTY; without even the implied warranty of
12
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
C GNU General Public License for more details.
15
C You should have received a copy of the GNU General Public
16
C License along with this program; if not, write to the Free
17
C Software Foundation, Inc., 675 Massachusetss Ave, Cambridge,
20
C Corresponding concerning ESO-MIDAS should be addressed as follows:
21
C Internet e-mail: midas@eso.org
22
C Postal address: European Southern Observatory
23
C Data Management Division
24
C Karl-Schwarzschild-Strasse 2
25
C D 85748 Garching bei Muenchen
27
C===========================================================================
30
CC *STATIS* : STANDARDIZATION OF THE OBSERVATIONS AND
31
CC CALCULATION OF SOME STATISTICS
33
SUBROUTINE STATIS(X,Y,XMED,XMAD,RESDU,WEIGHTS,AW,
34
1 NMVAL,C,H,JNDVC,NSTOP,NVAR,NVAD,NVSB,NCAS,JCST,JPRT,
35
1 NDXX,NDXY,LUB,NMXV,PREC,LAB)
37
INCLUDE 'MID_REL_INCL:implicit.inc'
39
INTEGER J,JCST,JNC,JPRT,JS,JSM,JSPA,JSPB,JSPP,LUB
40
INTEGER NCAS,NDXX,NDXY,NMXV,NVAD,NSTOP,NVAR,NVSB
41
REAL AL,AMDAN,DIAG,SPEAR,PEARC,PREC
43
REAL X(NDXX,NDXY),Y(NDXY),XMED(NDXX),XMAD(NDXX)
44
REAL RESDU(NDXY),WEIGHTS(NDXY),AW(NDXY),C(NMXV,NDXX)
45
INTEGER NMVAL(NDXY),JNDVC(NDXX)
47
C DIMENSION X(NDXX,NDXY),Y(NDXY),XMED(NDXX),XMAD(NDXX)
48
C DIMENSION RESDU(NDXY),WEIGHTS(NDXY),AW(NDXY),NMVAL(NDXY)
49
C DIMENSION C(NMXV,NDXX),JNDVC(NDXX)
51
DOUBLE PRECISION H(NMXV,NDXX)
52
CHARACTER*10 LAB(NDXX)
53
CC-----IN THIS SUBROUTINE THE VECTOR "RESDU" WILL BE USED AS A
56
IF (JCST.NE.0) GOTO 60
60
10 RESDU(JNC)=ABS(X(J,JNC))
61
XMAD(J)=AMDAN(AW,NDXY,RESDU,NCAS)*1.4826
62
IF (ABS(XMAD(J)).GT.PREC) GOTO 30
65
20 XMAD(J)=XMAD(J)+RESDU(JNC)
66
XMAD(J)=(XMAD(J)/AL)*1.2533
67
IF (ABS(XMAD(J)).GT.PREC) GOTO 30
68
WRITE(LUB,8000) LAB(J)
72
X(J,JNC)=X(J,JNC)/XMAD(J)
78
IF(J.EQ.NVAR) GOTO 120
80
70 RESDU(JNC)=X(J,JNC)
81
XMED(J)=AMDAN(AW,NDXY,RESDU,NCAS)
83
80 RESDU(JNC)=ABS(RESDU(JNC)-XMED(J))
84
XMAD(J)=AMDAN(AW,NDXY,RESDU,NCAS)*1.4826
85
IF (ABS(XMAD(J)).GT.PREC) GOTO 100
88
90 XMAD(J)=XMAD(J)+RESDU(JNC)
89
XMAD(J)=(XMAD(J)/AL)*1.2533
90
IF (ABS(XMAD(J)).GT.PREC) GOTO 100
91
WRITE(LUB,8000) LAB(J)
95
X(J,JNC)=(X(J,JNC)-XMED(J))/XMAD(J)
100
IF (JCST.EQ.1) WRITE(LUB,8020) (LAB(J),J=1,NVSB),LAB(NVAD)
101
IF (JCST.EQ.0) WRITE(LUB,8020) (LAB(J),J=1,NVAD)
102
IF ((NVAD.GT.6.AND.JCST.EQ.0).OR.(NVAD.GT.7.AND.JCST.EQ.1))
104
IF (JCST.EQ.0) WRITE(LUB,8030)(XMED(J),J=1,NVAD)
105
IF (JCST.EQ.1) WRITE(LUB,8030)(XMED(J),J=1,NVSB),XMED(NVAD)
107
130 WRITE(LUB,8030)(XMED(J),J=1,6)
108
IF (JCST.EQ.0) WRITE(LUB,8040)(XMED(J),J=7,NVAD)
109
IF (JCST.EQ.1.AND.NVSB.GE.7)
110
1 WRITE(LUB,8040)(XMED(J),J=7,NVSB),XMED(NVAD)
111
IF (JCST.EQ.1.AND.NVSB.LT.7) WRITE(LUB,8040) XMED(NVAD)
114
IF (JCST.EQ.1) WRITE(LUB,8020) (LAB(J),J=1,NVSB),LAB(NVAD)
115
IF (JCST.EQ.0) WRITE(LUB,8020) (LAB(J),J=1,NVAD)
116
150 IF((NVAD.GT.6.AND.JCST.EQ.0).OR.(NVAD.GT.7.AND.JCST.EQ.1))
118
IF (JCST.EQ.0) WRITE(LUB,8030)(XMAD(J),J=1,NVAD)
119
IF (JCST.EQ.1) WRITE(LUB,8030)(XMAD(J),J=1,NVSB),XMAD(NVAD)
121
160 WRITE(LUB,8030)(XMAD(J),J=1,6)
122
IF (JCST.EQ.0) WRITE(LUB,8040)(XMAD(J),J=7,NVAD)
123
IF (JCST.EQ.1.AND.NVSB.GE.7)
124
1 WRITE(LUB,8040)(XMAD(J),J=7,NVSB),XMAD(NVAD)
125
IF (JCST.EQ.1.AND.NVSB.LT.7) WRITE(LUB,8040) XMAD(NVAD)
126
170 IF(JCST.NE.0) XMAD(NVAR)=1.0
127
IF (JPRT.LT.2) GOTO 200
129
IF (JCST.EQ.1) WRITE(LUB,8020) (LAB(J),J=1,NVSB),LAB(NVAD)
130
IF (JCST.EQ.0) WRITE(LUB,8020) (LAB(J),J=1,NVAD)
132
IF((NVAD.GT.6.AND.JCST.EQ.0).OR.(NVAD.GT.7.AND.JCST.EQ.1))
134
IF (JCST.EQ.1) WRITE(LUB,8070) NMVAL(JNC),(X(J,JNC),J=1,NVSB),
136
IF (JCST.EQ.0) WRITE(LUB,8070) NMVAL(JNC),(X(J,JNC),J=1,NVAD)
138
180 WRITE(LUB,8070) NMVAL(JNC),(X(J,JNC),J=1,6)
139
IF (JCST.EQ.1.AND.NVSB.GE.7)
140
1 WRITE(LUB,8040) (X(J,JNC),J=7,NVSB),X(NVAD,JNC)
141
IF (JCST.EQ.1.AND.NVSB.LT.7) WRITE(LUB,8040) X(NVAD,JNC)
142
IF (JCST.EQ.0) WRITE(LUB,8040) (X(J,JNC),J=7,NVAD)
144
200 IF(JPRT.EQ.0) GOTO 260
146
IF(JSPA.EQ.NVAR.AND.JCST.EQ.1) GOTO 220
149
IF(JSPB.EQ.NVAR.AND.JCST.EQ.1) GOTO 210
151
CALL CORR(X,JSPB,JSPA,NCAS,NVSB,JCST,AW,Y,RESDU,NDXX,NDXY,
157
WRITE(LUB,8080) LAB(NVAD)
159
WRITE(LUB,8090) LAB(1),DIAG
162
IF(JCST.EQ.1.AND.JSPP.EQ.NVAR) GOTO 230
163
WRITE(LUB,8090) LAB(JSPP),(H(JSPA,JSPB),JSPB=1,JSPA),DIAG
165
IF(JCST.EQ.1) WRITE(LUB,8090) LAB(NVAD),(H(JSPA,JSPB),
167
IF (JCST.EQ.0) WRITE(LUB,8090) LAB(NVAD),(H(JSPA,JSPB),
171
WRITE(LUB,8100) LAB(NVAD)
172
WRITE(LUB,8090) LAB(1),DIAG
175
IF(JCST.EQ.1.AND.JSPP.EQ.NVAR) GOTO 250
176
WRITE(LUB,8090) LAB(JSPP),(C(JSPA,JSPB),JSPB=1,JSPA),DIAG
178
IF(JCST.EQ.1) WRITE(LUB,8090) LAB(NVAD),(C(JSPA,JSPB),
180
IF (JCST.EQ.0) WRITE(LUB,8090) LAB(NVAD),(C(JSPA,JSPB),
182
260 DO 270 JNC=1,NCAS
183
CC-----MEANWHILE, INITIALIZATION OF THE WEIGHTS
187
8000 FORMAT(/' VARIABLE WITH LABEL ',A10,' IS CONSTANT OVER'/
188
1 ' ALL OBSERVATIONS HENCE THE PROGRAM CANNOT RUN.',
189
1 /' PLEASE REPEAT THE ANALYSIS WITHOUT THIS VARIABLE.'/)
190
8010 FORMAT(//' MEDIANS = '/)
191
8015 FORMAT(//' DISPERSION OF ABSOLUTE VALUES = '/)
192
8020 FORMAT(7X,6(A10,1X)/15X,5(A10,1X))
193
8030 FORMAT(7X,6(F10.4,1X))
194
8040 FORMAT(15X,5(F10.4,1X))
195
8050 FORMAT(//' DISPERSIONS = '/)
196
8060 FORMAT(//' THE STANDARDIZED OBSERVATIONS ARE:'/)
197
8070 FORMAT(I5,2X,6(F10.4,1X))
198
8080 FORMAT(//' PEARSON CORRELATION COEFFICIENTS',
199
1 ' BETWEEN THE VARIABLES'/1X,'( ',
200
1 A10,' IS THE RESPONSE VARIABLE)'/)
201
8090 FORMAT(1X,A10,(2X,11F6.2)/)
202
8100 FORMAT(//' SPEARMAN RANK CORRELATION COEFFICIENTS',
203
1 ' BETWEEN THE VARIABLES'/1X,'( ',A10,
204
1 ' IS THE RESPONSE VARIABLE)'/ )
208
CC *CORR* : CALCULATES THE SPEARMAN RANK CORRELATION COEFFICIENT
209
CC BETWEEN VARIABLES JSPA AND JSPB.
210
SUBROUTINE CORR(X,JSPB,JSPA,NCAS,NVSB,JCST,AW,Y,RESDU,NDXX,NDXY,
213
C INCLUDE 'MID_REL_INCL:implicit.inc'
214
C DIMENSION X(NDXX,NDXY),AW(NDXY),Y(NDXY),RESDU(NDXY)
215
INTEGER JCST,JSPA,JSPB,JTA,K,KK,NCM,NDX,NDXX,NDXY,NCAS
216
INTEGER NJ,NJA,NJAP,NJB,NJP,NTWE,NVSB
217
REAL AL,CVVAR,PEARC,PREC,SPEAR,SUMA,SUMB,STDA,STDB,TA,TB,W
219
REAL X(NDXX,NDXY),AW(NDXY),Y(NDXY),RESDU(NDXY)
222
CC-----IN THIS SUBROUTINE THE VECTOR "RESDU" IS USED AS A WORKING
223
CC-----VECTOR FOR CALCULATING THE CORRELATION MATRICES
231
IF (((JSPB-JSPA).EQ.1).OR.(JCST.EQ.1.AND.JSPA.EQ.NVSB))
244
IF(AW(NJB).GE.AW(NJA)) GOTO 30
247
IF(NJA.EQ.NJ) GOTO 20
257
IF(NTWE.EQ.0) Y(NDX)=NJ
258
IF(NTWE.NE.0) AW(NDX)=NJ
263
IF(NTWE.EQ.0) TB=Y(NJA)
264
IF(NTWE.NE.0) TB=AW(NJA)
267
IF(NTWE.EQ.0.AND.(X(JSPA,NJA).NE.X(JSPA,NJAP))) GOTO 70
268
IF(NTWE.NE.0.AND.(X(JSPB,NJA).NE.X(JSPB,NJAP))) GOTO 70
270
IF(NTWE.EQ.0) TB=TB+Y(NJAP)
271
IF(NTWE.NE.0) TB=TB+AW(NJAP)
273
IF (NJ.EQ.NCAS) GOTO 70
275
70 IF(TA.EQ.1.0) GOTO 100
280
IF(NTWE.EQ.0) Y(KK)=TB/TA
281
IF(NTWE.NE.0) AW(KK)=TB/TA
284
IF (NJ.LT.NCAS) GOTO 55
285
IF(NTWE.NE.0) GOTO 150
297
SPEAR=SPEAR+(Y(NJ)-AW(NJ))**2
298
STDA=STDA+(X(JSPA,NJ)-SUMA)**2
299
STDB=STDB+(X(JSPB,NJ)-SUMB)**2
300
CVVAR=CVVAR+(X(JSPA,NJ)-SUMA)*(X(JSPB,NJ)-SUMB)
302
SPEAR=1.0-6.0*SPEAR/(AL*(AL**2-1.0))
304
IF(ABS(STDA).GT.PREC) PEARC=CVVAR/(STDA)
305
IF(ABS(STDA).LE.PREC) PEARC=99.99
309
CC *PULL* : SEARCHES THE KTH VALUE IN A VECTOR
311
FUNCTION PULL(AW,NDXY,AA,NCAS,K)
313
C INCLUDE 'MID_REL_INCL:implicit.inc'
314
C DIMENSION AA(NCAS),AW(NDXY)
316
INTEGER J,JNC,K,L,LR,NCAS,NDXY
319
REAL AA(NCAS),AW(NDXY)
328
20 IF(L.GE.LR) GOTO 90
332
30 IF(JNC.GT.J) GOTO 80
333
40 IF(AW(JNC).GE.AX) GOTO 50
336
50 IF(AW(J).LE.AX) GOTO 60
339
60 IF(JNC.GT.J) GOTO 70
353
CC *AMDAN* : CALCULATES THE MEDIAN OF A VECTOR
356
FUNCTION AMDAN(AW,NDXY,AA,NCAS)
358
C INCLUDE 'MID_REL_INCL:implicit.inc'
359
C DIMENSION AA(NCAS),AW(NDXY)
361
INTEGER JNDL,NCAS,NDXY
364
REAL AA(NCAS),AW(NDXY)
368
IF (MOD(NCAS,2).EQ.0) THEN
369
AMDAN= (PULL(AW,NDXY,AA,NCAS,JNDL)+
370
1 PULL(AW,NDXY,AA,NCAS,JNDL+1))/2.0
372
AMDAN= PULL(AW,NDXY,AA,NCAS,JNDL+1)
377
CC *RSQU* : CALCULATES COEFFICIENT OF DETERMINATION AND F-VALUE
380
FUNCTION RSQU(NCAS,NVAD,JCST,Y,NDXY,SSE,FVALUE,PREC,
381
1 XMAD,XMED,NDXX,WEIGHTS,NNUL)
383
C INCLUDE 'MID_REL_INCL:implicit.inc'
384
C DIMENSION Y(NDXY),XMAD(NDXX),XMED(NDXX),WEIGHTS(NDXY)
386
INTEGER JCST,JNC,NCAS,NDXX,NDXY,NNUL,NVAD
387
REAL AL,DF1,DF2,FVALUE,PREC,RSQU,RYM,SSE,SSEL,SST
389
REAL Y(NDXY),XMAD(NDXX),XMED(NDXX),WEIGHTS(NDXY)
394
IF (JCST.EQ.0) GOTO 20
396
10 RYM=(Y(JNC)*XMAD(NVAD)+XMED(NVAD))*WEIGHTS(JNC)+RYM
401
30 SST=SST+(((Y(JNC)*XMAD(NVAD)+XMED(NVAD))-RYM)**2)*WEIGHTS(JNC)
404
IF(SST.LT.PREC)SST=PREC
406
IF (RSQU.LT.0.0) RSQU=0.0
407
IF (RSQU.GT.1.0) RSQU=1.0
409
IF(SSEL.LT.PREC)SSEL=PREC
410
FVALUE=((SST-SSEL)/DF1)/(SSEL/DF2)
411
IF(FVALUE.LT.(0.0))FVALUE=0.0
415
CC *RESTT* : CALCULATES FOR ALL JNC (JNC=1,..,NCAS) THE RESIDUAL
416
CC Y(JNC)-SUM (GESCF(J)*X(J,JNC)), FOR J=1,..,LTSTE.
418
SUBROUTINE RESTT(GESCF,JABS,JTR,LTSTE,NCAS,NVAD,NZWE,
419
1 X,Y,RESDU,WEIGHTS,XMED,XMAD,NDXX,NDXY,NOPT,SCAL,QUAN,PREC)
421
C INCLUDE 'MID_REL_INCL:implicit.inc'
422
C DIMENSION GESCF(LTSTE),X(NDXX,NDXY),Y(NDXY),WEIGHTS(NDXY)
423
C DIMENSION RESDU(NDXY),XMED(NDXX),XMAD(NDXX)
425
INTEGER J,JABS,JNC,JTR,LTSTE,NCAS,NDXX,NDXY,NOPT,NVAD,NZWE
426
REAL ANVAR,AVLQS,PREC,QUAN,SCAL,WSC
428
REAL GESCF(LTSTE),X(NDXX,NDXY),Y(NDXY),WEIGHTS(NDXY)
429
REAL RESDU(NDXY),XMED(NDXX),XMAD(NDXX)
433
CC-----JTR = 1, THEN CALCULATE THE RESIDUALS FOR THE STANDARDIZED OBSERVATIONS
435
CC-----JABS = 1, CALCULATE THE ABSOLUTE RESIDUALS
437
CC-----NOPT = 1, CALCULATE THE LMS FINAL SCALE AND THE RESULTING WEIGHTS
447
RESDU(JNC)=Y(JNC)*XMAD(NVAD)+XMED(NVAD)
451
RESDU(JNC)=RESDU(JNC)-X(J,JNC)*GESCF(J)
453
RESDU(JNC)=RESDU(JNC)-((X(J,JNC)*XMAD(J)+XMED(J))*GESCF(J))
456
IF (JABS.EQ.1.AND.NOPT.NE.1) RESDU(JNC)=ABS(RESDU(JNC))
457
IF (ABS(RESDU(JNC)).LT.PREC) NZWE=NZWE+1
458
IF (NOPT.EQ.0) GOTO 10
459
IF (ABS(RESDU(JNC)).LE.(2.5*QUAN)) THEN
465
SCAL=SCAL+(RESDU(JNC)*RESDU(JNC))*WSC
467
C write(6,*) 'In PRC/RESTT: NOPT = ',NOPT
468
IF (NOPT.EQ.0) RETURN
469
SCAL=SQRT(SCAL/(AVLQS-ANVAR)) + PREC
472
IF (ABS(RESDU(JNC)).LE.(2.5*SCAL)) THEN
478
C write(6,*) 'In PRC: ',jnc,resdu(jnc),scal,nzwe,weights(jnc)