yat/regression/MultiCox.h

Code
Comments
Other
Rev Date Author Line
4198 19 Aug 22 peter 1 #ifndef theplu_yat_regression_multi_cox
4198 19 Aug 22 peter 2 #define theplu_yat_regression_multi_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   class MatrixBase;
4198 19 Aug 22 peter 33 }
4198 19 Aug 22 peter 34
4198 19 Aug 22 peter 35 namespace regression {
4198 19 Aug 22 peter 36
4198 19 Aug 22 peter 37   /**
4198 19 Aug 22 peter 38      Class handling multivariable Cox regression.
4198 19 Aug 22 peter 39
4198 19 Aug 22 peter 40      The time-dependent hazard is modeled as
4198 19 Aug 22 peter 41      \f$ \lambda(t|x) = \lambda_0(t) \exp (x * b) \f$
4198 19 Aug 22 peter 42
4198 19 Aug 22 peter 43      Model parameters are inferred as described by Breslow (1975) and
4198 19 Aug 22 peter 44      tied timepoints are handled as suggested by Efron (1975).
4198 19 Aug 22 peter 45    */
4198 19 Aug 22 peter 46   class MultiCox
4198 19 Aug 22 peter 47   {
4198 19 Aug 22 peter 48   public:
4198 19 Aug 22 peter 49     /**
4198 19 Aug 22 peter 50        \brief Default Constructor
4198 19 Aug 22 peter 51     */
4198 19 Aug 22 peter 52     MultiCox(void);
4198 19 Aug 22 peter 53
4198 19 Aug 22 peter 54     /**
4198 19 Aug 22 peter 55        \brief Copy Constructor
4198 19 Aug 22 peter 56
4198 19 Aug 22 peter 57        Create a copy of \c other and its data
4198 19 Aug 22 peter 58      */
4198 19 Aug 22 peter 59     MultiCox(const MultiCox& other);
4198 19 Aug 22 peter 60
4198 19 Aug 22 peter 61     /**
4198 19 Aug 22 peter 62        Move constructor
4198 19 Aug 22 peter 63      */
4198 19 Aug 22 peter 64     MultiCox(MultiCox&& other);
4198 19 Aug 22 peter 65
4198 19 Aug 22 peter 66     /**
4198 19 Aug 22 peter 67        Destructor
4198 19 Aug 22 peter 68      */
4198 19 Aug 22 peter 69     ~MultiCox(void);
4198 19 Aug 22 peter 70
4198 19 Aug 22 peter 71     /**
4198 19 Aug 22 peter 72        Assignment operator
4198 19 Aug 22 peter 73      */
4198 19 Aug 22 peter 74     MultiCox& operator=(const MultiCox& other);
4198 19 Aug 22 peter 75
4198 19 Aug 22 peter 76     /**
4198 19 Aug 22 peter 77        Move assignment
4198 19 Aug 22 peter 78      */
4198 19 Aug 22 peter 79     MultiCox& operator=(MultiCox&& other);
4198 19 Aug 22 peter 80
4198 19 Aug 22 peter 81     /**
4198 19 Aug 22 peter 82        \brief add a sample
4198 19 Aug 22 peter 83
4198 19 Aug 22 peter 84        \param x value covariate vector for sample
4198 19 Aug 22 peter 85        \param time timepoint when event occured for sample or sample
4198 19 Aug 22 peter 86        was censored
4198 19 Aug 22 peter 87        \param event true if sample was not censored
4198 19 Aug 22 peter 88      */
4198 19 Aug 22 peter 89     void add(const utility::VectorBase& x, double time, bool event);
4198 19 Aug 22 peter 90
4198 19 Aug 22 peter 91     /**
4198 19 Aug 22 peter 92        \brief Add n data points
4198 19 Aug 22 peter 93
4198 19 Aug 22 peter 94        Each column in \a X corresponds to a data point. Equivalent to
4198 19 Aug 22 peter 95        looping over the columns and vectors and calling single-sample
4198 19 Aug 22 peter 96        version of add.
4198 19 Aug 22 peter 97      */
4198 19 Aug 22 peter 98     void add(const utility::MatrixBase& x,
4198 19 Aug 22 peter 99              const utility::VectorBase& time,
4198 19 Aug 22 peter 100              const std::vector<char>& event);
4198 19 Aug 22 peter 101
4198 19 Aug 22 peter 102     /**
4198 19 Aug 22 peter 103        Remove all data
4198 19 Aug 22 peter 104      */
4198 19 Aug 22 peter 105     void clear(void);
4198 19 Aug 22 peter 106
4198 19 Aug 22 peter 107     /**
4198 19 Aug 22 peter 108        Find the parameters of the model
4198 19 Aug 22 peter 109      */
4198 19 Aug 22 peter 110     void train(void);
4198 19 Aug 22 peter 111
4198 19 Aug 22 peter 112     /**
4198 19 Aug 22 peter 113        return ith element of the b-vector
4198 19 Aug 22 peter 114      */
4198 19 Aug 22 peter 115     double b(size_t i) const;
4198 19 Aug 22 peter 116
4198 19 Aug 22 peter 117     /**
4198 19 Aug 22 peter 118        \return ith element of b divided by its standard error.
4198 19 Aug 22 peter 119      */
4198 19 Aug 22 peter 120     double z(size_t i) const;
4198 19 Aug 22 peter 121
4198 19 Aug 22 peter 122     /**
4198 19 Aug 22 peter 123        \brief two-sided p-value for the null-hypothesis that \f$ b_i
4198 19 Aug 22 peter 124        \f$ is zero.
4198 19 Aug 22 peter 125     */
4198 19 Aug 22 peter 126     double p(size_t i) const;
4198 19 Aug 22 peter 127
4198 19 Aug 22 peter 128     /**
4198 19 Aug 22 peter 129        The hazard ratio associated with the ith variable.
4198 19 Aug 22 peter 130      */
4198 19 Aug 22 peter 131     double hazard_ratio(size_t i) const;
4198 19 Aug 22 peter 132
4198 19 Aug 22 peter 133     /**
4198 19 Aug 22 peter 134        Lower bound of confidence interval
4198 19 Aug 22 peter 135      */
4198 19 Aug 22 peter 136     double hazard_ratio_lower_CI(size_t, double alpha=0.95) const;
4198 19 Aug 22 peter 137
4198 19 Aug 22 peter 138     /**
4198 19 Aug 22 peter 139        Upper bound of confidence interval
4198 19 Aug 22 peter 140      */
4198 19 Aug 22 peter 141     double hazard_ratio_upper_CI(size_t, double alpha=0.95) const;
4198 19 Aug 22 peter 142
4198 19 Aug 22 peter 143     /**
4198 19 Aug 22 peter 144        \return the covariance of the estimate b-vector; the diagonal
4198 19 Aug 22 peter 145        contains the standard errors.
4198 19 Aug 22 peter 146      */
4198 19 Aug 22 peter 147     const utility::MatrixBase& covariance(void) const;
4198 19 Aug 22 peter 148   private:
4198 19 Aug 22 peter 149     class Impl;
4198 19 Aug 22 peter 150     std::unique_ptr<Impl> pimpl_;
4198 19 Aug 22 peter 151   };
4198 19 Aug 22 peter 152
4198 19 Aug 22 peter 153 }}}
4198 19 Aug 22 peter 154
4198 19 Aug 22 peter 155 #endif