if (FALSE) {
# using RegressionFactory for generating log-likelihood and its derivatives
library(RegressionFactory)
loglike.poisson <- function(beta, X, y) {
regfac.expand.1par(beta, X = X, y = y,
fbase1 = fbase1.poisson.log)
}
# simulating data
K <- 5
N <- 1000
X <- matrix(runif(N * K, -0.5, +0.5), ncol = K)
beta <- runif(K, -0.5, +0.5)
y <- rpois(N, exp(X %*% beta))
beta.init <- rep(0.0, K)
# glm estimate, for reference
beta.glm <- glm(y ~ X - 1, family = "poisson",
start = beta.init)$coefficients
# running SNS in non-stochastic mode
# this should produce results very close to glm
beta.sns <- beta.init
for (i in 1:20)
beta.sns <- sns(beta.sns, loglike.poisson, X = X, y = y, rnd = F)
# comparison
all.equal(as.numeric(beta.glm), as.numeric(beta.sns))
# trying numerical differentiation
loglike.poisson.fonly <- function(beta, X, y) {
regfac.expand.1par(beta, X = X, y = y, fgh = 0,
fbase1 = fbase1.poisson.log)
}
beta.sns.numderiv <- beta.init
for (i in 1:20)
beta.sns.numderiv <- sns(beta.sns.numderiv, loglike.poisson.fonly
, X = X, y = y, rnd = F, numderiv = 2)
all.equal(as.numeric(beta.glm), as.numeric(beta.sns.numderiv))
# add numerical derivatives to fghEval outside sns
loglike.poisson.numaug <- sns.fghEval.numaug(loglike.poisson.fonly
, numderiv = 2)
beta.sns.numaug <- beta.init
for (i in 1:20)
# set numderiv to 0 to avoid repeating
# numerical augmentation inside sns
beta.sns.numaug <- sns(beta.sns.numaug, loglike.poisson.numaug
, X = X, y = y, rnd = F, numderiv = 0)
all.equal(as.numeric(beta.glm), as.numeric(beta.sns.numaug))
}
Run the code above in your browser using DataLab