yat/regression/Cox.h

Code
Comments
Other
Rev Date Author Line
4198 19 Aug 22 peter 1 #ifndef theplu_yat_regression_cox
4198 19 Aug 22 peter 2 #define theplu_yat_regression_cox
4198 19 Aug 22 peter 3
4198 19 Aug 22 peter 4 // $Id$
4198 19 Aug 22 peter 5
4198 19 Aug 22 peter 6 /*
4198 19 Aug 22 peter 7   Copyright (C) 2022 Peter Johansson
4198 19 Aug 22 peter 8
4198 19 Aug 22 peter 9   This file is part of the yat library, https://dev.thep.lu.se/yat
4198 19 Aug 22 peter 10
4198 19 Aug 22 peter 11   The yat library is free software; you can redistribute it and/or
4198 19 Aug 22 peter 12   modify it under the terms of the GNU General Public License as
4198 19 Aug 22 peter 13   published by the Free Software Foundation; either version 3 of the
4198 19 Aug 22 peter 14   License, or (at your option) any later version.
4198 19 Aug 22 peter 15
4198 19 Aug 22 peter 16   The yat library is distributed in the hope that it will be useful,
4198 19 Aug 22 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
4198 19 Aug 22 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4198 19 Aug 22 peter 19   General Public License for more details.
4198 19 Aug 22 peter 20
4198 19 Aug 22 peter 21   You should have received a copy of the GNU General Public License
4198 19 Aug 22 peter 22   along with yat. If not, see <https://www.gnu.org/licenses/>.
4198 19 Aug 22 peter 23 */
4198 19 Aug 22 peter 24
4198 19 Aug 22 peter 25 #include <memory>
4198 19 Aug 22 peter 26 #include <vector>
4198 19 Aug 22 peter 27
4198 19 Aug 22 peter 28 namespace theplu {
4198 19 Aug 22 peter 29 namespace yat {
4198 19 Aug 22 peter 30   namespace utility {
4198 19 Aug 22 peter 31     class VectorBase;
4198 19 Aug 22 peter 32   }
4198 19 Aug 22 peter 33 namespace regression {
4198 19 Aug 22 peter 34
4198 19 Aug 22 peter 35
4198 19 Aug 22 peter 36   /**
4198 19 Aug 22 peter 37      Class handling univariable Cox regression.
4198 19 Aug 22 peter 38
4198 19 Aug 22 peter 39      The time-dependent hazard is modeled as
4198 19 Aug 22 peter 40      \f$ \lambda(t|x) = \lambda_0(t) \exp (bx) \f$
4198 19 Aug 22 peter 41
4198 19 Aug 22 peter 42      Model parameters are inferred as described by Breslow (1975) and
4198 19 Aug 22 peter 43      tied timepoints are handled as suggested by Efron (1975).
4198 19 Aug 22 peter 44    */
4198 19 Aug 22 peter 45   class Cox
4198 19 Aug 22 peter 46   {
4198 19 Aug 22 peter 47   public:
4198 19 Aug 22 peter 48     /**
4198 19 Aug 22 peter 49        \brief Default Constructor
4198 19 Aug 22 peter 50     */
4198 19 Aug 22 peter 51     Cox(void);
4198 19 Aug 22 peter 52
4198 19 Aug 22 peter 53     /**
4198 19 Aug 22 peter 54        \brief Copy Constructor
4198 19 Aug 22 peter 55
4198 19 Aug 22 peter 56        Create a copy of \c other and its data
4198 19 Aug 22 peter 57      */
4198 19 Aug 22 peter 58     Cox(const Cox& other);
4198 19 Aug 22 peter 59
4198 19 Aug 22 peter 60     /**
4198 19 Aug 22 peter 61        Move Constructor
4198 19 Aug 22 peter 62      */
4198 19 Aug 22 peter 63     Cox(Cox&& other);
4198 19 Aug 22 peter 64
4198 19 Aug 22 peter 65     /**
4198 19 Aug 22 peter 66        \brief Destructor
4198 19 Aug 22 peter 67      */
4198 19 Aug 22 peter 68     ~Cox(void);
4198 19 Aug 22 peter 69
4198 19 Aug 22 peter 70     /**
4198 19 Aug 22 peter 71        Assignment operator
4198 19 Aug 22 peter 72      */
4198 19 Aug 22 peter 73     Cox& operator=(const Cox& other);
4198 19 Aug 22 peter 74
4198 19 Aug 22 peter 75     /**
4198 19 Aug 22 peter 76        \brief Move assignment
4198 19 Aug 22 peter 77      */
4198 19 Aug 22 peter 78     Cox& operator=(Cox&& other);
4198 19 Aug 22 peter 79
4198 19 Aug 22 peter 80     /**
4198 19 Aug 22 peter 81        Add one data point
4198 19 Aug 22 peter 82
4198 19 Aug 22 peter 83        \param x value of the covariate variable
4198 19 Aug 22 peter 84        \param time timepoint when event occured or sample was censored
4198 19 Aug 22 peter 85        \param event true for non-censored sample
4198 19 Aug 22 peter 86      */
4198 19 Aug 22 peter 87     void add(double x, double time, bool event);
4198 19 Aug 22 peter 88
4198 19 Aug 22 peter 89     /**
4198 19 Aug 22 peter 90        \brief Add n data points
4198 19 Aug 22 peter 91
4198 19 Aug 22 peter 92        Equivalent to looping over the vectors and calling
4198 19 Aug 22 peter 93        single-sample version of add.
4198 19 Aug 22 peter 94      */
4198 19 Aug 22 peter 95     void add(const utility::VectorBase& x,
4198 19 Aug 22 peter 96              const utility::VectorBase& time,
4198 19 Aug 22 peter 97              const std::vector<char>& event);
4198 19 Aug 22 peter 98
4198 19 Aug 22 peter 99     /**
4198 19 Aug 22 peter 100        Remove all data.
4198 19 Aug 22 peter 101      */
4198 19 Aug 22 peter 102     void clear(void);
4198 19 Aug 22 peter 103
4198 19 Aug 22 peter 104     /**
4198 19 Aug 22 peter 105        Infer model parameter b and related, hazard ratio and their
4198 19 Aug 22 peter 106        confidence intervall.
4198 19 Aug 22 peter 107      */
4198 19 Aug 22 peter 108     void train(void);
4198 19 Aug 22 peter 109
4198 19 Aug 22 peter 110     /**
4198 19 Aug 22 peter 111        The time-dependent hazard is modeled as
4198 19 Aug 22 peter 112        \f$ \lambda(t|x) = \lambda_0(t) \exp (bx) \f$
4198 19 Aug 22 peter 113      */
4198 19 Aug 22 peter 114     double b(void) const;
4198 19 Aug 22 peter 115
4198 19 Aug 22 peter 116     /**
4198 19 Aug 22 peter 117        \return b divided by standard error of b.
4198 19 Aug 22 peter 118      */
4198 19 Aug 22 peter 119     double z(void) const;
4198 19 Aug 22 peter 120
4198 19 Aug 22 peter 121     /**
4198 19 Aug 22 peter 122        \brief two-sided p-value for the null-hypothesis that b is zero.
4198 19 Aug 22 peter 123      */
4198 19 Aug 22 peter 124     double p(void) const;
4198 19 Aug 22 peter 125
4198 19 Aug 22 peter 126     /**
4198 19 Aug 22 peter 127        The hazard ratio is defined as \f$ exp(b) \f$, in other words,
4198 19 Aug 22 peter 128        the amount the hazard increases when the co-variate x increases
4198 19 Aug 22 peter 129        with one unit.
4198 19 Aug 22 peter 130      */
4198 19 Aug 22 peter 131     double hazard_ratio(void) const;
4198 19 Aug 22 peter 132
4198 19 Aug 22 peter 133     /**
4198 19 Aug 22 peter 134        \return the lower bound of the alpha % confidence interval
4198 19 Aug 22 peter 135      */
4198 19 Aug 22 peter 136     double hazard_ratio_lower_CI(double alpha=0.95) const;
4198 19 Aug 22 peter 137
4198 19 Aug 22 peter 138     /**
4198 19 Aug 22 peter 139        \return the upper bound of the alpha % confidence interval
4198 19 Aug 22 peter 140      */
4198 19 Aug 22 peter 141     double hazard_ratio_upper_CI(double alpha=0.95) const;
4198 19 Aug 22 peter 142   private:
4198 19 Aug 22 peter 143     class Impl;
4198 19 Aug 22 peter 144     std::unique_ptr<Impl> pimpl_;
4198 19 Aug 22 peter 145   };
4198 19 Aug 22 peter 146
4198 19 Aug 22 peter 147 }}}
4198 19 Aug 22 peter 148
4198 19 Aug 22 peter 149 #endif