# NOT RUN {
library(dglm)
library(sns)
# defining log-likelihood function
loglike.linreg <- function(coeff, X, y) {
regfac.expand.2par(coeff = coeff, X = X, Z = X, y = y
, fbase2 = fbase2.gaussian.identity.log, fgh = 2, block.diag = T)
}
# simulating data according to generative model
N <- 1000 # number of observations
K <- 5 # number of covariates
X <- matrix(runif(N*K, min=-0.5, max=+0.5), ncol=K)
beta <- runif(K, min=-0.5, max=+0.5)
gamma <- runif(K, min=-0.5, max=+0.5)
mean.vec <- X%*%beta
sd.vec <- exp(X%*%gamma)
y <- rnorm(N, mean.vec, sd.vec)
# estimation using dglm
est.dglm <- dglm(y~X-1, dformula = ~X-1, family = "gaussian", dlink = "log")
beta.dglm <- est.dglm$coefficients
gamma.dglm <- est.dglm$dispersion.fit$coefficients
# estimation using RegressionFactory
coeff.tmp <- rep(0, 2*K)
for (n in 1:10) {
coeff.tmp <- sns(coeff.tmp, fghEval=loglike.linreg
, X=X, y=y, rnd = F)
}
beta.regfac.vd <- coeff.tmp[1:K]
gamma.regfac.vd <- coeff.tmp[K+1:K]
# comparing dglm and RegressionFactory results
# neither beta's nor gamma's will match exactly
cbind(beta.dglm, beta.regfac.vd)
cbind(gamma.dglm, gamma.regfac.vd)
# }
Run the code above in your browser using DataLab