V. KESIMPULAN DAN SARAN
5.2 Saran
Manfaat model GAMMI tidak terbatas pada masalah pemuliaan tanaman. Model-model peluang pada tabel dua arah secara umum dapat kita jumpai pada masalah-masalah kesehatan (epidemiologi), riset pemasaran, ataupun pada bidang keteknikan. Penerapan model bilinier terampat ini diharapkan membuka peluang pengembangan lebih lanjut.
52
DAFTAR PUSTAKA
Aunuddin, 2005. Statistika: Rancangan dan Analisis. IPB Press, Bogor.
Bartlet, M. S. 1949. Fitting A Straitght Line When Both Variables Are Subject To Error. Biometrics, 5:207-212.
Box, G. E. P, Hunter, W. G, & Hunter J. S. 1978. Statistics for Experimenters: An Introduction to Design, Data Analysis, and Model Building. John Wiley & Sons, Inc. Canada.
Crossa, J. 1990. Statistical Analysis for Multilocation Trials. Advance in Agronomy, 44: 55-85.
Digby, P.G.N. & Kempton, R.A. 1987. Multivariate Analysis of Ecological
Communities. Chapman & Hall, London.
Falguerolles, de A, 1996. Generalized Linear-Bilinear Models. An Abstract. Society of Computational Economics. 2nd International Conference on Computing and Finance. Genewa, Switzerland, 26–28 June 1996. http://www.unige.ch/ce/ce96/defalgue/defalgue.htm. [14 Juli 2005]
Gabriel, K. R., 1998, Generalised Bilinear Regression. Biometrika. 85 (3):689- 700.
Greenacre, M. J. 1984. Theory and Apllications of Correspondence Analysis. Academic Press. London.
Jolliffe, I T. 1986. Principal Component Analysis. Springer-Verlag. New York Lawes Agricultural Trust, 2003. The Guide to GenStat® Release 7.1 Part 2:
Statistics. VSN International, Wilkinson House, Jordan Hill Road, Oxford, UK.
Mattjik A. A. & Sumertajaya I. M. 2002. Perancangan Percobaan dengan Aplikasi SAS dan MINITAB. 2nd Ed. IPB Press. Bogor.
Mattjik A. A., 2005. Interaksi Genotipe dan Lingkungan dalam Penyediaan Suumberdaya Unggul. Naskah Orasi Ilmiah Guru Besar Biometrika. Fakultas Matematika dan Ilmu Pengetahuan Alam Institut Pertanian Bogor. Bogor.
McCullagh, P. and Nelder, J. A. 1989. Generalized Linear Models. 2nd ed. Chapman and Hall, London.
Rawling, J.O. Pantula S. G. & Dicky D. A, 1998. Applied Refression Analysis: A Research Tools. 2nd Ed. Sringer-Verlag, New York.
Sumertajaya, I M. 1998. Perbandingan Model AMMI dan Regresi Linier untuk Menerangkan Pengaruh Interaksi Percobaan Lokasi Ganda. Tesis. Program Studi Statistika Sekolah Pascasarjana IPB, Bogor
Tengkano, W & Soehardjan, M, 1993. Jenis Hama Utama pada Berbagai Fase Pertumbuhan Tanaman Kedelai, dalam S. Somaatmadja et al (eds.) Kedelai. Pusat Penelitian dan Pengembangan Tanaman Pangan. Bogor Van Eeuwijk, F A, 1995. Multiplicative Interaction in Generalized Linear
Lampiran
Lampiran 1. Data pengamatan populasi hama daun kedelai pada umur 14 hari setelah tanam
Hama Daun Genotipe Ulangan
Bemissia Emproosca Agomyza Lamprosema Longitarsaus
IAC-100 1 0 2 1 1 0 2 1 2 2 1 2 3 1 2 4 0 2 4 0 1 2 0 3 Rataan IAC-100 0.5 1.75 2.25 0.5 1.75 IAC-80 1 4 5 2 3 4 2 2 3 1 2 3 3 2 2 1 1 2 4 4 1 0 1 4 Rataan IAC-80 3 2.75 1 1.75 3.25 W/80 1 3 6 2 1 3 2 3 4 1 3 2 3 2 3 1 2 2 4 6 3 1 2 1 Rataan W/80 3.5 4 1.25 2 2 Wilis 1 6 3 0 2 4 2 5 3 0 3 4 3 1 3 2 1 5 4 4 3 2 1 3 Rataan Wilis 4 3 1 1.75 4
Lampiran 2. Nilai lambda dugaan dan log-likelihood transformasi Box-Cox data populasi hama daun
lambda Box-Cox Likelihood 1 -0.99 -22.22 2 -0.44 -16.28 3 0.11 -12.77 4 0.66 -11.67 5 1.21 -12.57 6 1.76 -14.95 7 2.31 -18.37 8 2.86 -22.53 9 3.41 -27.25 10 3.96 -32.41 11 4.50 -37.90 12 5.05 -43.68 13 5.60 -49.68 14 6.15 -55.87 15 6.70 -62.23 16 7.25 -68.72 17 7.80 -75.32 18 8.35 -82.03 19 8.90 -88.83 20 9.45 -95.70 21 10.00 -102.64
56
Lampiran
Lampiran 3. Plot sisaan model AMMI 2 data populasi hama daun ternormalkan.
Standardized residuals
-1.5
2.0 -2.0
Half -Normal plot
0.0 0.5 1.0 1.5 -2.0 2.0 -1.0 0.0 1.0 2.0 0.00 0.5 0.25 -0.5 0.50 -1.5 0.75 Normal plot 1.00 -0.5 1.25 0.5 1.50 1.5 1.75 0 2 4 6 1.5 2.0 -0.5 1.5 1.5 1.0 0.5 0.0 0.0 -0.5 -2.0 -1.0 0.0 -1.5 2.0 -2.0 1 5 -1.5 1.0 -1.0 2.002.252.50 7 1.75 1.50 0.5 1.25 -1.0 1.00 0.75 Fitted values 3 1.0 S ta n d a rd iz e d r e s id u a ls S ta n d a rd iz e d r e s id u a ls az az
Lampiran 4. Nilai lambda dugaan dan log-likelihood transformasi Box-Cox data proporsi gabah isi
lambda Box-Cox Likelihood 1 -0.99 150.29 2 -0.44 151.70 3 0.11 152.99 4 0.66 154.16 5 1.21 155.21 6 1.76 156.16 7 2.31 157.01 8 2.86 157.75 9 3.41 158.41 10 3.96 158.97 11 4.50 159.45 12 5.05 159.85 13 5.60 160.18 14 6.15 160.43 15 6.70 160.61 16 7.25 160.73 17 7.80 160.79 18 8.35 160.78 19 8.90 160.73 20 9.45 160.61 21 10.00 160.45
Lampiran
Lampiran 5. Diagnostik sisaan AMMI data gabah isi ternormalkan
-2 Standardized residuals 3.0 2 2.0 1 1.0 0 0.0 -1 -2 -3 2.0 1.0 0.0 1 -1 0.8 -3 0.7 0.6 0.5 0.4 2 0.3 0 0.2 Normal plot 0.1 Fitted values 1.5 -2 0.5 2.5 0.5 20 15 0 10 -3 5 0 1 1.5 -2 3 2 2 -1 2.5 Half-Normal plot 1 0 -1 S ta n d a rd iz e d r e s id u a ls S ta n d a rd iz e d r e s id u a ls pz pz
Lampiran 6. Biplot AMMI1: KUI1 vs rataan proporsi gabah isi ternormalkan
0.3 0.4 0.5 0.6 0.7 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5
Gabah Isi Padi
KU I1 A B C D E F G H J K L M Jatibaru Maranu Maroangin Paritdalam Talang
58
Lampiran
Lampiran 7. Biplot AMMI1: KUI1 vs rataan populasi hama daun ternormalkan
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
-1 0 1
Populasi Hama Daun
KU I1 IAC-100 IAC-80 W/80 Wilis Bemissia Emproasca Agromyza Lamprosema Longitarsus
Lampiran 8. Karakteristik distribusi data hama daun
3.5 2.5 1.5 0.5 Variable: a Maximum 3rd Quartile Median 1st Quartile Minimum N Kurtosis Skewness Variance StDev Mean 4.00000 3.18750 2.00000 1.37500 0.50000 20 -1.05533 0.153511 1.28947 1.13555 2.25000
Descriptive Statistics
Lampiran 9. Contoh perintah GENSTAT untuk transformasi Box-Cox
YTRANSFORM [transform=powe;method=boxc;lower=- 0.99;upper=10]y=gbhisi;nbin=nY;\ save=bxc print bxc[1, 2, 3, 4]; variate Z calc Z=gbhisi**1.21
normtest [print=marg, critical]data=Z print Y, Z
Lampiran
Lampiran 10. Prosedur GAMMI pada GENSTAT 7 \next procedure
PROCEDURE 'GAMMI'
" Performs a generalized linear additive main effects and multiplicative interaction model analysis for row-by-COLUMN data; FAE 1/1/93"
" with compliments to scaffold RJOINT of PWL by PK 1/4/93" " all rights reserved by F.A. van Eeuwijk & L.C.P. Keizer" " CPRO-DLO Wageningen 30-MAY-1996 test version"
" Updated for full parameter names by LCPK 17/5/2005" " Updated for full model by AFHADI 21/8/2005"
" Other procedures used; RCHECK" OPTION \
'PRINT', "I: strings (model,summary,diagnostics,biplots,monitoring); output from procedure; default m,s,d,b"\
'DISTRIBUTION', "I:string (normal,poisson,binomial,gamma,
inversenormal);distribution for response;default n"\
'LINK', "I: string (canonical,identity,log,logit,reciprocal, power,squareroot,probit,complementaryloglog);
link function; default canonical"\
'EXPONENT', "I: scalar; exponent for power link; default -2"\ 'DISPERSION', "I: scalar; dispersion parameter; default * for DISTRIBUTION=n,g,i or 1 for DISTRIBUTION=p,b"\ 'WEIGHTS', "I: variate; holding the weights for each unit"\ 'AXES', "I: scalar; number of multiplicative axes to be used"\ 'MAINEFFECTS', "I: text; substract ROW and/or COLUMN main
effects before adding multiplicative terms"\ 'COVA_IMPL', "I: string; cova implemented before or after main effect or used for redundancy analysis"\
'TOLERANCE', "I: scalar; the convergence criterion; default 0.00001"\ 'SEED', "I: scalar; to initialize the COLUMN scores"\
'MAXCYCLE'; "I: scalar; maximum number of cycles; default 15"\ MODE =t,t,t,v,p,p,p,t,t,v,v,v;\ NVALUES =*,1,1,1,1,*,1,*,*,1,1,1;\ SET =n,y,y,y,n,n,y,y,y,y,y,y;\ VALUES =!t(MODEL,SUMMARY,DIAGNOSTICS,BIPLOTS,MONITORING),\ !t(NORMAL,POISSON,BINOMIAL,GAMMA,INVERSENORMAL),\ !t(CANONICAL,IDENTITY,LOGARITHM,LOGIT,RECIPROCAL,POWER,\ SQUAREROOT,PROBIT,COMPLEMENT),\ *,*,*,*,\ !t(ROW,COLUMN,BOTH,NONE),\ !t(BEFORE,AFTER,REDUNDANCY),\ *,*,*;\ DEFAULT =!t(MODEL,SUMMARY,DIAGNOSTICS,BIPLOTS),\ 'NORMAL','CANONICAL',-2,*,*,2,!t(BOTH),'AFTER',\ 0.00001,13132,15;\ LIST =y,(n)11 PARAMETER \
'Y', "I: variate; variate to be analysed; no default"\ 'NBINOMIAL', "I: variate; variate of binomial totals;
no default for DISTRIBUTION=b"\ 'ROW', "I: factor; the row factor; no default"\ 'COLUMN', "I: factor; the COLUMN factor; no default"\
'COVARIATES', "I: pointer of variates; associated with the row factor"\ 'COVATYPE',"I: pointer of ROW or COL dummies; covas are associated with"\ 'ROWPARAMS', "O: pointer; to store estimates of the ROW means"\
'COLPARAMS', "O: pointer; to store estimates of the COLUMN means"\ 'FITTEDVALUES', "O: variate; to store fitted values"\
'RESIDUALS', "O: variate; to store residuals"\
'DELRESIDUALS', "O: variate; to store deletion residuals"\
'COOK', "O: variate; to store modified Cook's statistics"\ 'LEVERAGE', "O: variate; to store leverage values"\
'WORKVARIATE', "O: variate; to store working variate"\ 'LINEARPREDICT',"O: variate; to store linear predictor"\
60
Lampiran
'BIPLOT'; "O: pointer; to store R&C+R+C biplots sigma scaled"\ SET =y,n,y,y,n,n,n,n,n,n,n,n,n,n,n,n;\
DECLARED =y,y,y,y,n,n,n,n,n,n,n,n,n,n,n,n;\ PRESENT =y,y,y,y,n,n,n,n,n,n,n,n,n,n,n,n;\
TYPE =2('VARIATE','FACTOR'),'POINTER','POINTER',\ 2('POINTER'),7('VARIATE'),'POINTER'
TEXT e; VALUES='FAULT message from procedure gammi: ' TEXT w; VALUES='WARNING message from procedure gammi: '
"**********************************************************************" " Deal with DISPERSION option "
"prin [ipri=*;squa=y] 'check dispersion'" IF UNSET(DISPERSION) " Option not set " IF DISTRIBUTION.IN.!t(BINOMIAL,POISSON) SCAL [VALUE=1] disp
ELSE
SCAL [VALUE=*] disp ENDI
ELSE
IF DISPERSION>0 " Option set positive " SCAL [VALU=DISPERSION] disp
ELSI DISPERSION==CONS('*') " Option set to * " SCAL [VALU=*] disp
ELSE " Option set negative " EXIT [CONT=proc; EXPL=!t(#e,'DISPERSION must be positive or *')] ENDI
ENDI
"***********************************************************************" prin [ipri=*;squa=y] 'check weights'
IF UNSET(WEIGHTS) " Option not set " VARI [nval=Y] weights
CALC weights=1
DUMM [valu=NONE] WEIGHTS ELSE
VARI weights ; WEIGHTS ENDI
prin [ipri=*;squa=y] 'check weights'
"when calculating df's take care for 0 weight's"
"***********************************************************************" " Deal with NBINOMIAL parameter "
"prin [ipri=*;squa=y] 'check nbinomial parameter'" IF UNSET(NBINOMIAL)
EXIT [CONT=proc; EXPL=!t(#e,'NBINOMIAL parameter must be set')] \ DISTRIBUTION .EQS. 'BINOMIAL'
" Assign a variate with values to NBIN: will be ignored " ASSI Y; NBINOMIAL
ENDI
"***********************************************************************" " Look for the canonical link of the specified distribution "
"prin [ipri=*;squa=y] 'check cononical link'" SCAL ndist,nlink
TEXT
[VALUES=IDENTITY,LOGARITHM,LOGIT,RECIPROCAL,POWER,SQUAREROOT,PROBIT,\ COMPLEMENTARYLOGLOG] linkname
CALC ndist = POSITION(DISTRIBUTION; !t(NORMAL,POISSON,BINOMIAL,\ GAMMA,INVERSENORMAL))
IF LINK.EQS.'CANONICAL' SCAL nlink; VALUE=ndist ELSE
CALC nlink = POSITION(LINK; linkname) ENDI
"***********************************************************************" " Get attributes of factors, particularly for labelling "
"prin [ipri=*;squa=y] 'check attributes for labelling'"
Lampiran
SCAL nvars,nenvs; VALUE=pvf['nlevels'],pef['nlevels']
GETA [ATT=nmv] pvf,pef; SAVE=ppvf,ppef "check for levels or labels" IF ppvf[1]
GETA [ATT=decimals] pvf['levels']; SAVE=ppvf
VARI Row; VALUES=pvf['levels']; DECI=ppvf['decimals'] FACT [LEVE=Row] Grow; VALU=pvf['levels']
ELSE
TEXT Row; VALUES=pvf['labels'] TEXT Grow; VALU=pvf['labels'] ENDI
IF ppef[1]
GETA [ATTR=decimals] pef['levels']; SAVE=ppef
VARI Column; VALU=pef['levels']; DECI=ppef['decimals'] FACT [LEVE=Column] Gcolumn;VALU=pef['levels']
ELSE
TEXT Column; VALU=pef['labels'] TEXT Gcolumn; VALU=pef['labels'] ENDI
TEXT [NVAL=1] variden,enviden,covviden,coveiden
"dump hiet niet meer nodig door loop die de fits doet" DUMP [CHAN=chanenv;PRIN=iden] COLUMN
DUMP [CHAN=chanvar;PRIN=iden] ROW
EQUA [OLDF=!(-5,1,*)] chanenv,chanvar;variden,enviden
"***********************************************************************" " Identify missing ROWs and COLUMNs (e.g. due to restrict) "
"prin [ipri=*;squa=y] 'check missing ROWs and COLUMNs'"
TABU [CLAS=ROW] Y; NOBS=cv & [CLAS=COLUMN] Y; NOBS=ce REST Column; !(#ce)>0
& Row; !(#cv)>0
CALC notmise,notmisv=nval(Column,Row) "Get number of not restricted" CALC totnmis=nobs(Y/weights) "Available df's" "takes in account missing values in Y and those due to 0 weights" "***********************************************************************" "check on covar; Column cova's optionally fitted before main Column eff. with a maximum equaling column levels (poss. -1 for general mean); Row cova's may follow similar but adjusted for Column effects (=Rowlevels-1)"
"A mirror analysis can be prefomed by transposing the input"
VARI [nval=Y] eenvec "unity vector used as dummy and/or to fit mean" CALC eenvec=1
SCAL cdf,rdf;notmise,notmisv "column/row counters used for df calcs" SCAL mcdf[1...nenvs],mrdf[1...nvars];1 "individual main effects/coverdfs" "prin 'check met covariabelen'"
IF UNSET(COVARIATES)
ASSI eenvec; COVARIATES;1 ASSI eenvec; COVATYPE;1 scal covatal;1
POIN [valu=eenvec] covar SCAL thch,thrh,ccp,rcp;0 ELSE
CALC covatal,cotyptal=nval(COVARIATES,COVATYPE) EXIT [CONT=JOB;EXPL=!t(#e,\
'Pointer COVARIATE and COVATYPE must have same number of values')]\ covatal.ne.cotyptal
CALC ctlev[1...covatal]=nlev(COVATYPE[1...covatal]) CALC cvvtal[1...covatal]=nval(COVARIATES[1...covatal]) CALC ctlctv[1...covatal]=ctlev[].EQ.cvvtal[]
EXIT [CONT=JOB;EXPL=!t(#e,\
'COVARIATE length must conform levels of corresp. factor')]\ vsum(ctlctv).ne.covatal
"find out wich covariate belongs to column or row" CALC hch[1...covatal]=COVATYPE[1...covatal].IS.COLUMN
62
Lampiran
"create index variate for column and row" VARI vhch,vhrh;VALU=!(hch[]),!(hrh[])
CALC vhch,vhrh=cum(vhch,vhrh)*(vhch,vhrh.ne.0)
"determine presency of column/row covariate" CALC thch,thrh=VSUM(hch,hrh)
"when present assign column and row covariates each to a pointer; when not present assign dummy eenvec to these pointers
(used as fit-loop index parameter but skiped within the loop) and erect the full length covariate for analysis" IF thch.gt.0
POIN [nval=thch] chcova
ASSI COVARIATES[#vhch];(chcova)#thch;1...thch CALC ccovar[1...thch] = \
NEWLEVELS(COVATYPE[#vhch];COVARIATES[#vhch]) ELSE
POIN [valu=eenvec] chcova POIN [valu=eenvec] ccovar ENDI
IF thrh.gt.0
POIN [nval=thrh] rhcova
ASSI COVARIATES[#vhrh];(rhcova)#thrh;1...thrh CALC rcovar[1...thrh] = \
NEWLEVELS(COVATYPE[#vhrh];COVARIATES[#vhrh]) ELSE
POIN [valu=eenvec] rhcova POIN [valu=eenvec] rcovar ENDI
"calculate scalars used to skip elements as loop index parameter" CALC ccp,rcp=thch,thrh.ne.0
"correct scalars used as index for pointers; ensuring them being >0 to avoid trouble with nonexisting index for empty pointers" CALC thch,thrh=thch,thrh+(thch,thrh.eq.0)
ENDI
"***********************************************************************" "Temporary inclusion of main effects fitting order !!!!!"
" to be deleted when module is up and running"
MODE [DIST=#DISTRIBUTION; LINK=#LINK; EXPO=EXPONENT; DISP=disp; WEIG=weights]\
Y; NBIN=NBINOMIAL TERM COLUMN+ROW
FIT [PRIN=*]
ADD [PRIN=*] COLUMN ADD [PRIN=*] ROW "
DROP [PRIN=*] ROW+COLUMN ADD [PRIN=*] ROW
ADD [PRIN=A] COLUMN "
"***********************************************************************" SCAL efftal;0 "scalar counting fitted effects" SCAL mas;1 "initial multiplicative AXES use in effects pointer" SCAL einp,ginp;0 "indicator if geno/environmental effects are present" SCAL gmean "scalar for general mean" TEXT [VALU='Total'] source
"declaration of variates holding estimates" VARI [VALU=#nenvs(0)] E
VARI [VALU=#nvars(0)] G VARI [NVAL=Y] voG,voE
SCAL YE[1...thch] "column covariable effects" SCAL ZE[1...thrh] "row covariable effects" POIN [nval=1] gefp,refp,cefp "pointer to hold effects" ASSI (gmean)3;gefp,refp,cefp
POIN voGp "pointer to maineffect offset" POIN voEp "pointer to maineffect offset" "**********************************************************************"
Lampiran
"Fitting general mean; keeping devi & df for accumulated table" MODE [DIST=#DISTRIBUTION; LINK=#LINK; EXPO=EXPONENT; DISP=disp; WEIG=weights;\
SAVE=laatst] Y; NBIN=NBINOMIAL
FORM [VALU=eenvec] fform,fformeas,fformvas,fformc,fformr FIT [PRIN=*;CONS=O] #fform
RKEE DEVI=devi[efftal]; DF=df[efftal];est=est
CALC totdf[efftal]=notmise*notmisv-1 "calculate total df" IF df[efftal].ne.totdf[efftal] "not sure yet how to deal with" CALC totmis=totdf[efftal]-df[efftal]
PRIN 'Specific ROW-COLUMN cells are restricted or missing !!!!!' ELSE
SCAL totmis;0 ENDI
"***********************************************************************" "***********************************************************************" "Fitting covar & main effects; keeping devi & df for accumulated table" "i= variates/factors to be fitted
j= column or row factor to wich the fitted variate corresponds k= given choices for fitting the covariates
l= possible choices at each stage of fitting m= index number for covariate
n= type of effect to be fitted (cova,main,cova.main)
o= corresponding identifier of covariate/factor use in summary table" FOR i=#ccp(ccovar[1...thch]),COLUMN,\ #rcp(rcovar[1...thrh]),ROW,\ #ccp(ccovar[1...thch]),\ #rcp(rcovar[1...thrh]);\ j=#ccp((COLUMN)#thch),COLUMN,\ #rcp((ROW)#thrh),ROW,\ #ccp((ROW)#thch),\ #rcp((COLUMN)#thrh);\ k=#ccp(COVA_IMPL),MAINEFFECTS,\ #rcp(COVA_IMPL),MAINEFFECTS,\ #ccp(COVA_IMPL),\ #rcp(COVA_IMPL);\ l=#ccp('BEFORE'),!T('COLUMN','BOTH'),\ #rcp('BEFORE'),!T('ROW','BOTH'),\ #ccp(!T('BEFORE','AFTER')),\ #rcp(!T('BEFORE','AFTER'));\ m=#ccp(1...thch),1,\ #rcp(1...thrh),1,\ #ccp(1...thch),\ #rcp(1...thrh);\ n=#ccp((1)#thch),2,\ #rcp((3)#thrh),4,\ #ccp((5)#thch),\ #rcp((6)#thrh);\ o=#ccp(chcova[1...thch]),COLUMN,\ #rcp(rhcova[1...thrh]),ROW,\ #ccp(chcova[1...thch]),\ #rcp(rhcova[1...thrh]);
IF (k.IN.l) "check to include covariate/factor at this stage" CALC mindf[1,2]=(n,n.eq.1,3)*\
(mcdf[m],mrdf[m])*(vsum(mcdf,mrdf).gt.1) " (cova = 1df unless (rtot/ctot-1) or already fitted)" CALC mindf[1,2]=mindf[1,2]+(n,n.eq.2,4)*(vsum(mcdf,mrdf)-1) "main = rtot/ctot-1 corrected for covariates already fitted" CALC mindf[1,2]=mindf[1,2]+\
(n,n.eq.5,6)*(rdf,cdf-(mcdf[m],mrdf[m].eq.0)) "cova.main = complementary factor df corrected for not fitted covariate and/or maineffect" EXIT [CONT=FOR;EXPL=!t(#w,\
64
Lampiran
(totdf[efftal]-vsum(mindf)-totmis).le.0
"rem: totmis indicates missing cells" IF (VSUM(mindf).gt.0) "if possible to include then correct dfs" "adjust pointers to hold effects !!!" CASE n
POIN [valu=gefp[],YE[]] gefp POIN [valu=cefp[],YE[]] cefp POIN [valu=refp[],YE[]] refp OR
POIN [valu=gefp[],E] gefp POIN [valu=cefp[],E] cefp CALC einp=1
POIN [valu=voE] voEp OR
POIN [valu=gefp[],ZE[]] gefp POIN [valu=cefp[],ZE[]] cefp POIN [valu=refp[],ZE[]] refp OR
POIN [valu=gefp[],G] gefp POIN [valu=refp[],G] refp CALC ginp=1
POIN [valu=voG] voGp ELSE
prin 'How does the effects pointer has to look like ?' ENDC CALC mefftal,efftal=efftal,efftal+0,1 CALC totdf[efftal]=totdf[mefftal]-vsum(mindf) CALC mcdf[m],mrdf[m]=mcdf[m],mrdf[m]-(n,n.eq.1,3) CALC mcdf[1...nenvs],mrdf[1...nvars]=\ mcdf[1...nenvs],mrdf[1...nvars]-\ mcdf[1...nenvs],mrdf[1...nvars]*\ ((n)#nenvs,(n)#nvars.eq.(2)#nenvs,(4)#nvars) CALC cdf,rdf=cdf,rdf-(n,n.eq.2,4)
"correct for main effects" CALC cdf,rdf=cdf,rdf-(n,n.eq.5,6)
"correct for main.cova effects" DUMP [CHAN=chancove;PRIN=iden] o
EQUA [OLDF=!(-5,1,*)] chancove;coveiden TEXT [VALU=#source,#coveiden] source fcla i;outt=iform
fcla j;outt=jform
IF (n.gt.4) "is it an cova.main type ?" FORM [VALU=#fform+#jform.#iform] fform
ELSE "it is just an additive" FORM [VALU=#fform+#iform] fform
ENDI
IF (j.IS.ROW) IF (n.gt.4)
FORM [valu=#fformc+#jform.#iform] fformc ELSE
FORM [valu=#fformc+#iform] fformc ENDI
ELSE
IF (n.gt.4)
FORM [valu=#fformr+#jform.#iform] fformr ELSE
FORM [valu=#fformr+#iform] fformr ENDI
ENDI
FIT [PRIN=*;CONS=O] #fform
RKEE DEVI=devi[efftal]; DF=df[efftal];ESTI=est ENDI
ENDI ENDF
Lampiran
"Calculating initial values for offset" "
prin [squa=y] fform
rdis [prin=es;save=laatst] " EQUA est;gefp IF einp CALC voE=NEWL(COLUMN;E) ENDI "***********************************************************************" "check on realistic number of multipl. axes after covariate/main effects" CALC haxes=vmin(!p(cdf,rdf)) "smallest side is maximum"
IF haxes.lt.AXES CALC AXES=haxes
PRIN [ipri=*;squa=y] w,\
'Not enough df''''s; number of axes set to:',AXES;\ fiel=*,*,3;deci=0
ENDI
"***********************************************************************" "prin [ipri=*;squa=y] 'Begin module'"
"prin [ipri=*;squa=y] 'nvars',nvars,'nenvs',nenvs" "prin [ipri=*;squa=y] 'AXES=:',AXES"
CALC SEED=URAN(SEED) "initialize random generator" CALC delta[1...AXES] = URAN(0;nenvs) "initialize COLUMN scores" "CALC delta[1...AXES]=delta[1...AXES]-mean(delta[1...AXES])"
"probeersel"
calc delta[1...AXES]=0 "DIT WERKT, maar geeft dit geen problemen ??" VARI [NVAL=nvars] gamma[1...AXES]
"***********************************************************************" "prin [ipri=*;squa=y] 'check lege parameters (assign)'"
IF UNSET(FITTEDVALUES) : ASSIGN fit ; FITTEDVALUES : ENDI IF UNSET(RESIDUALS) : ASSIGN residual; RESIDUALS : ENDI IF UNSET(DELRESIDUALS) : ASSIGN delres ; DELRESIDUALS : ENDI IF UNSET(COOK) : ASSIGN cook ; COOK : ENDI IF UNSET(LEVERAGE) : ASSIGN leverage; LEVERAGE : ENDI IF UNSET(WORKVARIATE) : ASSIGN workvar ; WORKVARIATE : ENDI IF UNSET(LINEARPREDICT) : ASSIGN lp ; LINEARPREDICT : ENDI IF UNSET(BIPLOT) : ASSIGN biplot ; BIPLOT ELSE
CALC BIPLTAL=AXES*4 IF NVAL(BIPLOT)<>BIPLTAL
\EXIT [CONT=proc;EXPL=!t(#e,\
\'Biplot pointer must have 4 variates per axis (R&C+R+C)')] prin [ipri=*;squa=yes]\
'Biplot pointer has 4 variates per axis (R&C+R+C):',BIPLTAL,\
'for',AXES,'axes';deci=0;fiel=1 POIN [modi=yes;nval=BIPLTAL] BIPLOT ENDI
ENDI
"***********************************************************************" VARI [NVAL=Y] vint[1...AXES],vdelta[1...AXES],vgamma[1...AXES] "redefine"
SCAL cycle,tcycle,devmon[0]; 0 CALC axesmin=AXES-1
"prin [ipri=*;squa=y] 'Begin loop'"
"***********************************************************************" IF AXES.GE.1
FOR m=1...AXES "buitenloop voor aantal assen" CALC mas=m
CALC tcycle,cycle,mmin=tcycle,0,m+cycle,0,-1 FORM [valu=#fformc+ROW.vdelta[1...m]] fformeas FORM [valu=#fformr+COLUMN.vgamma[1...m]] fformvas POIN [VALU=refp[],gamma[1...m]] refpp
66
Lampiran
POIN [VALU=cefp[],delta[1...m]] cefpp "
prin [squa=y] 'samengestelde poin' prin [squa=y] fformeas
prin [squa=y] refpp prin [squa=y] fformvas prin [squa=y] cefpp "
"***********************************************************************" FOR [NTIM=MAXCYCLE]
CALC cycle = cycle+1
MODE [DIST=#DISTRIBUTION; LINK=#LINK; EXPO=#EXPONENT; \ DISP=disp; WEIG=weights ;OFFS=#voEp] Y; NBIN=NBINOMIAL " Form variate with current ROW sens relevant to each unit " " Avoid bug with restrictions in NEWLEVELS " REST delta[1...m]
CALC vdelta[1...m] = NEWLEVELS(COLUMN;delta[1...m]) REST delta[1...m]; RESTRICT(Column)
FIT [CONST=O; PRIN=*;NOME=alia] #fformeas RKEE EST=est; DEV=rdevmon[cycle]
EQUA est; refpp "prin refpp[]"
CALC G,gamma[1...m] = G,gamma[1...m]-MEAN(G,gamma[1...m]) CALC voG = NEWL(ROW;G)
"orthogonalisatie" "bedoeling is GRAMM-SCHMIDT orthogonalisatie" "hier nog CHOLESKI ??" IF m.gt.1
for i=1...mmin;j=2...m model gamma[j]; fit=fitg
FIT [CONST=o; PRIN=*] gamma[1...i] CALC gamma[j] = gamma[j] - fitg endf
ENDI
CALC normgamma[1...m] = SQRT(sum(gamma[1...m]**2)) CALC gamma[1...m] = gamma[1...m]/normgamma[1...m] REST gamma[1...m]
CALC vgamma[1...m] = NEWL(ROW;gamma[1...m]) REST gamma[1...m];REST(Row)
MODE [DIST=#DISTRIBUTION; LINK=#LINK; EXPO=#EXPONENT; \ DISP=disp; WEIG=weights ;OFFS=#voGp;SAVE=laatst] Y; NBIN=NBINOMIAL
FIT [CONS=O; PRIN=*] #fformvas RKEE EST=est; DEV=cdevmon[cycle] EQUA est;cefpp
"prin cefpp[]"
CALC E,delta[1...m] = E,delta[1...m] - MEAN(E,delta[1...m]) CALC voE = NEWL(COLUMN;E)
"orthogonalisatie" IF m.gt.1
for i=1...mmin;j=2...m MODE delta[j]; FIT=fitd
FIT [CONST=o; PRIN=*] delta[1...i] CALC delta[j] = delta[j] - fitd endf
ENDI
CALC normdelta[1...m] = SQRT(SUM(delta[1...m]**2)) CALC delta[1...m] = delta[1...m]/normdelta[1...m]
"***********************************************************************" CALC maxdiff= ABS(rdevmon[cycle]-cdevmon[cycle])
IF 'MONITORI' .IN. PRINT PRIN [ipri=*;squa=y] \
'AXES:',m,'convergence cycle:',cycle,\
'Deviance:',cdevmon[cycle],'Difference:',maxdiff;\ deci=*,0,*,0,*,4,*,4;fiel=*,2,*,3,*,12,*,12 ENDI
Lampiran
EXIT [CONT=FOR] maxdiff .LT. TOLERANCE
"***********************************************************************" IF cycle==MAXCYCLE
PRINT [IPRINT=*] '******** CONVERGENCE NOT ACHIEVED IN', \ cycle,'ITERATIONS'; FIELD=3; DEC=0
& [SQUASH=yes] 'Tolerance',TOLERANCE, \
'Maximum difference in sensitivity at last iteration',maxdiff; \ FIELD=18,12,37,12 ENDIF ENDF "***********************************************************************" "prin gamma[1...m],delta[1...m]" CALC sgamma[m][1...m],sdelta[m][1...m]=gamma[1...m],delta[1...m] CALC sE[m],sG[m]=E,G CALC sgmean[m]=gmean "opslag per as"
CALC mefftal,efftal=efftal,efftal+0,1 CALC devi[efftal]=cdevmon[cycle] CALC df[efftal]=df[mefftal]-(cdf+rdf-1) CALC cdf,rdf=cdf,rdf-1 CALC phi[m][1...m]=normdelta[1...m] "
prin [squa=y] normdelta[1...m] prin [squa=y] normgamma[1...m] "
IF 'MONITORI' .IN. PRINT
TEXT [VALU='Monitor convergence graph'] gt VARI [nval=cycle] process;!(cdevmon[1...cycle]) VARI [valu=1...cycle] round;deci=0
GRAP [titl=gt] process;round;meth=l ENDI
ENDF
"***********************************************************************" "prin [ipri=*;squa=y] 'Einde loop'"
"prin efftal" ENDI
"***********************************************************************" "prin 'rcheck'"
"Extract relevant details from last fit and use RCHECK" "
RDIS [SAVE=laatst;PRIN=esti]
prin refpp[],cefpp[],'dit moet kloppen met de estimates' "
RKEE [SAVE=laatst] LINE=LINEARPREDICT;LEVE=LEVERAGE;\ FITT=FITTEDVALUES;RESI=RESIDUALS
CALC RESIDUALS=Y-FITTEDVALUES "aanpassing residu zonder leverage etc" RCHECK [SAVE=laatst;PRIN=*;resi=DELRESIDUALS;cook=COOK]
" residual,cook,leverage; halfnormal"
CALC WORKVARIATE = LINEARPREDICT + (Y - FITTEDVALUES)/FITTEDVALUES PRIN [CHAN=asnum;IPRI=*;SQUA=Y] !(1...AXES);deci=0;fiel=2;just=l
"***********************************************************************" TABU [CLASS=ROW,COLUMN; MARG=Y; PRIN=M] FITTEDVALUES
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" PRIN sgmean[]
PRIN Row,sG[1...AXES],sgamma[][] CORR [PRIN=c] sG[1...AXES],sgamma[][] PRIN Column,sE[1...AXES],sdelta[][] CORR [PRIN=c] sE[1...AXES],sdelta[][] prin phi[][]
"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
"***********************************************************************" CALC rptal=1+AXES
IF .NOT.UNSET(ROWPARAMS)
68
Lampiran
CALC ROWPARAMS[1...rptal]=sG[AXES],sgamma[AXES][1...AXES] ENDI
IF .NOT.UNSET(COLPARAMS)
POIN [MODI=Y;NVAL=#rptal] COLPARAMS
CALC COLPARAMS[1...rptal]=sE[AXES],sdelta[AXES][1...AXES] ENDI "***********************************************************************" "***********************************************************************" IF efftal.gt.0 CALC pefftal=efftal+1 CALC dfver[0...pefftal]=df[0],df[0...mefftal],df[efftal] - \ 0 ,df[1... efftal], 0 CALC deviver[0...pefftal]=devi[0],devi[0...mefftal],devi[efftal] - \ 0 ,devi[1... efftal], 0 ENDI "***********************************************************************" "prin [ipri=*;squa=y] 'Print diagnostics',PRINT"
IF 'DIAGNOST' .IN. PRINT
IF NOBS(RESIDUALALS).GT.0 "exact model without residuals" GRAP LINEARPREDICT,WORKVARIATE; LINEARPREDICT; meth=l,p
GRAP [NROW=21; NCOL=61] RESIDUALS;FITTEDVALUES; symb=ROW GRAP [NROW=21; NCOL=61] RESIDUALS;LINEARPRLUES; symb=ROW GRAP [NROW=21; NCOL=61] RESIDUALS;FITTEDVALUES; symb=COLUMN GRAP [NROW=21; NCOL=61] RESIDUALS;LINEARPREDICT; symb=COLUMN CALC res2=RESIDUALS**2
TABU [m=y; class=ROW,COLUMN] res2; tot=devres PRIN [IPRI=*;SQUA=Y] 'Total residual:',devres ENDI ENDI "***********************************************************************" IF AXES.GT.1 CALC cagamma[1...AXES],cadelta[1...AXES] = \ sqrt(normdelta[1...AXES],normdelta[1...AXES])*\ gamma[1...AXES],delta[1...AXES] CALC grgamma[1...AXES],grdelta[1...AXES] = \ normdelta[1...AXES],normdelta[1...AXES]*\ gamma[1...AXES],delta[1...AXES] IF NVAL(BIPLOT)
DELE [rede=yes] BIPLOT[1...BIPLTAL]
CALC BIPLOT[1...BIPLTAL]=cagamma[1...AXES],cadelta[1...AXES],\ grgamma[1...AXES],grdelta[1...AXES]
\REST BIPLOT[] ENDI
"prin [ipri=*;squa=y] 'Print biplots'" IF ('BIPLOTS' .IN. PRINT)
TEXT [valu=' Row-Column biplot sigma scaled 0.5-0.5'] rcgt TEXT [val=' Column biplot sigma scaled 1'] cgt
TEXT [val=' Row biplot sigma scaled 1'] rgt FOR i=1...axesmin
CALC iplus=i+1 FOR j=iplus...AXES
CALC imin,iplus,jmin,jplus=i,AXES,j,AXES-(1,i,1,j) CONC [bpas] 'AXES',#asnum,' vs.',#asnum;\
widt=*,(0)#jmin,2,(0)#jplus,*,(0)#imin,2,(0)#iplus CONC [rctit] bpas,rcgt
CONC [rtit] bpas,rgt CONC [ctit] bpas,cgt
GRAP [titl=rctit;eq=sc] cagamma[j],cadelta[j],0; \ cagamma[i],cadelta[i],0; symb=Grow,Gcolumn,'+' GRAP [titl=rtit; eq=sc] grgamma[j],0; \
grgamma[i],0; symb=Grow,'+'
GRAP [titl=ctit; eq=sc] grdelta[j],0; \ grdelta[i],0; symb=Gcolumn,'+' ENDF
Lampiran
ENDI ENDI
"***********************************************************************" "prin [ipri=*;squa=y] 'Print model'"
IF 'MODEL' .IN. PRINT PAGE
SKIP [FILE=outp] 2 PRIN [IPRI=*;SQUA=Y]\
'*** GenerAlized Main effects and Multiplicative ***' PRIN [IPRI=*;SQUA=Y]\
'*** Interaction model analysis ***' SKIP [FILE=outp] 1
TEXT [NVAL=1] tlink
EQUA [OLDF=!((-1)#nlink,1)] OLDS=!t(x,#linkname); NEWS=tlink PRIN [IPRI=*; SQUA=yes] \
'Response variate ',!p(Y); FIELD=25,*; JUST=r,l & 'Weight variate ',!p(WEIGHTS); FIELD=25,*; JUST=r,l & 'Distribution ',DISTRIBUTION; FIELD=25,*; JUST=r,l & 'Dispersion ',disp; FIELD=25,*; JUST=r,l
& 'Link function ',tlink; FIELD=25,*; JUST=r,l & 'Number of ROWs ',notmisv,'FROM',nvars;\ FIELD=25,8,5,5; DECI=0; JUST=r,l,l,l
& 'Number of COLUMNs ',notmise,'FROM',nenvs;\ FIELD=25,8,5,5; DEC=0; JUST=r,l,l,l
& 'COL COVARIATES ',thch;FIEL=25,3;DECI=0;JUST=r,l & 'ROW COVARIATES ',thrh;FIEL=25,3;DECI=0;JUST=r,l & 'Number of multipl.axes',AXES;FIEL=25,3;JUST=r,l;DECI=0
& 'Convergence criterion',TOLERANCE;FIELD=25,12; DECI=6; JUST=r,l & 'Number of iterations ',tcycle; FIELD=25,8; DEC=0; JUST=r,l ENDI
"***********************************************************************" "prin [ipri=*;squa=y] 'Print summary'"
IF 'SUMMARY' .IN. PRINT
IF DISTRIBUTION.EQS.'NORMAL' TEXT head[1...4],inttext;\
VALUES='variance','s.s.','m.s.','v.r.',!t(('Ammi__')#AXES) ELSE
TEXT head[1...4],inttext; \
VALU='deviance','deviance','mean dev.','dev. ratio',\ !t(('gamma')#AXES)
ENDI
CONC inttext,asnum;skip=*,1;widt=6,3 CALC sourlen=nval(source)-1+AXES+3 CALC maintal=efftal-AXES
"source - first element (=total) + AXES + RESIDUAL +empty +TOTAL" TEXT [VALU=(' ')#sourlen] source2
EQUA [OLDF=!(-1,maintal,AXES,3)] \
!t(#source,#inttext,'Residual',' ','Total ');source2 CALC dfver[0...pefftal]=MVIN(dfver[0...pefftal];dfver[0...pefftal].eq.0) CALC mdev[0...pefftal]=deviver[0...pefftal]/dfver[0...pefftal] VARI deviance,dimension,meandev;\ !(deviver[1...pefftal],*,deviver[0]),\ !( dfver[1...pefftal],*, dfver[0]),\ !( mdev[1...pefftal],*,mdev[0]) FOR i=1...AXES CALC asno=maintal+i+1 CALC asrest=pefftal-asno+1 CALC devr[i]=meandev/\ (vsum(!p(deviver[asno...pefftal]))/\ vsum(!p( dfver[asno...pefftal]))) "tests op as-niveau's" CALC devr[i]=mvin(devr[i];!((0)#maintal,(0)#i,(1)#asrest,0,1)) ENDF SKIP [FILE=outp] 2
70
Lampiran
PRIN [IPRI=*] '*** Analysis of',head[1],'***'; FIELD=1 & 'Source','d.f.',head[2...3],(head[4])#AXES;\ FIELD=15,8,12,12,(12)#AXES
& [SQUASH=yes; MISSING=' '] \
source2,dimension,deviance,meandev,devr[1...AXES]; \ FIEL=15,8,12,12,(12)#AXES;DEC=*,0,4,4,(2)#AXES;JUST=l,(r)3,(r)#AXES SKIP [FILE=outp] 5 ENDI "***********************************************************************" DELE [REDE=Y] "As many as you lay hold of"
DUMM WEIGHTS;VALU=*
"***********************************************************************" ENDPROCEDURE "GAMMI"
"***********************************************************************"
Lampiran 11. Contoh Perintah GENSTAT untuk GAMMI return [clos=yes]
text [valu='Bem',. . . ,'Lon'] labnema text [valu='IAC-100',. . . ,'Wils'] labgeno calc nnema,ngeno=nval(labnema,labgeno) unit [nval=20]
fact [lev=nnema;labe=labnema] nema fact [lev=ngeno;lab=labgeno] geno gene geno,nema variate a read a ... (data) ... : GAMMI [dist=normal;link=ident;main=both;maxc=30;prin=mo,sum,bipl,diag;\ axes=3;seed=183639]\ a;nbin=*;row=geno;colu=nema;\ fitt=fit;resi=residual; bipl=bip prin bip[1,2] prin bip[3,4] GAMMI [dist=poisson;link=log;main=both;maxc=30;prin=mo,sum,bipl,diag;\ axes=3;seed=183639]\ a;nbin=*;row=geno;colu=nema;\
cook=cook;fitt=fit;resi=residual;workv=z; linearp=nu; bipl=bip prin bip[1,2]
prin bip[3,4]
Lampiran 12. Perintah GENSTAT untuk Procrustes ROTATE [PRINT=rotations,residuals,sums; SCALING=yes; STANDARDIZE=centre,normalize;\
SUPPRESS=no] XINPUT=MX; YINPUT=MXX
MODEL AMMI TERAMPAT UNTUK
DATA BERDISTRIBUSI BUKAN NORMAL
ALFIAN FUTUHUL HADI
SEKOLAH PASCASARJANA
INSTITUT PERTANIAN BOGOR
BOGOR
2006
PERNYATAAN MENGENAI TESIS DAN
SUMBER INFORMASI
Dengan ini saya menyatakan bahwa tesis Model AMMI Terampat untuk Data Berdistribusi Bukan Normal adalah karya saya sendiri dan belum pernah