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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
double lmResp::updateMu(const Rcpp::NumericVector& gamma) { d_mu = d_offset + gamma; return updateWrss(); }
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(); }
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(); }