类 GTWR

Nested Relationships

Nested Types

继承关系

基类

类文档

class GTWR : public gwm::GWRBase, public gwm::IBandwidthSelectable, public gwm::IParallelizable, public gwm::IParallelOpenmpEnabled

时空地理加权回归算法的实现。 该算法可以自动选带宽。

公有类型

enum BandwidthSelectionCriterionType

用于带宽优选的指标类型。

Values:

enumerator AIC
enumerator CV
typedef arma::mat (GTWR::* PredictCalculator)(const arma::mat&, const arma::mat&, const arma::vec&)

预测函数声明。

typedef arma::mat (GTWR::* FitCalculator)(const arma::mat&, const arma::vec&, arma::mat&, arma::vec&, arma::vec&, arma::mat&)

拟合函数声明。

typedef double (GTWR::* BandwidthSelectionCriterionCalculator)(const std::unique_ptr<BandwidthWeight>&)

带宽优选指标计算函数声明。

typedef double (GTWR::* IndepVarsSelectCriterionCalculator)(const std::vector<std::size_t>&)

变量优选指标计算函数声明。

公有方法

inline const double getLambda()
inline const double getAngle()
inline GTWR()

构造 GTWR 对象。

inline GTWR(const arma::mat &x, const arma::vec &y, const arma::mat &coords, const SpatialWeight &spatialWeight, bool hasHatMatrix = true, bool hasIntercept = true)

构造 GTWR 对象。

参数:
  • x -- 自变量矩阵。

  • y -- 因变量。

  • coords -- 坐标矩阵。

  • spatialWeight -- 空间权重配置。

  • hasHatMatrix -- 是否计算帽子矩阵。

  • hasIntercept -- 是否有截距。

inline ~GTWR()

析构 GTWR 对象。

inline bool isAutoselectBandwidth() const

获取是否自动优选带宽。

返回:

true 如果自动优选带宽。

返回:

false 如果不自动优选带宽。

inline void setIsAutoselectBandwidth(bool isAutoSelect)

设置是否自动优选带宽。

参数:

isAutoSelect -- true 如果要自动优选带宽,否则 false。

inline BandwidthSelectionCriterionType bandwidthSelectionCriterion() const

获取带宽自动优选指标值类型。

返回:

BandwidthSelectionCriterionType 带宽自动优选指标值类型。

void setBandwidthSelectionCriterion(const BandwidthSelectionCriterionType &criterion)

设置带宽自动优选指标值类型。

参数:

criterion -- 带宽自动优选指标值类型。

inline BandwidthCriterionList bandwidthSelectionCriterionList() const

获取带宽优选过程的指标值列表。

返回:

BandwidthCriterionList 带宽优选过程的指标值列表。

inline bool hasHatMatrix() const

获取是否计算帽子矩阵。

返回:

true 如果计算帽子矩阵。

返回:

false 如果不计算帽子矩阵。

inline void setHasHatMatrix(const bool has)

设置是否计算帽子矩阵。

参数:

has -- true 如果计算帽子矩阵,否则 false。

inline void setCoords(const arma::mat &coords, const arma::vec &times)

设置空间坐标和时间向量。

参数:
  • coords -- 空间坐标矩阵.

  • times -- 时间戳向量.

inline const arma::mat &betasSE()

获取回归系数估计值的标准差。

返回:

arma::mat 回归系数估计值的标准差。

inline const arma::vec &sHat()

获取一个由 \(tr(S)\)\(tr(SS^T)\) 组成的向量。

返回:

arma::vec 由 \(tr(S)\)\(tr(SS^T)\) 组成的向量。

inline const arma::vec &qDiag()

获取矩阵 \(Q\) 的对角线元素。

返回:

arma::vec 矩阵 \(Q\) 的对角线元素。

inline const arma::mat &s()

获取帽子矩阵 \(S\)

返回:

arma::mat 帽子矩阵 \(S\)

virtual bool isValid() override

检查算法配置是否合法。

返回:

true 如果算法配置是合法的。

返回:

false 如果算法配置不合法。

virtual arma::mat predict(const arma::mat &locations) override

在指定位置处进行回归系数预测。

参数:

locations -- 指定位置。

返回:

mat 回归系数预测值。

virtual arma::mat fit() override

拟合回归系数估计值。

返回:

mat 回归系数估计值。

inline virtual Status getCriterion(const std::unique_ptr<BandwidthWeight> &weight, double &criterion) override

根据指定的带宽计算带宽优选的指标值。

参数:
  • weight -- 指定的带宽。

  • criterion -- [出参] 带宽优选的指标值。

  • Status -- 算法运行状态。

inline virtual int parallelAbility() const override

返回该算法的并行能力。

返回:

当前算法并行能力的按位或运算结果。

inline virtual ParallelType parallelType() const override

返回当前算法的并行类型。

返回:

当前算法的并行类型。

virtual void setParallelType(const ParallelType &type) override

