7fitOls(
const Eigen::MatrixXd& X,
const Eigen::VectorXd& y,
bool fit_intercept)
9 Eigen::MatrixXd x_mod = X;
13 Eigen::MatrixXd ones = Eigen::MatrixXd::Ones(x_mod.rows(), 1);
14 x_mod.conservativeResize(Eigen::NoChange, x_mod.cols() + 1);
15 x_mod.rightCols(1) = ones;
19 Eigen::ColPivHouseholderQR<Eigen::MatrixXd> qr(x_mod);
20 Eigen::VectorXd all_coefs = qr.solve(y);
22 double intercept = 0.0;
23 Eigen::VectorXd coeffs;
26 intercept = all_coefs(all_coefs.size() - 1);
27 coeffs = all_coefs.head(all_coefs.size() - 1);
32 return { intercept, coeffs };
36fitOls(
const Eigen::SparseMatrix<double>& X,
37 const Eigen::VectorXd& y,
40 Eigen::SparseMatrix<double> x_mod = X;
44 Eigen::VectorXd ones = Eigen::VectorXd::Ones(x_mod.rows());
45 Eigen::SparseMatrix<double> intercept_col(x_mod.rows(), 1);
46 intercept_col.reserve(x_mod.rows());
48 for (
int i = 0; i < x_mod.rows(); ++i) {
49 intercept_col.insert(i, 0) = ones(i);
53 Eigen::SparseMatrix<double> temp(x_mod.rows(), x_mod.cols() + 1);
54 temp.leftCols(x_mod.cols()) = x_mod;
55 temp.rightCols(1) = intercept_col;
60 Eigen::SparseQR<Eigen::SparseMatrix<double>, Eigen::COLAMDOrdering<int>>
62 solver.compute(x_mod);
63 Eigen::VectorXd all_cofs = solver.solve(y);
65 double intercept = 0.0;
66 Eigen::VectorXd coeffs;
69 intercept = all_cofs(all_cofs.size() - 1);
70 coeffs = all_cofs.head(all_cofs.size() - 1);
75 return { intercept, coeffs };