View difference between Paste ID: eMM8yuWF and i2B1Eevn
SHOW: | | - or go back to the newest paste.
1
2
3
sourceCpp(code = '#include <Rcpp.h>
4
using namespace Rcpp;
5
6
// [[Rcpp::export]]
7-
int n = Xr.nrow(), k = Xr.ncol();
7+
DataFrame mypnorm(NumericVector x){
8-
arma::mat X(Xr.begin(), n, k, false);
8+
	int n = x.size();
9-
arma::colvec y(yr.begin(), yr.size(), false);
9+
	NumericVector y1(n), y2(n), y3(n);
10-
arma::colvec coef = arma::solve(X, y);
10+
	
11-
arma::colvec resid = y - X*coef;
11+
	for (int i=0; i<n; i++){
12-
double sig2 = arma::as_scalar(arma::trans(resid)*resid/(n-
12+
		y1[i] = ::Rf_pnorm5(x[i], 0.0, 1.0, 1, 0);
13-
k));
13+
		y2[i] = R::pnorm(x[i], 0.0, 1.0, 1, 0);
14-
arma::colvec stderrest = arma::sqrt(
14+
	}
15-
sig2 * arma::diagvec( arma::inv(arma::trans(X)*X)) );
15+
	y3 = pnorm(x);
16-
return List::create(Named("coefficients") = coef,
16+
	return DataFrame::create(Named("R") = y1,
17-
Named("stderr") = stderrest);
17+
				 Named("Rf_") = y2,
18
				 Named("sugar") = y3);
19
}')
20
mypnorm(runif(10, -3, 3))
21
22
sourceCpp(code = '
23
// [[Rcpp::depends(RcppArmadillo)]]
24
#include <RcppArmadillo.h>
25
using namespace Rcpp;
26
// [[Rcpp::export]]
27
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-
const Map<MatrixXd> X(as<Map<MatrixXd> >(Xr));
31+
	arma::colvec y(yr.begin(), yr.size(), false);
32-
const Map<VectorXd> y(as<Map<VectorXd> >(yr));
32+
	arma::colvec coef = arma::solve(X, y);
33-
int n = Xr.nrow(), k = Xr.ncol();
33+
	arma::colvec resid = y - X*coef;
34-
VectorXd coef = (X.transpose() * X).llt().solve(X.transpose() * y.col(0));
34+
	double sig2 = arma::as_scalar(arma::trans(resid)*resid/(n-k));
35-
VectorXd resid = y - X*coef;
35+
	arma::colvec stderrest = arma::sqrt(sig2 * arma::diagvec( arma::inv(arma::trans(X)*X)) );
36-
double sig2 = resid.squaredNorm() / (n - k);
36+
	return List::create(Named("coefficients") = coef,
37-
VectorXd stderrest = (sig2 * ((X.transpose() * X).inverse()).diagonal()).array().sqrt();
37+
                            Named("stderr") = stderrest);
38-
return List::create(Named("coefficients") = coef,
38+
39-
Named("stderr") = stderrest);
39+
40
y = 0.5 + X %*% c(0.3, -0.7) + rnorm(100)
41
fastLm(y, X)
42
43
sourceCpp(code = '// [[Rcpp::depends(RcppEigen)]]
44
#include <RcppEigen.h>
45
using namespace Rcpp;
46
using Eigen::Map;
47
using Eigen::MatrixXd;
48
using Eigen::VectorXd;
49
// [[Rcpp::export]]
50
51
List fastLm2(NumericVector yr, NumericMatrix Xr) {
52
	const Map<MatrixXd> X(as<Map<MatrixXd> >(Xr));
53
	const Map<VectorXd> y(as<Map<VectorXd> >(yr));
54
	int n = Xr.nrow(), k = Xr.ncol();
55
	VectorXd coef = (X.transpose() * X).llt().solve(X.transpose() * y.col(0));
56
	VectorXd resid = y - X*coef;
57
	double sig2 = resid.squaredNorm() / (n - k);
58
	VectorXd stderrest = (sig2 * ((X.transpose() * X).inverse()).diagonal()).array().sqrt();
59
	return List::create(Named("coefficients") = coef,
60
			    Named("stderr") = stderrest);
61
}')
62
fastLm2(y, X)