设置当前算法的并行类型。

参数:

type -- 当前算法的并行类型。

inline virtual void setOmpThreadNum(const int threadNum) override

设置并行线程数。

参数:

threadNum -- 并行线程数。

inline void setIsAutoselectLambda(bool isAutoSelect)

获取是否自动优选lambda。

返回:

true 如果自动优选lambda。

返回:

false 如果不自动优选lambda。

inline void setIsAutoselectLambdaBw(bool isAutoSelect)

公有静态方法

static inline std::string infoLambdaCriterion()

获取当前 lambda 值和对应指标值的元信息。

返回:

std::string 信息字符串

static inline std::string infoLambdaCriterion(const double &lambda, const double &criterion)

获取当前 lambda 值和对应指标值的信息。

参数:
  • lambda -- Lambda 值

  • criterion -- 指标值

返回:

std::string 信息字符串

公有静态属性

static std::unordered_map<BandwidthSelectionCriterionType, std::string> BandwidthSelectionCriterionTypeNameMapper

保护方法

inline bool isStoreS()

是否保存帽子矩阵 \(S\).

返回:

true 如果保存帽子矩阵。

返回:

false 如果不保存帽子矩阵。

void createPredictionDistanceParameter(const arma::mat &locations)

生成用于预测的距离参数。

参数:

locations -- 用于预测的距离参数。

void createDistanceParameter()

生成距离参数。

double lambdaAutoSelection(const BandwidthWeight &bandwidthWeight)

lambda和带宽自动选择。函数还没写好。

lambda自动选择。

参数:

bandwidthWeight -- 传入带宽值,来获取权重,后续更方便改成多元优化.

返回:

double 返回优选以后的lambda值.

Status r_squareByLambda(const BandwidthWeight &bandwidthWeight, double lambda, double &rsquare)

lambda获得R方,作为优选的函数。

参数:
  • bandwidthWeight -- 输入带宽权重,

  • lambda -- 输入要获取R方的lambda值。

  • rsquare -- 根据输入的lambda值和带宽获取的R方值.

返回:

Status 算法运行状态。

arma::vec lambdaBwAutoSelection(BandwidthWeight &bandwidth, size_t max_iter, double min_step)

优化的主函数

参数:
  • bandwidth -- BandwidthWeight类型,带宽

  • max_iter -- 最大迭代次数,设置为1000

  • min_step -- 优化中的步长,设置为0.01(变化阈值为步长/1000)

返回:

优化结果,一个向量:(lambda, bw).

double criterionByLambdaBw(const BandwidthWeight &bandwidth, double lambda, BandwidthSelectionCriterionType criterion)

利用带宽和lambda计算指标的函数

参数:
  • bandwidthWeight -- 输入带宽权重,

  • lambda -- 获取指标的lambda值

  • criterion -- BandwidthSelectionCriterionType类型,确定求的指标

返回:

对应类型的指标值

inline CRSSTDistance &stDistance() const

保护属性

bool mHasHatMatrix = true

是否具有帽子矩阵。

bool mHasFTest = false

待办事项:

是否具有F检验。

bool mHasPredict = false

弃用:

是否有预测位置处的变量。

bool mIsAutoselectBandwidth = false

是否需要自动优选带宽。

bool mIsAutoselectLambda = false

是否需要自动优选lambda。

bool mIsAutoselectLambdaBw = false
BandwidthSelectionCriterionType mBandwidthSelectionCriterion = BandwidthSelectionCriterionType::AIC

默认的带宽优选方式。

BandwidthSelectionCriterionCalculator mBandwidthSelectionCriterionFunction = &GTWR::bandwidthSizeCriterionCVSerial

默认的带宽优选函数。

BandwidthCriterionList mBandwidthSelectionCriterionList

默认的带宽优选参数列表。

double mBandwidthLastCriterion = DBL_MAX

上一次带宽优选的有效指标值。

PredictCalculator mPredictFunction = &GTWR::predictSerial

默认的Predict函数。

FitCalculator mFitFunction = &GTWR::fitSerial

默认的Fit函数。

ParallelType mParallelType = ParallelType::SerialOnly

并行方法类型。

int mOmpThreadNum = 8

并行计算创建的线程数。

arma::mat mBetasSE

回归系数估计值的标准差。

arma::vec mSHat

\(tr(S)\)\(tr(SS^T)\) 组成的向量。

arma::vec mQDiag

矩阵 \(Q\) 的对角线元素。

arma::mat mS

帽子矩阵 \(S\)

arma::vec vTimes

输入时间的向量。

Protected Static Functions

static double criterion_function(const gsl_vector *v, void *params)

构建gsl的gsl_multimin_function以及优化指标

参数:
  • v -- gsl的优化向量(lambda, bw)

  • params -- 传入的参数,从void*转换成Parameter*

返回:

CV或AIC的指标值

struct Parameter

Public Members

GTWR *instance
BandwidthWeight &bandwidth
double lambda