Exemplo n.º 1
0
    double glmResp::updateWts() {
	d_sqrtrwt = sqrt(d_weights/d_fam.variance(d_mu));
	NumericVector muEta = d_fam.muEta(d_eta);
	std::transform(muEta.begin(), muEta.end(), d_sqrtrwt.begin(),
		       d_sqrtXwt.begin(), std::multiplies<double>());
	return updateWrss();
    }
Exemplo n.º 2
0
    void merResp::init() {
#ifdef USE_RCPP_SUGAR
	d_sqrtrwt = sqrt(d_weights);
#else
	std::transform(d_weights.begin(), d_weights.end(), d_sqrtrwt.begin(), &::sqrt);
#endif
	std::copy(d_sqrtrwt.begin(), d_sqrtrwt.end(), d_sqrtXwt.begin());
	updateWrss();
    }
Exemplo n.º 3
0
    double lmerResp::updateMu(const Rcpp::NumericVector& gamma) {
#ifdef USE_RCPP_SUGAR
	d_mu = d_offset + gamma;
#else
	std::transform(gamma.begin(), gamma.end(), d_offset.begin(),
		       d_mu.begin(), std::plus<double>());
#endif
	return updateWrss();
    }
Exemplo n.º 4
0
    double glmerResp::updateMu(const Rcpp::NumericVector& gamma) {
#ifdef USE_RCPP_SUGAR
	d_eta = d_offset + gamma;
#else
	std::transform(d_offset.begin(), d_offset.end(), gamma.begin(),
		       d_eta.begin(), std::plus<double>());
#endif
	NumericVector mmu = d_fam.linkInv(d_eta);
	std::copy(mmu.begin(), mmu.end(), d_mu.begin());
	return updateWrss();
    }
Exemplo n.º 5
0
    double glmerResp::updateWts() {
#ifdef USE_RCPP_SUGAR
	d_sqrtrwt = sqrt(d_weights/variance());
	NumericVector tmp = muEta() * d_sqrtrwt;
#else
	NumericVector vv = variance();
	std::transform(d_weights.begin(), d_weights.end(), vv.begin(),
		       d_sqrtrwt.begin(), std::divides<double>());
	std::transform(d_sqrtrwt.begin(), d_sqrtrwt.end(),
		       d_sqrtrwt.begin(), &::sqrt);
	NumericVector tmp = muEta();
	std::transform(tmp.begin(), tmp.end(), d_sqrtrwt.begin(),
		       tmp.begin(), std::multiplies<double>());
#endif
	std::copy(tmp.begin(), tmp.end(), d_sqrtXwt.begin());
	
	return updateWrss();
    }
Exemplo n.º 6
0
    double nlmerResp::updateMu(Rcpp::NumericVector const &gamma) throw(std::runtime_error) {
	int n = d_y.size();
#ifdef USE_RCPP_SUGAR
	Rcpp::NumericVector gam = gamma + d_offset;
#else
	NumericVector gam(d_offset.size());
	std::transform(gamma.begin(), gamma.end(), d_offset.begin(),
		       gam.begin(), std::plus<double>());
#endif
	double *gg = gam.begin();

	for (int p = 0; p < d_pnames.size(); p++) {
	    std::string pn(d_pnames[p]);
	    Rcpp::NumericVector pp = d_nlenv.get(pn);
	    std::copy(gg + n * p, gg + n * (p + 1), pp.begin());
	}
	NumericVector rr = d_nlmod.eval(SEXP(d_nlenv));
	if (rr.size() != n)
	    throw std::runtime_error("dimension mismatch");
	std::copy(rr.begin(), rr.end(), d_mu.begin());
	NumericMatrix rrg = rr.attr("gradient");
	std::copy(rrg.begin(), rrg.end(), d_sqrtXwt.begin());
	return updateWrss();
    }
Exemplo n.º 7
0
    double lmResp::updateMu(const Rcpp::NumericVector& gamma) {
	d_mu = d_offset + gamma;
	return updateWrss();
    }
Exemplo n.º 8
0
    double glmResp::updateMu(const Rcpp::NumericVector& gamma) {
	d_eta = d_offset + gamma;
	NumericVector mmu = d_fam.linkInv(d_eta);
	std::copy(mmu.begin(), mmu.end(), d_mu.begin());
	return updateWrss();
    }
Exemplo n.º 9
0
    lmerResp::lmerResp(Rcpp::S4 xp) throw (std::runtime_error)
	: merResp(xp),
	  d_reml(*Rcpp::IntegerVector(xp.slot("REML")).begin()) {
	std::copy(d_offset.begin(), d_offset.end(), d_mu.begin());
	updateWrss();
    }