/* ----------------------------------------------------------------------- *//** * * @file LinearRegression_proto.hpp * *//* ----------------------------------------------------------------------- */ #ifndef MADLIB_MODULES_REGRESS_LINEAR_REGRESSION_PROTO_HPP #define MADLIB_MODULES_REGRESS_LINEAR_REGRESSION_PROTO_HPP namespace madlib { namespace modules { namespace regress { // Use Eigen using namespace dbal; using namespace dbal::eigen_integration; template class LinearRegressionAccumulator : public DynamicStruct, Container> { public: typedef DynamicStruct Base; MADLIB_DYNAMIC_STRUCT_TYPEDEFS; typedef std::tuple tuple_type; LinearRegressionAccumulator(Init_type& inInitialization); void bind(ByteStream_type& inStream); LinearRegressionAccumulator& operator<<(const tuple_type& inTuple); template LinearRegressionAccumulator& operator<<( const LinearRegressionAccumulator& inOther); template LinearRegressionAccumulator& operator=( const LinearRegressionAccumulator& inOther); uint64_type numRows; uint16_type widthOfX; double_type y_sum; double_type y_square_sum; ColumnVector_type X_transp_Y; Matrix_type X_transp_X; }; class LinearRegression { public: template LinearRegression( const LinearRegressionAccumulator& inState); template LinearRegression& compute( const LinearRegressionAccumulator& inState); MutableNativeColumnVector coef; double r2; MutableNativeColumnVector stdErr; MutableNativeColumnVector tStats; MutableNativeColumnVector pValues; double conditionNo; MutableNativeMatrix vcov; }; // ------------------------------------------------------------------------ template class RobustLinearRegressionAccumulator : public DynamicStruct, Container> { public: typedef DynamicStruct Base; MADLIB_DYNAMIC_STRUCT_TYPEDEFS; typedef std::tuple tuple_type; RobustLinearRegressionAccumulator(Init_type& inInitialization); void bind(ByteStream_type& inStream); RobustLinearRegressionAccumulator& operator<<(const tuple_type& inTuple); template RobustLinearRegressionAccumulator& operator<<( const RobustLinearRegressionAccumulator& inOther); template RobustLinearRegressionAccumulator& operator=( const RobustLinearRegressionAccumulator& inOther); uint64_type numRows; uint16_type widthOfX; ColumnVector_type ols_coef; Matrix_type X_transp_X; Matrix_type X_transp_r2_X; }; class RobustLinearRegression { public: template RobustLinearRegression( const RobustLinearRegressionAccumulator& inState); template RobustLinearRegression& compute( const RobustLinearRegressionAccumulator& inState); MutableNativeColumnVector coef; MutableNativeColumnVector stdErr; MutableNativeColumnVector tStats; MutableNativeColumnVector pValues; }; // ------------------------------------------------------------------------ // Accumulator class for testing heteroskedasticity template class HeteroLinearRegressionAccumulator : public DynamicStruct, Container> { public: typedef DynamicStruct Base; MADLIB_DYNAMIC_STRUCT_TYPEDEFS; typedef std::tuple hetero_tuple_type; HeteroLinearRegressionAccumulator(Init_type& inInitialization); void bind(ByteStream_type& inStream); HeteroLinearRegressionAccumulator& operator<<(const hetero_tuple_type& inTuple); template HeteroLinearRegressionAccumulator& operator<<( const HeteroLinearRegressionAccumulator& inOther); template HeteroLinearRegressionAccumulator& operator=( const HeteroLinearRegressionAccumulator& inOther); uint64_type numRows; uint16_type widthOfX; double_type a_sum; double_type a_square_sum; ColumnVector_type X_transp_A; Matrix_type X_transp_X; }; class HeteroLinearRegression { public: template HeteroLinearRegression( const HeteroLinearRegressionAccumulator& inState); template HeteroLinearRegression& compute( const HeteroLinearRegressionAccumulator& inState); double test_statistic; double pValue; }; } // namespace regress } // namespace modules } // namespace madlib #endif // defined(MADLIB_MODULES_REGRESS_LINEAR_REGRESSION_PROTO_HPP)