.. _program_listing_file_include_gwmodelpp_GWRScalable.h: Program Listing for File GWRScalable.h ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/gwmodelpp/GWRScalable.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #ifndef GWRSCALABLE_H #define GWRSCALABLE_H #include #include #include #include "GWRBase.h" #include "RegressionDiagnostic.h" #include "IBandwidthSelectable.h" #include "IVarialbeSelectable.h" #include "IParallelizable.h" #include #include namespace gwm { class GWRScalable : public GWRBase { public: enum BandwidthSelectionCriterionType { AIC, CV }; struct LoocvParams { const arma::mat* x; const arma::mat* y; const arma::uword polynomial; const arma::mat* Mx0; const arma::mat* My0; }; static double Loocv(const arma::vec& target, const arma::mat& x, const arma::vec& y, arma::uword poly, const arma::mat& Mx0, const arma::mat& My0); static double AICvalue(const arma::vec& target, const arma::mat& x, const arma::vec& y, arma::uword poly, const arma::mat& Mx0, const arma::mat& My0); private: static RegressionDiagnostic CalcDiagnostic(const arma::mat& x, const arma::vec& y, const arma::mat& betas, const arma::vec& shat); public: GWRScalable(){}; ~GWRScalable(){}; arma::uword polynomial() const { return mPolynomial; } void setPolynomial(arma::uword polynomial) { mPolynomial = polynomial; } double cv() const { return mCV; } double scale() const { return mScale; } double penalty() const { return mPenalty; } bool hasHatMatrix() const { return mHasHatMatrix; } void setHasHatMatrix(const bool has) { mHasHatMatrix = has; } BandwidthSelectionCriterionType parameterOptimizeCriterion() const { return mParameterOptimizeCriterion; } void setParameterOptimizeCriterion(const BandwidthSelectionCriterionType ¶meterOptimizeCriterion) { mParameterOptimizeCriterion = parameterOptimizeCriterion; } public: // SpatialAlgorithm interface bool isValid() override; public: // IRegressionAnalysis interface arma::mat fit() override; arma::mat predict(const arma::mat& locations) override; private: void findDataPointNeighbours(); arma::mat findNeighbours(const arma::mat& points, arma::umat &nnIndex); double optimize(const arma::mat& Mx0, const arma::mat& My0, double& b_tilde, double& alpha); void prepare(); arma::mat fitSerial(const arma::mat &x, const arma::vec &y); arma::mat predictSerial(const arma::mat& locations, const arma::mat& x, const arma::vec& y); private: arma::uword mPolynomial = 4; size_t mMaxIter = 500; double mCV = 0.0; double mScale = 1.0; double mPenalty = 0.01; bool mHasHatMatrix = true; SpatialWeight mDpSpatialWeight; BandwidthSelectionCriterionType mParameterOptimizeCriterion = BandwidthSelectionCriterionType::CV; arma::mat mG0; arma::umat mDpNNIndex; arma::mat mDpNNDists; arma::mat mMx0; arma::mat mMxx0; arma::mat mMy0; arma::vec mShat; arma::mat mBetasSE; }; } #endif // GWRSCALABLE_H