.. _program_listing_file_include_gwmodelpp_GWPCA.h: Program Listing for File GWPCA.h ================================ |exhale_lsh| :ref:`Return to documentation for file ` (``include/gwmodelpp/GWPCA.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef GWPCA_H #define GWPCA_H #include "armadillo_config.h" #include #include #include "SpatialMonoscaleAlgorithm.h" #include "IMultivariableAnalysis.h" #include "IParallelizable.h" namespace gwm { class GWPCA: public SpatialMonoscaleAlgorithm, public IMultivariableAnalysis { private: typedef arma::mat (GWPCA::*Solver)(const arma::mat&, arma::cube&, arma::mat&); public: // Constructors and Deconstructors GWPCA() {} GWPCA(const arma::mat x, const arma::mat coords, const SpatialWeight& spatialWeight) : SpatialMonoscaleAlgorithm(spatialWeight, coords) { mX = x; } virtual ~GWPCA() {} int keepComponents() { return mK; } void setKeepComponents(int k) { mK = k; } const arma::mat& localPV() { return mLocalPV; } const arma::cube& loadings() { return mLoadings; } const arma::mat& sdev() { return mSDev; } const arma::cube& scores() { return mScores; } public: // IMultivariableAnalysis virtual const arma::mat& variables() const override { return mX; } virtual void setVariables(const arma::mat& x) override { mX = x; } virtual void run() override; public: // Algorithm virtual bool isValid() override; private: arma::mat pca(const arma::mat& x, arma::cube& loadings, arma::mat& sdev) { return (this->*mSolver)(x, loadings, sdev); } arma::mat solveSerial(const arma::mat& x, arma::cube& loadings, arma::mat& sdev); void wpca(const arma::mat& x, const arma::vec& w, arma::mat& V, arma::vec & d); private: // Algorithm Parameters int mK = 2; // bool mRobust = false; private: // Algorithm Results arma::mat mLocalPV; arma::cube mLoadings; arma::mat mSDev; arma::cube mScores; arma::uvec mWinner; private: // Algorithm Runtime Variables arma::mat mX; arma::vec mLatestWt; Solver mSolver = &GWPCA::solveSerial; }; } #endif // GWPCA_H