exp.fam <- function(log.p0, suff.stats, nat.params, normalize=TRUE) { p <- exp(log.p0 + suff.stats %*% nat.params) if(normalize) { norm.const <- sum(p)/sum(exp(log.p0)) p <- p / norm.const } p } plot.exp.fam <- function(X,log.p0, suff.stats, nat.params) { p0 <- exp(log.p0) p.eta <- exp.fam(log.p0, suff.stats, nat.params) plot(X, p0, type="l",ylim=c(0,1.01*max(c(p0,p.eta))), lty=2,ylab="density",xlab="x",yaxs="i",xaxs="i", main=bquote("Exponential tilt:"~eta == "("~.(paste(nat.params, collapse=", "))~")") ) lines(X, p.eta) legend("topright", bty="n", lty=c(2,1), legend=c(expression(p[0](x),p[eta](x)))) } ## Triangle density X <- seq(-1,1,by=.001) log.p0 <- log(1-abs(X)) ## X, X^2 ~~> natural parameters shift first two moments suff.stats <- cbind(X,X^2) ## Tilt to the right or left plot.exp.fam(X, log.p0, suff.stats, c(1,0)) plot.exp.fam(X, log.p0, suff.stats, c(4,0)) plot.exp.fam(X, log.p0, suff.stats, c(-3,0)) ## Outside / inside plot.exp.fam(X, log.p0, suff.stats, c(0,-2)) plot.exp.fam(X, log.p0, suff.stats, c(0,-4)) ## Both plot.exp.fam(X, log.p0, suff.stats, c(.5,2)) ## add a "wiggly" natural parameter suff.stats <- cbind(X,X^2,cos(100*X)) plot.exp.fam(X, log.p0, suff.stats, c(1,2,.1))