Program Listing for File GWRRobust.h

Return to documentation for file (include/gwmodelpp/GWRRobust.h)

#ifndef GWRROBUST_H
#define GWRROBUST_H

#include <utility>
#include <string>
#include <initializer_list>
#include "GWRBase.h"
#include "RegressionDiagnostic.h"
#include "IBandwidthSelectable.h"
#include "IVarialbeSelectable.h"
#include "IParallelizable.h"
#include "GWRBasic.h"

namespace gwm
{

class GWRRobust : public GWRBasic
{
private:
    typedef arma::mat (GWRRobust::*RegressionHatmatrix)(const arma::mat &, const arma::vec &, arma::mat &, arma::vec &, arma::vec &, arma::mat &);

    static RegressionDiagnostic CalcDiagnostic(const arma::mat &x, const arma::vec &y, const arma::mat &betas, const arma::vec &shat);

public:

    GWRRobust() {}

    ~GWRRobust() {}

public:

    bool filtered() const { return mFiltered; }

    void setFiltered(bool value) { mFiltered = value; }

public: // Implement IRegressionAnalysis
    arma::mat predict(const arma::mat& locations) override;
    arma::mat fit() override;
    arma::mat regressionHatmatrix(const arma::mat &x, const arma::vec &y, arma::mat &betasSE, arma::vec &shat, arma::vec &qdiag, arma::mat &S);

private:
    arma::mat fitSerial(const arma::mat& x, const arma::vec& y, arma::mat& betasSE, arma::vec& shat, arma::vec& qDiag, arma::mat& S);

#ifdef ENABLE_OPENMP
    //arma::mat predictOmp(const arma::mat& locations, const arma::mat& x, const arma::vec& y);
    arma::mat fitOmp(const arma::mat& x, const arma::vec& y, arma::mat& betasSE, arma::vec& shat, arma::vec& qDiag, arma::mat& S);
#endif

protected:

    arma::mat robustGWRCaliFirst(const arma::mat &x, const arma::vec &y, arma::mat &betasSE, arma::vec &shat, arma::vec &qDiag, arma::mat &S);

    arma::mat robustGWRCaliSecond(const arma::mat &x, const arma::vec &y, arma::mat &betasSE, arma::vec &shat, arma::vec &qDiag, arma::mat &S);

    arma::vec filtWeight(arma::vec residual, double mse);

public : // Implement IParallelizable
    void setParallelType(const ParallelType &type) override;

protected:

    void createPredictionDistanceParameter(const arma::mat& locations);

private:
    bool mFiltered;

    arma::mat mS;
    arma::vec mWeightMask;

    RegressionHatmatrix mfitFunction = &GWRRobust::fitSerial;
};

}

#endif // GWRROBUST_H