target.hpp
Go to the documentation of this file.
1 
10 #pragma once
11 #include "glm.hpp"
12 
13 namespace target {
14 
18  template <class T>
19  class Target {
20  protected:
21  arma::Col<T> nuisance;
22  arma::Col<T> target;
23  arma::Col<T> propensity;
24 
25  arma::Col<T> _response;
26  arma::Mat<T> _exposure;
27  arma::Mat<T> _x1;
28  arma::Mat<T> _x2;
29  arma::Mat<T> _x3;
30  arma::Col<T> _weights;
31 
32  public:
33  arma::Col<T> alpha; // Target parameter
34  arma::Col<T> beta; // Nuisance parameter
35  arma::Col<T> gamma; // Propensity parameter
36 
38  Target() {}
39 
40  Target(const arma::Col<T> &y, const arma::Mat<T> &a,
41  const arma::Mat<T> &x1, const arma::Mat<T> &x2, const arma::Mat<T> &x3,
42  const arma::Col<T> &parameter,
43  const arma::Col<T> &weights);
44 
45  Target(const arma::Col<T> &y, const arma::Mat<T> &a,
46  const arma::Mat<T> &x1, const arma::Mat<T> &x2,
47  const arma::Col<T> &parameter,
48  const arma::Col<T> &weights);
49 
50  Target(const arma::Col<T> &y, const arma::Mat<T> &a,
51  const arma::Mat<T> &x1, const arma::Mat<T> &x2, const arma::Mat<T> &x3,
52  const arma::Col<T> &parameter);
53 
54  Target(const arma::Col<T> &y, const arma::Mat<T> &a,
55  const arma::Mat<T> &x1, const arma::Mat<T> &x2,
56  const arma::Col<T> &parameter);
57 
58  virtual ~Target() {} // Abstract class
59 
60  void weights(const arma::Col<T> &weights) { _weights = weights; }
61  arma::Col<T> weights() { return (_weights); }
62  arma::Col<T> A() { return (_exposure); }
63  arma::Col<T> Y() { return (_response); }
64  arma::Mat<T> X1() { return _x1; }
65  arma::Mat<T> X2() { return _x2; }
66  arma::Mat<T> X3() { return _x3; }
67  void update_data(const arma::Col<T> &y,
68  const arma::Mat<T> &a,
69  const arma::Mat<T> &x1,
70  const arma::Mat<T> &x2,
71  const arma::Mat<T> &x3) {
72  _response = y;
73  _exposure = a;
74  _x1 = x1;
75  _x2 = x2;
76  _x3 = x3;
77  }
78  virtual void calculate(bool target = true,
79  bool nuisance = true,
80  bool propensity = false);
81  void update_par(const arma::Col<T> &parameter);
82  };
83 
85 
86  template <class T>
87  class TargetBinary : public Target<T> {
88  protected:
89  arma::Mat<T> pr;
90  virtual arma::Col<T> H() = 0;
91  virtual arma::Mat<T> dp() = 0;
92  public:
93  using Target<T>::Target;
94  virtual arma::Mat<T> pa();
95  virtual arma::Mat<T> p(bool exposure = 0) { return pr.col(exposure); }
96  virtual arma::Col<T> loglik(bool indiv = false);
97  virtual arma::Mat<T> score(bool indiv = false);
98  virtual arma::Mat<T> est(arma::Col<T> alpha,
99  const arma::Col<T> &propensity);
100  virtual arma::Mat<T> est(arma::Col<T> alpha);
101  void calculate(bool target = true,
102  bool nuisance = true,
103  bool propensity = false) override;
104  };
105 
107 
108  template <class T>
109  class RD : public TargetBinary<T> {
110  private:
111  arma::Col<T> H() override { return(RD<T>::Y() - RD<T>::A()%rd()); }
112  arma::Mat<T> dp() override;
113  public:
114  RD() {}
115  RD(const arma::Col<T> &y, const arma::Mat<T> &a,
116  const arma::Mat<T> &x1, const arma::Mat<T> &x2, const arma::Mat<T> &x3,
117  const arma::Col<T> &parameter,
118  const arma::Col<T> &weights);
119 
120  arma::Col<T> rd() { return RD<T>::target; }
121  arma::Col<T> op() { return RD<T>::nuisance; }
122  void calculate(bool target = true,
123  bool nuisance = true,
124  bool propensity = false) override;
125  };
126 
127  template <class T>
128  class RR : public TargetBinary<T> {
129  private:
130  arma::Col<T> H() override {
131  return(RR<T>::Y()%exp( - RR<T>::A().col(0) % log( rr() ) ) );
132  }
133  arma::Mat<T> dp() override;
134 
135  public:
136  RR() {}
137  RR(const arma::Col<T> &y, const arma::Mat<T> &x,
138  const arma::Mat<T> &z1, const arma::Mat<T> &z2, const arma::Mat<T> &z3,
139  const arma::Col<T> &parameter,
140  const arma::Col<T> &weights);
141 
142  arma::Col<T> rr() { return RR<T>::target; }
143  arma::Col<T> op() { return RR<T>::nuisance; }
144  void calculate(bool target = true,
145  bool nuisance = true,
146  bool propensity = false) override;
147  };
148 
149 
151 
152  class ACE : public Target<cx_dbl> {
153  protected:
154  bool binary;
155 
156  public:
157  ACE(const arma::cx_vec &y,
158  const arma::cx_mat &a,
159  const arma::cx_mat &x2,
160  const arma::cx_mat &x3,
161  const arma::cx_vec &parameter,
162  const arma::cx_vec &weights,
163  bool binary = true);
164  ACE(const arma::vec &y,
165  const arma::vec &a,
166  const arma::mat &x2,
167  const arma::mat &x3,
168  const arma::vec &parameter,
169  const arma::vec &weights,
170  bool binary = true);
171 
172  void calculate(bool target = true,
173  bool nuisance = true,
174  bool propensity = true) override;
175  void update_par(arma::cx_vec par);
176  void update_par(arma::vec par);
177 
178  arma::cx_mat est(arma::cx_vec par,
179  bool indiv = false,
180  const cx_dbl &value = 1);
181  arma::cx_mat est(bool indiv = false,
182  const cx_dbl &value = 1);
183  arma::mat deriv(const cx_dbl &value = 1);
184  };
185 
186 
188 
189  template<typename T>
190  arma::Mat<T> rd2prob(const arma::Col<T> &rd, const arma::Col<T> &op);
191 
192  template<typename T>
193  arma::Mat<T> rr2prob(const arma::Col<T> &rd, const arma::Col<T> &op);
194 
195 } // namespace target
void update_par(const arma::Col< T > &parameter)
update_par -
Definition: target.cpp:51
arma::Mat< T > rr2prob(const arma::Col< T > &rd, const arma::Col< T > &op)
rr2prob - Computes risk probabilities given exposure 0 or 1.
Definition: target.cpp:328
arma::Mat< T > rd2prob(const arma::Col< T > &rd, const arma::Col< T > &op)
rd2prob - Computes risk probabilities given exposure 0 or 1.
Definition: target.cpp:307
Utility functions for Generalized Linear Models.
Target()
Constructor.
Definition: target.hpp:38