################################################################################################## # Various log.likelihood functions I use for simulation analysis ################################################################################################## poisson.posterior.ll <- function(theta.vector,X) { Y <- X[,1] X[,1] <- rep(1,nrow(X)) Y%*%X%*%theta.vector - sum(exp(X%*%theta.vector)) - sum(log(gamma(Y+1))) } logit.posterior.ll <- function(theta.vector,X) { Y <- X[,1] X[,1] <- rep(1,nrow(X)) sum( -log(1+exp(-X%*%theta.vector))*Y - log(1+exp(X%*%theta.vector))*(1-Y) ) } normal.posterior.ll <- function(coef.vector,X) { dimnames(coef.vector) <- NULL Y <- X[,1] X[,1] <- rep(1,nrow(X)) e <- Y - X%*%solve(t(X)%*%X)%*%t(X)%*%Y sigma <- var(e) return(- nrow(X)*(1/2)*log(2*pi) - nrow(X)*(1/2)*log(sigma) - (1/(2*sigma))*(t(Y-X%*%coef.vector)%*%(Y-X%*%coef.vector)) ) } t.posterior.ll <- function(coef.vector,X,df) { Y <- X[,1] X[,1] <- rep(1,nrow(X)) e <- Y - X%*%solve(t(X)%*%X)%*%t(X)%*%Y sigma <- var(e)*(df-2)/(df) d <- length(coef.vector) return(log(gamma((df+d)/2)) - log(gamma(df/2)) - (d/2)*log(df) - (d/2)*log(pi) - - 0.5*(log(sigma)) - ((df+d)/2*sigma)*log(1+(1/df)*(t(Y-X%*%coef.vector)%*%(Y-X%*%coef.vector)) )) } harvey.posterior.ll <- function(theta.vector,X,tol=1e-05) { Y <- X[,1] X[,1] <- rep(1,nrow(X)) Xb <- (X%*%theta.vector[1:4])/(exp(X[,4]*theta.vector[5])) h <- pnorm(Xb) h[h tol) stop("rmultinorm error: variance-covariance matrix not symmetric") vs <- svd(vcmat) vcsqrt <- t(vs$v %*% (t(vs$u) * sqrt(vs$d))) ans.mat <- sweep(matrix(rnorm(num.vals*k), nrow = num.vals) %*% vcsqrt,2,mu.vec,"+") dimnames(ans.mat) <- list(NULL, dimnames(vcmat)[[2]]) return(ans.mat) } ################################################################################################## # and one to calc density values ################################################################################################## dmultinorm <- function(xval,yval,mu.vector,sigma.matrix) { normalizer <- (2*pi*sigma.matrix[1,1]*sigma.matrix[2,2]*sqrt(1-sigma.matrix[1,2]^2))^(-1) like <- exp(-(1/(2*(1-sigma.matrix[1,2]^2)))* ( ((xval-mu.vector[1])/sigma.matrix[1,1])^2 -2*sigma.matrix[1,2]*(((xval-mu.vector[1])/sigma.matrix[1,1])*((yval-mu.vector[2])/sigma.matrix[2,2])) + ((yval-mu.vector[2])/sigma.matrix[2,2])^2 ) ) pdf.out <- normalizer * like return(pdf.out) } ################################################################################################## # Modification of Venebles and Ripley function to get the variance/covariance mat from glm object ################################################################################################## glm.vc <- function(obj) { summary(obj)$dispersion * summary(obj)$cov.unscaled } ################################################################################################## # a simple function to norm vectors ################################################################################################## norm <- function(obj) { (obj - mean(obj))/sqrt(var(obj)) } ################################################################################################## # A function to give CI tabulated results for GLMs ################################################################################################## glm.summary <- function (in.object, alpha = 0.05) { lo <- in.object$coefficient - qnorm(1-alpha/2) * diag(chol(summary(in.object)$cov.unscaled)) hi <- in.object$coefficient + qnorm(1-alpha/2) * diag(chol(summary(in.object)$cov.unscaled)) out.mat <- round(cbind(in.object$coefficient, sqrt(diag(glm.vc(in.object))), lo, hi),5) dimnames(out.mat)[[2]] <- c("Coefficient","Std. Error", paste(1-alpha,"CI Lower"),paste(1-alpha,"CI Upper")) out.mat }