-
Notifications
You must be signed in to change notification settings - Fork 7
/
Deviance_Analysis.ecl
53 lines (51 loc) · 1.71 KB
/
Deviance_Analysis.ecl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
IMPORT $ AS LR;
IMPORT LR.Types;
IMPORT ML_Core.Math AS Core_Math;
// aliases
AOD := Types.AOD_Record;
Dev := Types.Deviance_Record;
/**
* Analysis of Deviance Report.
* <p>Compare deviance information between two models, a base and and proposed
* model.
*
* <p>Analysis of Deviance is analogous to the Analysis of Variance (ANOVA) used in
* least-squares modeling, but adapted to the general linear model (GLM). In this case
* it is adapted specifically to the logistic model.
*
* <p>The inputs are the deviance records for each model as obtained from a call
* to Model_Deviance.
*
* @param proposed deviance records of the proposed model.
* @param base deviance records of the base model for comparison.
* @return the comparison of the deviance between the models in AOD_Record format.
* @see Model_Deviance
* @see Types.Deviance_Record
* @see Types.AOD_Record
*/
EXPORT DATASET(Types.AOD_Record)
Deviance_Analysis(DATASET(Types.Deviance_Record) proposed,
DATASET(Types.Deviance_Record) base) := FUNCTION
AOD cvt(Dev dr) := TRANSFORM
SELF.residual_DF := dr.df;
SELF.residual_dev := dr.deviance;
SELF.wi := dr.wi;
SELF.classifier := dr.classifier;
SELF := [];
END;
c1 := PROJECT(base, cvt(LEFT));
AOD cmpr(Dev p, Dev b) := TRANSFORM
dev := b.deviance - p.deviance;
df := b.df - p.df;
SELF.residual_DF := p.df;
SELF.residual_dev := p.deviance;
SELF.df := df;
SELF.deviance := dev;
SELF.p_value := 1.0 - Core_Math.Distributions.Chi2_CDF(ABS(dev), df);
SELF := p;
END;
c2 := JOIN(proposed, base,
LEFT.wi=RIGHT.wi AND LEFT.classifier=RIGHT.classifier,
cmpr(LEFT,RIGHT), SMART);
RETURN c1 + c2;
END;