Guest User

Untitled

a guest
Jun 30th, 2014
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.09 KB | None | 0 0
  1. sourceCpp(code = '
  2. // [[Rcpp::depends(RcppArmadillo)]]
  3. #include <RcppArmadillo.h>
  4. using namespace Rcpp;
  5. // [[Rcpp::export]]
  6. List fastLm(NumericVector yr, NumericMatrix Xr) {
  7. int n = Xr.nrow(), k = Xr.ncol();
  8. arma::mat X(Xr.begin(), n, k, false);
  9. arma::colvec y(yr.begin(), yr.size(), false);
  10. arma::colvec coef = arma::solve(X, y);
  11. arma::colvec resid = y - X*coef;
  12. double sig2 = arma::as_scalar(arma::trans(resid)*resid/(n-
  13. k));
  14. arma::colvec stderrest = arma::sqrt(
  15. sig2 * arma::diagvec( arma::inv(arma::trans(X)*X)) );
  16. return List::create(Named("coefficients") = coef,
  17. Named("stderr") = stderrest);
  18. }')
  19. X = matrix(rnorm(100*2), ncol = 2)
  20. y = 0.5 + X %*% c(0.3, -0.7) + rnorm(100)
  21. fastLm(y, X)
  22.  
  23. sourceCpp(code = '
  24. // [[Rcpp::depends(RcppArmadillo)]]
  25. #include <RcppArmadillo.h>
  26. using namespace Rcpp;
  27. // [[Rcpp::export]]
  28. List fastLm(NumericVector yr, NumericMatrix Xr) {
  29. int n = Xr.nrow(), k = Xr.ncol();
  30. arma::mat X(Xr.begin(), n, k, false);
  31. arma::colvec y(yr.begin(), yr.size(), false);
  32. arma::colvec coef = arma::solve(X, y);
  33. arma::colvec resid = y - X*coef;
  34. double sig2 = arma::as_scalar(arma::trans(resid)*resid/(n-
  35. k));
  36. arma::colvec stderrest = arma::sqrt(
  37. sig2 * arma::diagvec( arma::inv(arma::trans(X)*X)) );
  38. return List::create(Named("coefficients") = coef,
  39. Named("stderr") = stderrest);
  40. }')
  41. X = matrix(rnorm(100*2), ncol = 2)
  42. y = 0.5 + X %*% c(0.3, -0.7) + rnorm(100)
  43. fastLm(y, X)
  44.  
  45. sourceCpp(code = '// [[Rcpp::depends(RcppEigen)]]
  46. #include <RcppEigen.h>
  47. using namespace Rcpp;
  48. using Eigen::Map;
  49. using Eigen::MatrixXd;
  50. using Eigen::VectorXd;
  51. // [[Rcpp::export]]
  52. List fastLm2(NumericVector yr, NumericMatrix Xr) {
  53. const Map<MatrixXd> X(as<Map<MatrixXd> >(Xr));
  54. const Map<VectorXd> y(as<Map<VectorXd> >(yr));
  55. int n = Xr.nrow(), k = Xr.ncol();
  56. VectorXd coef = (X.transpose() * X).llt().solve(X.transpose() * y.col(0));
  57. VectorXd resid = y - X*coef;
  58. double sig2 = resid.squaredNorm() / (n - k);
  59. VectorXd stderrest = (sig2 * ((X.transpose() * X).inverse()).diagonal()).array().sqrt();
  60. return List::create(Named("coefficients") = coef,
  61. Named("stderr") = stderrest);
  62. }')
  63. fastLm2(y, X)
Advertisement
Add Comment
Please, Sign In to add comment