﻿* Encoding: UTF-8.
** Reading data from STATA.

get stata file="C:/Users/Documents/filename.dta".
get stata file="C:/Users/muakram/OneDrive - Australian Catholic University/muakram/Akram/BEC/Regression skewed data/Akram Paper v2.dta".


**  Histograms of weekly minutes of habitual PA (Figure 2).
GRAPH 
  /HISTOGRAM=TotPA.

** Descriptive measures.
FREQUENCIES VARIABLES=age medCond TotPA ave_mvpa 
  /FORMAT=NOTABLE 
  /NTILES=4 
  /STATISTICS=VARIANCE MINIMUM MAXIMUM MEAN MEDIAN 
  /ORDER=ANALYSIS.

*********  fitting models to COUNT DATA  **********.
** outcome variable (TotPA) to fit on age and NCMC (medCond) .
** Standard linear regression model.
REGRESSION 
  /MISSING LISTWISE 
  /STATISTICS COEFF CI OUTS R ANOVA 
 /CRITERIA=PIN(.05) POUT(.10)
  /NOORIGIN 
  /DEPENDENT TotPA
  /METHOD=ENTER age gender medCond 
  /SAVE PRED.

********* Generalized Linear Models ***********. 
**  POISSON REGRESSION.
GENLIN TotPA WITH age gender medCond 
  /MODEL age gender medCond INTERCEPT=YES 
 DISTRIBUTION=POISSON LINK=LOG 
  /CRITERIA METHOD=FISHER(1) SCALE=1 COVB=MODEL MAXITERATIONS=100 MAXSTEPHALVING=5 
    PCONVERGE=1E-006(ABSOLUTE) SINGULAR=1E-012 ANALYSISTYPE=3(WALD) CILEVEL=95 CITYPE=WALD 
    LIKELIHOOD=FULL 
  /MISSING CLASSMISSING=EXCLUDE 
  /PRINT DESCRIPTIVES MODELINFO FIT SUMMARY SOLUTION (EXPONENTIATED)
 /SAVE MEANPRED.
 
*** Generalized Linear Models. 
** Quasi POISSON REGRESSION.
GENLIN TotPA WITH age gender medCond
  /MODEL age gender medCond INTERCEPT=YES 
 DISTRIBUTION=POISSON LINK=LOG 
  /CRITERIA METHOD=FISHER(1) SCALE=PEARSON COVB=MODEL MAXITERATIONS=100 MAXSTEPHALVING=5 
    PCONVERGE=1E-006(ABSOLUTE) SINGULAR=1E-012 ANALYSISTYPE=3(WALD) CILEVEL=95 CITYPE=WALD 
    LIKELIHOOD=FULL 
  /MISSING CLASSMISSING=EXCLUDE 
  /PRINT MODELINFO FIT SUMMARY SOLUTION
 /SAVE MEANPRED.

** AIC value of quasi Poisson regression. get the phi value manually from SPSS output, which 596.831.
COMPUTE size = MeanPredicted/(596.831 - 1).
EXECUTE.
** probability, p.
COMPUTE proba = size/(size+MeanPredicted). 
EXECUTE.
** converting to integer.
COMPUTE intsize=RND(size). 
EXECUTE.
** negative binomial density.
COMPUTE nbdf = PDF.NEGBIN(TotPA+intsize,intsize,proba).
EXECUTE.

** log of negative binomial density values.
COMPUTE lognbdf=LN(nbdf).
EXECUTE.

DESCRIPTIVES VARIABLES=lognbdf 
  /STATISTICS=SUM.

** AIC of quasi Poisson regession. npar=4 and sumlognbdf=-2931.70 from above descriptive output.
COMPUTE aicqp = 2*4 - 2*2931.70.
EXECUTE. 


*** Generalized Linear Models. 
** NEGATIVE BINOMIAL REGRESSION.
  GENLIN TotPA WITH age gender medCond 
  /MODEL age gender medCond INTERCEPT=YES 
 DISTRIBUTION=NEGBIN(MLE) LINK=LOG 
  /CRITERIA METHOD=FISHER(1) SCALE=1 COVB=MODEL MAXITERATIONS=100 MAXSTEPHALVING=5 
    PCONVERGE=1E-006(ABSOLUTE) SINGULAR=1E-012 ANALYSISTYPE=3(WALD) CILEVEL=95 CITYPE=WALD 
    LIKELIHOOD=FULL 
  /MISSING CLASSMISSING=EXCLUDE 
  /PRINT DESCRIPTIVES MODELINFO FIT SUMMARY SOLUTION 
  /SAVE MEANPRED.

***************************************
***************************************
*** Continuous outcome data *****
** Log transformation f mvpa.
** plotting untransformed mvpa.
GRAPH 
 /HISTOGRAM=ave_mvpa.

COMPUTE log_mvpa=LN(ave_mvpa). 
EXECUTE.
** plotting log transformed mvpa.
GRAPH 
 /HISTOGRAM=log_mvpa.

** Square-root transformation f mvpa.
COMPUTE sqrt_mvpa=SQRT(ave_mvpa). 
EXECUTE.
** plotting square-root transformed mvpa.
GRAPH 
 /HISTOGRAM=sqrt_mvpa.

