if (FALSE) {
## Toy simulation function
# (inspired by elementary population-genetic scenario)
hezsim <- function(logNe=parvec["logNe"],
logmu=parvec["logmu"],parvec) {
Ne <- 10^logNe
mu <- 10^logmu
Es <- Ne*mu
Vs <- 1/log(1+Ne)
genom_s <- rgamma(5, shape=Es/Vs,scale=Vs) # 5 summary statistics
names(genom_s) <- paste0("stat",seq(5))
genom_s
}
{ ## Analysis with 'canonical' parameters
#
## simulated data, standing for the actual data to be analyzed:
set.seed(123)
Sobs <- hezsim(logNe=4,logmu=-4)
#
parsp <- init_reftable(lower=c(logNe=1,logmu=-5),
upper=c(logNe=6,logmu=-2))
init_reft_size <- nrow(parsp)
simuls <- add_reftable(Simulate=hezsim, parsTable=parsp)
{
plogNe <- project("logNe", data=simuls, stats=paste0("stat",seq(5)))
plogmu <- project("logmu", data=simuls, stats=paste0("stat",seq(5)))
dprojectors <- list(plogNe=plogNe,plogmu=plogmu)
projSimuls <- project(simuls,projectors=dprojectors,verbose=FALSE)
projSobs <- project(Sobs,projectors=dprojectors)
}
{ ## Estimation:
ddensv <- infer_SLik_joint(projSimuls,stat.obs=projSobs)
dslik_j <- MSL(ddensv, eval_RMSEs=FALSE) ## find the maximum of the log-likelihood surface
refined_dslik_j <- refine(dslik_j, eval_RMSEs=FALSE, CIs=FALSE)
}
}
{ ## Reparametrization to composite parameters
locreparamfn <- function(object, ...) {
logTh <- object[["logmu"]]+object[["logNe"]]
if (inherits(object,"data.frame")) { # *data.frame case always needed.*
data.frame(logTh=logTh,
logNe=object[["logNe"]])
} else if (is.matrix(object)) {
cbind(logTh=logTh,
logNe=object[["logNe"]])
} else c(logTh=logTh,
logNe=object[["logNe"]])
}
{ ## without re-projection
rps <- reparam_fit(refined_dslik_j, to=c("logTh","logNe"),
reparamfn = locreparamfn)
plot(rps)
}
{ ## with re-projection [necessary to allow refine()'s]
# For refine() a new simulation will be needed, with new input parameters:
hezsim2 <- function(logNe=parvec["logNe"],logTh=parvec["logTh"],parvec) {
hezsim(logNe=logNe,logmu=logTh-logNe)
}
rps <- reparam_fit(refined_dslik_j, to=c("logTh","logNe"),
reparamfn = locreparamfn,
raw=TRUE, # to allow re-projection
reftable_attrs=list(Simulate=hezsim2))
plot(rps)
refine(rps)
}
}
}
Run the code above in your browser using DataLab