Description Usage Arguments Value Author(s) See Also Examples
Vectorized, double-parameter base log-likelihood functions for Gaussian GLM. The link functions map the mean and variance to linear predictors. The base function can be supplied to the expander function regfac.expand.2par
in order to obtain the full, high-dimensional log-likleihood and its derivatives.
1 | fbase2.gaussian.identity.log(u, v, y, fgh = 2)
|
u |
First parameter of the base log-likelihood function (usually the mean). This parameter is intended to be projected onto a high-dimensional space using the familiar regression transformation of |
v |
Second parameter of the base log-likelihood function (usually the mean). This parameter is intended to be projected onto a high-dimensional space using the familiar regression transformation of |
y |
Fixed slot of the base distribution, corresponding to the response variable in the regression model. For |
fgh |
Integer with possible values 0,1,2. If |
If fgh==0
, the function returns -0.5*(v + exp(-v)*(u-y)*(u-y))
(ignoring additive terms that are independent of u,v
). It will therefore be of the same length as u
. If fgh==1
, a list is returned with elements f
and g
, where f
is the same object as in fgh==1
and g
is a matrix of dimensions length(u)
-by-2, with first column being the derivative of the above expression with respect to u
, and the second column being the derivative of the above expression with respect to v
. If fgh==2
, the list will include an element named h
, which is a matrix of dimensions length(u)
-by-3, with the first column being the second derivative of f
with respect to u
, the second column being the second derivative of f
with respect to v
, and the third column is the cross-derivative term, i.e. the derivative of f
with respect to u
and v
.
Alireza S. Mahani, Mansour T.A. Sharabiani
regfac.expand.2par
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | ## Not run:
library(sns)
library(MfUSampler)
library(dglm)
# defining log-likelihood function
# vd==FALSE leads to constant-dispersion model (ordinary linear regression)
# while vd==TRUE produces varying-dispersion model
loglike.linreg <- function(coeff, X, y, fgh, block.diag = F, vd = F) {
if (vd) regfac.expand.2par(coeff = coeff, X = X, Z = X, y = y
, fbase2 = fbase2.gaussian.identity.log, fgh = fgh, block.diag = block.diag)
else regfac.expand.2par(coeff = coeff, X = X, y = y
, fbase2 = fbase2.gaussian.identity.log, fgh = fgh, block.diag = block.diag)
}
# 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)
# constant-dispersion model
# estimation using glm
est.glm <- lm(y~X-1)
beta.glm <- est.glm$coefficients
sigma.glm <- summary(est.glm)$sigma
# estimation using RegressionFactory
# (we set rnd=F in sns to allow for better comparison with glm)
nsmp <- 20
coeff.smp <- array(NA, dim=c(nsmp, K+1))
coeff.tmp <- rep(0, K+1)
for (n in 1:nsmp) {
coeff.tmp <- sns(coeff.tmp, fghEval=loglike.linreg
, X=X, y=y, fgh=2, block.diag = F, vd = F, rnd = F)
coeff.smp[n,] <- coeff.tmp
}
beta.regfac.cd <- colMeans(coeff.smp[(nsmp/2+1):nsmp, 1:K])
sigma.regfac.cd <- sqrt(exp(mean(coeff.smp[(nsmp/2+1):nsmp, K+1])))
# comparing glm and RegressionFactory results
# beta's must match exactly between glm and RegressionFactory
cbind(beta, beta.glm, beta.regfac.cd)
# sigma's won't match exactly
cbind(mean(sd.vec), sigma.glm, sigma.regfac.cd)
# varying-dispersion model
# 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.smp <- array(NA, dim=c(nsmp, 2*K))
coeff.tmp <- rep(0, 2*K)
for (n in 1:nsmp) {
coeff.tmp <- sns(coeff.tmp, fghEval=loglike.linreg
, X=X, y=y, fgh=2, block.diag = F, vd = T, rnd = F)
coeff.smp[n,] <- coeff.tmp
}
beta.regfac.vd <- colMeans(coeff.smp[(nsmp/2+1):nsmp, 1:K])
gamma.regfac.vd <- colMeans(coeff.smp[(nsmp/2+1):nsmp, K+1:K])
# comparing dglm and RegressionFactory results
# neither beta's nor gamma's will match exactly
cbind(beta, beta.dglm, beta.regfac.vd)
cbind(gamma, gamma.dglm, gamma.regfac.vd)
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.