********* OR ********.
frequencies ave_mvpa log_mvpa sqrt_mvpa
/format notable
/histogram.
** Number of bins can be changed by double clicking on the graph**

*************** MODEL FITTINGS  ***********
**  Linear regression.
REGRESSION 
  /MISSING LISTWISE 
  /STATISTICS COEFF CI OUTS R ANOVA SELECTION
  /CRITERIA=PIN(.05) POUT(.10) 
  /NOORIGIN 
  /DEPENDENT ave_mvpa 
  /METHOD=ENTER age gender medCond
  /SAVE PRED.

COMPUTE predlm=PRE_1. 
EXECUTE.
DELETE VARIABLES  PRE_1.


** Square roort transformed linear regression.
REGRESSION 
  /MISSING LISTWISE 
  /STATISTICS COEFF CI OUTS R ANOVA SELECTION
  /CRITERIA=PIN(.05) POUT(.10) 
  /NOORIGIN 
  /DEPENDENT sqrt_mvpa 
  /METHOD=ENTER age gender medCond
  /SAVE PRED. 
** Back transformation of sqrt_mvpa.
COMPUTE predlmsqrt=PRE_1*PRE_1. 
EXECUTE.
DELETE VARIABLES  PRE_1.

** Log transformed linear regression.
REGRESSION 
  /MISSING LISTWISE 
  /STATISTICS COEFF CI R SELECTION ANOVA 
  /CRITERIA=PIN(.05) POUT(.10) 
  /NOORIGIN 
  /DEPENDENT log_mvpa 
  /METHOD=ENTER age gender medCond
  /SAVE PRED.
** Back transformation of log_mvpa.
COMPUTE predlmlog=EXP(PRE_1). 
EXECUTE.
DELETE VARIABLES  PRE_1.

*** Generalized Linear Models Gamma distribution with log link. 
GENLIN ave_mvpa BY gender (ORDER=DESCENDING) WITH age medCond
  /MODEL gender age medCond INTERCEPT=YES 
 DISTRIBUTION=GAMMA LINK=LOG 
  /CRITERIA METHOD=FISHER SCALE=PEARSON COVB=MODEL MAXITERATIONS=100 MAXSTEPHALVING=5 
    PCONVERGE=1E-006(ABSOLUTE) SINGULAR=1E-012 ANALYSISTYPE=3(WALD) CILEVEL=95 CITYPE=WALD 
    LIKELIHOOD=FULL 
  /MISSING CLASSMISSING=EXCLUDE 
  /PRINT CPS DESCRIPTIVES MODELINFO FIT SUMMARY SOLUTION 
  /SAVE XBPRED DEVIANCERESID.
** Back transformation of log GLM-gamma.
COMPUTE predglmg=EXP(XBPredicted). 
COMPUTE residglmg=DevianceResidual. 
EXECUTE.
DELETE VARIABLES XBPredicted DevianceResidual.

*** Generalized Linear Models Inverse-Gaussian distribution and log link. 
GENLIN ave_mvpa BY gender (ORDER=DESCENDING) WITH age medCond
  /MODEL gender age medCond INTERCEPT=YES 
 DISTRIBUTION=IGAUSS LINK=LOG 
  /CRITERIA METHOD=FISHER SCALE=PEARSON COVB=MODEL MAXITERATIONS=100 MAXSTEPHALVING=5 
    PCONVERGE=1E-006(ABSOLUTE) SINGULAR=1E-012 ANALYSISTYPE=3(WALD) CILEVEL=95 CITYPE=WALD 
    LIKELIHOOD=FULL 
  /MISSING CLASSMISSING=EXCLUDE 
  /PRINT CPS DESCRIPTIVES MODELINFO FIT SUMMARY SOLUTION 
  /SAVE XBPRED DEVIANCERESID.
** Back transformation of log GLM-IG.
COMPUTE predglmig=EXP(XBPredicted). 
COMPUTE residglmig=DevianceResidual. 
EXECUTE.
DELETE VARIABLES XBPredicted DevianceResidual.


** Plotting predicted and actual values from various models on original scale against age.
GRAPH 
  /LINE(MULTIPLE)=MEAN(ave_mvpa) MEAN(predlm) MEAN(predlmsqrt) MEAN(predlmlog) MEAN(predglmg) 
  MEAN(predglmig) BY age 
  /PANEL ROWVAR=gender ROWOP=CROSS 
  /MISSING=LISTWISE.


** Comparing GLM-gamma with GLM IG using residuals vs fitted values plot.
COMPUTE lpredglmg=LN(predglmg). 
COMPUTE lpredglmig=LN(predglmig). 
EXECUTE.

  GRAPH 
  /SCATTERPLOT(BIVAR)=lpredglmg WITH residglmg 
  /MISSING=LISTWISE
  /TITLE='GLM-gamma'.

GRAPH 
  /SCATTERPLOT(BIVAR)=lpredglmig WITH residglmig 
  /MISSING=LISTWISE
  /TITLE='GLM-IG'.

** double click on the graph to change title, xlabel, ylabel etc.**

