From noreply at r-forge.r-project.org Mon Jun 3 23:39:03 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Mon, 3 Jun 2013 23:39:03 +0200 (CEST) Subject: [Pomp-commits] r856 - in pkg/pomp: . R inst man tests Message-ID: <20130603213903.936AF185036@r-forge.r-project.org> Author: kingaa Date: 2013-06-03 23:39:03 +0200 (Mon, 03 Jun 2013) New Revision: 856 Modified: pkg/pomp/DESCRIPTION pkg/pomp/NAMESPACE pkg/pomp/R/pfilter-methods.R pkg/pomp/inst/NEWS pkg/pomp/man/pfilter-methods.Rd pkg/pomp/tests/pfilter.R pkg/pomp/tests/pfilter.Rout.save Log: - add a new 'coerce' method: 'pfilterd.pomp' objects to data-frames Modified: pkg/pomp/DESCRIPTION =================================================================== --- pkg/pomp/DESCRIPTION 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/DESCRIPTION 2013-06-03 21:39:03 UTC (rev 856) @@ -1,8 +1,8 @@ Package: pomp Type: Package Title: Statistical inference for partially observed Markov processes -Version: 0.45-1 -Date: 2013-05-14 +Version: 0.45-2 +Date: 2013-06-03 Maintainer: Aaron A. King Authors at R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="kingaa at umich.edu"), person(given=c("Edward","L."),family="Ionides",role=c("aut")), Modified: pkg/pomp/NAMESPACE =================================================================== --- pkg/pomp/NAMESPACE 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/NAMESPACE 2013-06-03 21:39:03 UTC (rev 856) @@ -62,6 +62,7 @@ export( as.data.frame.pomp, + as.data.frame.pfilterd.pomp, reulermultinom, deulermultinom, rgammawn, Modified: pkg/pomp/R/pfilter-methods.R =================================================================== --- pkg/pomp/R/pfilter-methods.R 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/R/pfilter-methods.R 2013-06-03 21:39:03 UTC (rev 856) @@ -3,6 +3,31 @@ setMethod("eff.sample.size",signature(object="pfilterd.pomp"),function(object,...)object at eff.sample.size) setMethod("cond.logLik",signature(object="pfilterd.pomp"),function(object,...)object at cond.loglik) +## 'coerce' method: allows for coercion of a "pomp" object to a data-frame +setAs( + from="pfilterd.pomp", + to="data.frame", + def = function (from) { + pm <- pred.mean(from) + pv <- pred.var(from) + fm <- filter.mean(from) + out <- cbind( + as(as(from,"pomp"),"data.frame"), + ess=eff.sample.size(from), + cond.loglik=cond.logLik(from) + ) + if (length(pm)>0) + out <- cbind(out,pred.mean=t(pm)) + if (length(pv)>0) + out <- cbind(out,pred.var=t(pv)) + if (length(fm)>0) + out <- cbind(out,filter.mean=t(fm)) + out + } + ) + +as.data.frame.pfilterd.pomp <- function (x, row.names, optional, ...) as(x,"data.frame") + ## extract the prediction means setMethod( "pred.mean", Modified: pkg/pomp/inst/NEWS =================================================================== --- pkg/pomp/inst/NEWS 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/inst/NEWS 2013-06-03 21:39:03 UTC (rev 856) @@ -1,4 +1,7 @@ NEWS +0.45-2 + o new method to coerce 'pfilterd.pomp' objects to data-frames. + 0.45-1 o 'profileDesign' can now handle variables of mixed type. Modified: pkg/pomp/man/pfilter-methods.Rd =================================================================== --- pkg/pomp/man/pfilter-methods.Rd 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/man/pfilter-methods.Rd 2013-06-03 21:39:03 UTC (rev 856) @@ -18,6 +18,8 @@ \alias{cond.logLik} \alias{cond.logLik,pfilterd.pomp-method} \alias{cond.logLik-pfilterd.pomp} +\alias{as,pfilterd.pomp-method} +\alias{coerce,pfilterd.pomp,data.frame-method} \title{Methods of the "pfilterd.pomp" class} \description{Methods of the "pfilterd.pomp" class.} \usage{ @@ -27,12 +29,24 @@ \S4method{filter.mean}{pfilterd.pomp}(object, pars, \dots) \S4method{eff.sample.size}{pfilterd.pomp}(object, \dots) \S4method{cond.logLik}{pfilterd.pomp}(object, \dots) +\S4method{as}{pfilterd.pomp}(object, class) +\S4method{coerce}{pfilterd.pomp,data.frame}(from, to = "data.frame", strict = TRUE) } \arguments{ \item{object}{ An object of class \code{pfilterd.pomp} or inheriting class \code{pfilterd.pomp}. } \item{pars}{Names of parameters.} + \item{class}{ + character; + name of the class to which \code{object} should be coerced. + } + \item{from, to}{ + the classes between which coercion should be performed. + } + \item{strict}{ + ignored. + } \item{\dots}{ Additional arguments unused at present. } Modified: pkg/pomp/tests/pfilter.R =================================================================== --- pkg/pomp/tests/pfilter.R 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/tests/pfilter.R 2013-06-03 21:39:03 UTC (rev 856) @@ -4,6 +4,8 @@ set.seed(9994847L) +pdf(file="pfilter.pdf") + pf <- pfilter(ou2,Np=1000,seed=343439L) print(coef(ou2,c('x1.0','x2.0','alpha.1','alpha.4')),digits=4) cat("particle filter log likelihood at truth\n") @@ -23,6 +25,11 @@ p <- coef(euler.sir) euler.sir at params <- numeric(0) p["iota"] <- 1 -pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L) +pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L,filter.mean=TRUE) print(coef(pf)) print(logLik(pf),digits=4) +plot(cond.loglik~time,data=as(pf,"data.frame"),type='l') +plot(ess~time,data=as(pf,"data.frame"),type='l') +plot(filter.mean.I~time,data=as(pf,"data.frame"),type='l') + +dev.off() Modified: pkg/pomp/tests/pfilter.Rout.save =================================================================== --- pkg/pomp/tests/pfilter.Rout.save 2013-05-14 19:47:29 UTC (rev 855) +++ pkg/pomp/tests/pfilter.Rout.save 2013-06-03 21:39:03 UTC (rev 856) @@ -1,7 +1,6 @@ -R version 2.15.2 (2012-10-26) -- "Trick or Treat" -Copyright (C) 2012 The R Foundation for Statistical Computing -ISBN 3-900051-07-0 +R version 3.0.1 (2013-05-16) -- "Good Sport" +Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. @@ -27,6 +26,8 @@ > > set.seed(9994847L) > +> pdf(file="pfilter.pdf") +> > pf <- pfilter(ou2,Np=1000,seed=343439L) > print(coef(ou2,c('x1.0','x2.0','alpha.1','alpha.4')),digits=4) x1.0 x2.0 alpha.1 alpha.4 @@ -59,7 +60,7 @@ > p <- coef(euler.sir) > euler.sir at params <- numeric(0) > p["iota"] <- 1 -> pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L) +> pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L,filter.mean=TRUE) > print(coef(pf)) gamma mu iota beta1 beta2 beta3 beta.sd pop 2.60e+01 2.00e-02 1.00e+00 4.00e+02 4.80e+02 3.20e+02 1.00e-03 2.10e+06 @@ -67,7 +68,14 @@ 6.00e-01 6.50e-02 1.00e-03 9.35e-01 > print(logLik(pf),digits=4) [1] -945.4 +> plot(cond.loglik~time,data=as(pf,"data.frame"),type='l') +> plot(ess~time,data=as(pf,"data.frame"),type='l') +> plot(filter.mean.I~time,data=as(pf,"data.frame"),type='l') > +> dev.off() +null device + 1 +> > proc.time() user system elapsed - 5.964 0.056 6.062 + 6.044 0.104 6.320 From noreply at r-forge.r-project.org Tue Jun 4 13:54:01 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Tue, 4 Jun 2013 13:54:01 +0200 (CEST) Subject: [Pomp-commits] r857 - in branches/premif2: . R inst man tests Message-ID: <20130604115401.9D98E185635@r-forge.r-project.org> Author: kingaa Date: 2013-06-04 13:54:01 +0200 (Tue, 04 Jun 2013) New Revision: 857 Modified: branches/premif2/DESCRIPTION branches/premif2/NAMESPACE branches/premif2/R/pfilter-methods.R branches/premif2/inst/NEWS branches/premif2/man/pfilter-methods.Rd branches/premif2/tests/pfilter.R branches/premif2/tests/pfilter.Rout.save Log: - add a new 'coerce' method: 'pfilterd.pomp' objects to data-frames Modified: branches/premif2/DESCRIPTION =================================================================== --- branches/premif2/DESCRIPTION 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/DESCRIPTION 2013-06-04 11:54:01 UTC (rev 857) @@ -1,8 +1,8 @@ Package: pomp Type: Package Title: Statistical inference for partially observed Markov processes -Version: 0.43-8 -Date: 2013-04-16 +Version: 0.43-9 +Date: 2013-06-03 Maintainer: Aaron A. King Authors at R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="kingaa at umich.edu"), person(given=c("Edward","L."),family="Ionides",role=c("aut")), Modified: branches/premif2/NAMESPACE =================================================================== --- branches/premif2/NAMESPACE 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/NAMESPACE 2013-06-04 11:54:01 UTC (rev 857) @@ -62,6 +62,7 @@ export( as.data.frame.pomp, + as.data.frame.pfilterd.pomp, reulermultinom, deulermultinom, rgammawn, Modified: branches/premif2/R/pfilter-methods.R =================================================================== --- branches/premif2/R/pfilter-methods.R 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/R/pfilter-methods.R 2013-06-04 11:54:01 UTC (rev 857) @@ -3,6 +3,31 @@ setMethod("eff.sample.size",signature(object="pfilterd.pomp"),function(object,...)object at eff.sample.size) setMethod("cond.logLik",signature(object="pfilterd.pomp"),function(object,...)object at cond.loglik) +## 'coerce' method: allows for coercion of a "pomp" object to a data-frame +setAs( + from="pfilterd.pomp", + to="data.frame", + def = function (from) { + pm <- pred.mean(from) + pv <- pred.var(from) + fm <- filter.mean(from) + out <- cbind( + as(as(from,"pomp"),"data.frame"), + ess=eff.sample.size(from), + cond.loglik=cond.logLik(from) + ) + if (length(pm)>0) + out <- cbind(out,pred.mean=t(pm)) + if (length(pv)>0) + out <- cbind(out,pred.var=t(pv)) + if (length(fm)>0) + out <- cbind(out,filter.mean=t(fm)) + out + } + ) + +as.data.frame.pfilterd.pomp <- function (x, row.names, optional, ...) as(x,"data.frame") + ## extract the prediction means setMethod( "pred.mean", Modified: branches/premif2/inst/NEWS =================================================================== --- branches/premif2/inst/NEWS 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/inst/NEWS 2013-06-04 11:54:01 UTC (rev 857) @@ -1,4 +1,7 @@ NEWS +0.43-9 + o new method to coerce 'pfilterd.pomp' objects to data-frames. + 0.43-4 o Clean up tests. Modified: branches/premif2/man/pfilter-methods.Rd =================================================================== --- branches/premif2/man/pfilter-methods.Rd 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/man/pfilter-methods.Rd 2013-06-04 11:54:01 UTC (rev 857) @@ -18,6 +18,8 @@ \alias{cond.logLik} \alias{cond.logLik,pfilterd.pomp-method} \alias{cond.logLik-pfilterd.pomp} +\alias{as,pfilterd.pomp-method} +\alias{coerce,pfilterd.pomp,data.frame-method} \title{Methods of the "pfilterd.pomp" class} \description{Methods of the "pfilterd.pomp" class.} \usage{ @@ -27,12 +29,24 @@ \S4method{filter.mean}{pfilterd.pomp}(object, pars, \dots) \S4method{eff.sample.size}{pfilterd.pomp}(object, \dots) \S4method{cond.logLik}{pfilterd.pomp}(object, \dots) +\S4method{as}{pfilterd.pomp}(object, class) +\S4method{coerce}{pfilterd.pomp,data.frame}(from, to = "data.frame", strict = TRUE) } \arguments{ \item{object}{ An object of class \code{pfilterd.pomp} or inheriting class \code{pfilterd.pomp}. } \item{pars}{Names of parameters.} + \item{class}{ + character; + name of the class to which \code{object} should be coerced. + } + \item{from, to}{ + the classes between which coercion should be performed. + } + \item{strict}{ + ignored. + } \item{\dots}{ Additional arguments unused at present. } Modified: branches/premif2/tests/pfilter.R =================================================================== --- branches/premif2/tests/pfilter.R 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/tests/pfilter.R 2013-06-04 11:54:01 UTC (rev 857) @@ -4,6 +4,8 @@ set.seed(9994847L) +pdf(file="pfilter.pdf") + pf <- pfilter(ou2,Np=1000,seed=343439L) print(coef(ou2,c('x1.0','x2.0','alpha.1','alpha.4')),digits=4) cat("particle filter log likelihood at truth\n") @@ -23,6 +25,11 @@ p <- coef(euler.sir) euler.sir at params <- numeric(0) p["iota"] <- 1 -pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L) +pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L,filter.mean=TRUE) print(coef(pf)) print(logLik(pf),digits=4) +plot(cond.loglik~time,data=as(pf,"data.frame"),type='l') +plot(ess~time,data=as(pf,"data.frame"),type='l') +plot(filter.mean.I~time,data=as(pf,"data.frame"),type='l') + +dev.off() Modified: branches/premif2/tests/pfilter.Rout.save =================================================================== --- branches/premif2/tests/pfilter.Rout.save 2013-06-03 21:39:03 UTC (rev 856) +++ branches/premif2/tests/pfilter.Rout.save 2013-06-04 11:54:01 UTC (rev 857) @@ -24,6 +24,8 @@ > > set.seed(9994847L) > +> pdf(file="pfilter.pdf") +> > pf <- pfilter(ou2,Np=1000,seed=343439L) > print(coef(ou2,c('x1.0','x2.0','alpha.1','alpha.4')),digits=4) x1.0 x2.0 alpha.1 alpha.4 @@ -54,7 +56,7 @@ > p <- coef(euler.sir) > euler.sir at params <- numeric(0) > p["iota"] <- 1 -> pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L) +> pf <- pfilter(euler.sir,params=p,Np=100,seed=394343L,filter.mean=TRUE) > print(coef(pf)) gamma mu iota beta1 beta2 beta3 beta.sd pop 2.60e+01 2.00e-02 1.00e+00 4.00e+02 4.80e+02 3.20e+02 1.00e-03 2.10e+06 From noreply at r-forge.r-project.org Thu Jun 6 01:07:40 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Thu, 6 Jun 2013 01:07:40 +0200 (CEST) Subject: [Pomp-commits] r858 - pkg/pomp/man Message-ID: <20130605230740.B93E7185250@r-forge.r-project.org> Author: kingaa Date: 2013-06-06 01:07:40 +0200 (Thu, 06 Jun 2013) New Revision: 858 Modified: pkg/pomp/man/pfilter-methods.Rd Log: - add documentation for 'as.data.frame.pfilterd.pomp' Modified: pkg/pomp/man/pfilter-methods.Rd =================================================================== --- pkg/pomp/man/pfilter-methods.Rd 2013-06-04 11:54:01 UTC (rev 857) +++ pkg/pomp/man/pfilter-methods.Rd 2013-06-05 23:07:40 UTC (rev 858) @@ -19,6 +19,7 @@ \alias{cond.logLik,pfilterd.pomp-method} \alias{cond.logLik-pfilterd.pomp} \alias{as,pfilterd.pomp-method} +\alias{as.data.frame.pfilterd.pomp} \alias{coerce,pfilterd.pomp,data.frame-method} \title{Methods of the "pfilterd.pomp" class} \description{Methods of the "pfilterd.pomp" class.} @@ -31,9 +32,10 @@ \S4method{cond.logLik}{pfilterd.pomp}(object, \dots) \S4method{as}{pfilterd.pomp}(object, class) \S4method{coerce}{pfilterd.pomp,data.frame}(from, to = "data.frame", strict = TRUE) +\S3method{as.data.frame}{pfilterd.pomp}(x, row.names, optional, \dots) } \arguments{ - \item{object}{ + \item{object, x}{ An object of class \code{pfilterd.pomp} or inheriting class \code{pfilterd.pomp}. } \item{pars}{Names of parameters.} @@ -47,6 +49,9 @@ \item{strict}{ ignored. } + \item{row.names, optional}{ + ignored. + } \item{\dots}{ Additional arguments unused at present. } From noreply at r-forge.r-project.org Thu Jun 6 02:03:29 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Thu, 6 Jun 2013 02:03:29 +0200 (CEST) Subject: [Pomp-commits] r859 - in pkg/pomp: . R inst Message-ID: <20130606000329.61F21185898@r-forge.r-project.org> Author: kingaa Date: 2013-06-06 02:03:28 +0200 (Thu, 06 Jun 2013) New Revision: 859 Modified: pkg/pomp/DESCRIPTION pkg/pomp/R/mif.R pkg/pomp/inst/NEWS Log: - fix bug in 'continue' when 'mif2' method is used Modified: pkg/pomp/DESCRIPTION =================================================================== --- pkg/pomp/DESCRIPTION 2013-06-05 23:07:40 UTC (rev 858) +++ pkg/pomp/DESCRIPTION 2013-06-06 00:03:28 UTC (rev 859) @@ -1,8 +1,8 @@ Package: pomp Type: Package Title: Statistical inference for partially observed Markov processes -Version: 0.45-2 -Date: 2013-06-03 +Version: 0.45-3 +Date: 2013-06-05 Maintainer: Aaron A. King Authors at R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="kingaa at umich.edu"), person(given=c("Edward","L."),family="Ionides",role=c("aut")), Modified: pkg/pomp/R/mif.R =================================================================== --- pkg/pomp/R/mif.R 2013-06-05 23:07:40 UTC (rev 858) +++ pkg/pomp/R/mif.R 2013-06-06 00:03:28 UTC (rev 859) @@ -94,7 +94,8 @@ tol, max.fail, verbose, transform, .ndone = 0L, paramMatrix = NULL, - .getnativesymbolinfo = TRUE) { + .getnativesymbolinfo = TRUE, + ...) { gnsi <- as.logical(.getnativesymbolinfo) @@ -459,7 +460,8 @@ tol=tol, max.fail=max.fail, verbose=verbose, - transform=transform + transform=transform, + ... ) } Modified: pkg/pomp/inst/NEWS =================================================================== --- pkg/pomp/inst/NEWS 2013-06-05 23:07:40 UTC (rev 858) +++ pkg/pomp/inst/NEWS 2013-06-06 00:03:28 UTC (rev 859) @@ -1,4 +1,7 @@ NEWS +0.45-3 + o fix bug with 'continue' and method 'mif2' + 0.45-2 o new method to coerce 'pfilterd.pomp' objects to data-frames. From noreply at r-forge.r-project.org Fri Jun 7 14:13:08 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 7 Jun 2013 14:13:08 +0200 (CEST) Subject: [Pomp-commits] r860 - in pkg/pomp: . R inst inst/include src Message-ID: <20130607121308.8FA47185212@r-forge.r-project.org> Author: kingaa Date: 2013-06-07 14:13:08 +0200 (Fri, 07 Jun 2013) New Revision: 860 Modified: pkg/pomp/DESCRIPTION pkg/pomp/R/builder.R pkg/pomp/inst/NEWS pkg/pomp/inst/include/pomp.h pkg/pomp/src/R_init_pomp.c pkg/pomp/src/eulermultinom.c pkg/pomp/src/lookup_table.c pkg/pomp/src/pomp.h Log: - reulermultinom, deulermultinom, and dot_product are no longer linkables exported in src/R_init_pomp.c but rather are defined as static inlines in the pomp.h header file. Modified: pkg/pomp/DESCRIPTION =================================================================== --- pkg/pomp/DESCRIPTION 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/DESCRIPTION 2013-06-07 12:13:08 UTC (rev 860) @@ -1,8 +1,8 @@ Package: pomp Type: Package Title: Statistical inference for partially observed Markov processes -Version: 0.45-3 -Date: 2013-06-05 +Version: 0.45-4 +Date: 2013-06-06 Maintainer: Aaron A. King Authors at R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="kingaa at umich.edu"), person(given=c("Edward","L."),family="Ionides",role=c("aut")), Modified: pkg/pomp/R/builder.R =================================================================== --- pkg/pomp/R/builder.R 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/R/builder.R 2013-06-07 12:13:08 UTC (rev 860) @@ -107,7 +107,6 @@ decl <- list( periodic_bspline_basis_eval="\tvoid (*periodic_bspline_basis_eval)(double,double,int,int,double*);\nperiodic_bspline_basis_eval = (void (*)(double,double,int,int,double*)) R_GetCCallable(\"pomp\",\"periodic_bspline_basis_eval\");\n", - reulermultinom="\tvoid (*reulermultinom)(int,double,double*,double,double*);\nreulermultinom = (void (*)(int,double,double*,double,double*)) R_GetCCallable(\"pomp\",\"reulermultinom\");\n", get_pomp_userdata="\tconst SEXP (*get_pomp_userdata)(const char *);\npomp_get_userdata = (const SEXP (*)(const char*)) R_GetCCallable(\"pomp\",\"get_pomp_userdata\");\n", get_pomp_userdata_int="\tconst int * (*get_pomp_userdata_int)(const char *);\npomp_get_userdata_int = (const int *(*)(const char*)) R_GetCCallable(\"pomp\",\"get_pomp_userdata_int\");\n", get_pomp_userdata_double="\tconst double * (*get_pomp_userdata_double)(const char *);\npomp_get_userdata_double = (const double *(*)(const char*)) R_GetCCallable(\"pomp\",\"get_pomp_userdata_double\");\n" Modified: pkg/pomp/inst/NEWS =================================================================== --- pkg/pomp/inst/NEWS 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/inst/NEWS 2013-06-07 12:13:08 UTC (rev 860) @@ -1,4 +1,7 @@ NEWS +0.45-4 + o changes in the way 'reulermultinom', 'deulermultinom', 'dot_product' are exported to other packages. Rather than being exported as linkables, these are now defined as static inline functions in the 'pomp.h' header. + 0.45-3 o fix bug with 'continue' and method 'mif2' Modified: pkg/pomp/inst/include/pomp.h =================================================================== --- pkg/pomp/inst/include/pomp.h 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/inst/include/pomp.h 2013-06-07 12:13:08 UTC (rev 860) @@ -5,15 +5,15 @@ #include #include -#include +#include #include -// facility for extracting R objects from the 'userdata' slot +// facilities for extracting R objects from the 'userdata' slot const SEXP get_pomp_userdata (const char *name); const int *get_pomp_userdata_int (const char *name); const double *get_pomp_userdata_double (const char *name); -// facility for computing evaluating a basis of periodic bsplines +// facility for evaluating a set of periodic bspline basis functions void periodic_bspline_basis_eval (double x, double period, int degree, int nbasis, double *y); // Prototype for parameter transformation function. @@ -191,7 +191,13 @@ // facility for computing the inner product of // a vector of parameters ('coef') against a vector of basis-function values ('basis') -double dot_product (int dim, const double *basis, const double *coef); +static R_INLINE double dot_product (int dim, const double *basis, const double *coef) { + int j; + double trans = 0.0; + for (j = 0; j < dim; j++) + trans += coef[j]*basis[j]; + return(trans); +} static R_INLINE double logit (double p) { return log(p/(1.0-p)); @@ -201,17 +207,88 @@ return 1.0/(1.0+exp(-x)); } -// prototypes for C-level access to Euler-multinomial distribution functions +// C-level definitions of Euler-multinomial distribution functions // simulate Euler-multinomial transitions // NB: 'reulermultinom' does not call GetRNGstate() and PutRNGstate() internally // this must be done by the calling program // But note that when reulermultinom is called inside a pomp 'rprocess', there is no need to call // {Get,Put}RNGState() as this is handled by pomp -void reulermultinom (int m, double size, double *rate, double dt, double *trans); +static void reulermultinom (int m, double size, double *rate, double dt, double *trans) { + double p = 0.0; + int j, k; + if ((size < 0.0) || (dt < 0.0) || (floor(size+0.5) != size)) { + for (k = 0; k < m; k++) trans[k] = R_NaN; + return; + } + for (k = 0; k < m; k++) { + if (rate[k] < 0.0) { + for (j = 0; j < m; j++) trans[j] = R_NaN; + return; + } + p += rate[k]; // total event rate + } + if (p > 0.0) { + size = rbinom(size,1-exp(-p*dt)); // total number of events + if (!(R_FINITE(size))) + warning("reulermultinom: result of binomial draw is not finite"); + m -= 1; + for (k = 0; k < m; k++) { + if (rate[k] > p) p = rate[k]; + trans[k] = ((size > 0) && (p > 0)) ? rbinom(size,rate[k]/p) : 0; + if (!(R_FINITE(size)&&R_FINITE(p)&&R_FINITE(rate[k])&&R_FINITE(trans[k]))) + warning("reulermultinom: result of binomial draw is not finite"); + size -= trans[k]; + p -= rate[k]; + } + trans[m] = size; + } else { + for (k = 0; k < m; k++) trans[k] = 0.0; + } +} -// compute probabilities of eulermultinomial transitions -double deulermultinom (int m, double size, double *rate, double dt, double *trans, int give_log); +// compute probabilities of Euler-multinomial transitions +static double deulermultinom (int m, double size, double *rate, double dt, double *trans, int give_log) { + double p = 0.0; + double n = 0.0; + double ff = 0.0; + int k; + if ((dt < 0.0) || (size < 0.0) || (floor(size+0.5) != size)) { + warning("NaNs produced"); + return R_NaN; + } + for (k = 0; k < m; k++) { + if (rate[k] < 0.0) { + warning("NaNs produced"); + return R_NaN; + } + if (trans[k] < 0.0) { + ff = (give_log) ? R_NegInf: 0.0; + return ff; + } + p += rate[k]; // total event rate + n += trans[k]; // total number of events + } + if (n > size) { + ff = (give_log) ? R_NegInf: 0.0; + return ff; + } + ff = dbinom(n,size,1-exp(-p*dt),1); // total number of events + m -= 1; + for (k = 0; k < m; k++) { + if ((n > 0) && (p > 0)) { + if (rate[k] > p) p = rate[k]; + ff += dbinom(trans[k],n,rate[k]/p,1); + } else if (trans[k] > 0.0) { + ff = R_NegInf; + return ff; + } + n -= trans[k]; + p -= rate[k]; + } + ff = (give_log) ? ff : exp(ff); + return ff; +} static R_INLINE double rbetabinom (double size, double prob, double theta) { return rbinom(size,rbeta(prob*theta,(1.0-prob)*theta)); Modified: pkg/pomp/src/R_init_pomp.c =================================================================== --- pkg/pomp/src/R_init_pomp.c 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/src/R_init_pomp.c 2013-06-07 12:13:08 UTC (rev 860) @@ -4,9 +4,6 @@ void R_init_pomp (DllInfo *info) { R_RegisterCCallable("pomp","periodic_bspline_basis_eval",(DL_FUNC) &periodic_bspline_basis_eval); - R_RegisterCCallable("pomp","dot_product",(DL_FUNC) &dot_product); - R_RegisterCCallable("pomp","reulermultinom",(DL_FUNC) &reulermultinom); - R_RegisterCCallable("pomp","deulermultinom",(DL_FUNC) &deulermultinom); R_RegisterCCallable("pomp","get_pomp_userdata",(DL_FUNC) &get_pomp_userdata); R_RegisterCCallable("pomp","get_pomp_userdata_int",(DL_FUNC) &get_pomp_userdata_int); R_RegisterCCallable("pomp","get_pomp_userdata_double",(DL_FUNC) &get_pomp_userdata_double); Modified: pkg/pomp/src/eulermultinom.c =================================================================== --- pkg/pomp/src/eulermultinom.c 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/src/eulermultinom.c 2013-06-07 12:13:08 UTC (rev 860) @@ -4,82 +4,6 @@ #include "pomp_internal.h" -void reulermultinom (int m, double size, double *rate, double dt, double *trans) { - double p = 0.0; - int j, k; - if ((size < 0.0) || (dt < 0.0) || (floor(size+0.5) != size)) { - for (k = 0; k < m; k++) trans[k] = R_NaN; - return; - } - for (k = 0; k < m; k++) { - if (rate[k] < 0.0) { - for (j = 0; j < m; j++) trans[j] = R_NaN; - return; - } - p += rate[k]; // total event rate - } - if (p > 0.0) { - size = rbinom(size,1-exp(-p*dt)); // total number of events - if (!(R_FINITE(size))) - warning("reulermultinom: result of binomial draw is not finite"); - m -= 1; - for (k = 0; k < m; k++) { - if (rate[k] > p) p = rate[k]; - trans[k] = ((size > 0) && (p > 0)) ? rbinom(size,rate[k]/p) : 0; - if (!(R_FINITE(size)&&R_FINITE(p)&&R_FINITE(rate[k])&&R_FINITE(trans[k]))) - warning("reulermultinom: result of binomial draw is not finite"); - size -= trans[k]; - p -= rate[k]; - } - trans[m] = size; - } else { - for (k = 0; k < m; k++) trans[k] = 0.0; - } -} - -// probability density of Euler-multinomial transitions -double deulermultinom (int m, double size, double *rate, double dt, double *trans, int give_log) { - double p = 0.0; - double n = 0.0; - double ff = 0.0; - int k; - if ((dt < 0.0) || (size < 0.0) || (floor(size+0.5) != size)) { - warning("NaNs produced"); - return R_NaN; - } - for (k = 0; k < m; k++) { - if (rate[k] < 0.0) { - warning("NaNs produced"); - return R_NaN; - } - if (trans[k] < 0.0) { - ff = (give_log) ? R_NegInf: 0.0; - return ff; - } - p += rate[k]; // total event rate - n += trans[k]; // total number of events - } - if (n > size) { - ff = (give_log) ? R_NegInf: 0.0; - return ff; - } - ff = dbinom(n,size,1-exp(-p*dt),1); // total number of events - m -= 1; - for (k = 0; k < m; k++) { - if ((n > 0) && (p > 0)) { - if (rate[k] > p) p = rate[k]; - ff += dbinom(trans[k],n,rate[k]/p,1); - } else if (trans[k] > 0.0) { - ff = R_NegInf; - return ff; - } - n -= trans[k]; - p -= rate[k]; - } - ff = (give_log) ? ff : exp(ff); - return ff; -} - void reulermultinom_multi (int *n, int *ntrans, double *size, double *rate, double *dt, double *trans) { int k; int m = *ntrans; Modified: pkg/pomp/src/lookup_table.c =================================================================== --- pkg/pomp/src/lookup_table.c 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/src/lookup_table.c 2013-06-07 12:13:08 UTC (rev 860) @@ -70,13 +70,3 @@ } } -// facility for computing the inner product of -// a vector of parameters ('coef') against a vector of basis-function values ('basis') -double dot_product (int dim, const double *basis, const double *coef) { - int j; - double trans = 0.0; - for (j = 0; j < dim; j++) - trans += coef[j]*basis[j]; - return(trans); -} - Modified: pkg/pomp/src/pomp.h =================================================================== --- pkg/pomp/src/pomp.h 2013-06-06 00:03:28 UTC (rev 859) +++ pkg/pomp/src/pomp.h 2013-06-07 12:13:08 UTC (rev 860) @@ -5,15 +5,15 @@ #include #include -#include +#include #include -// facility for extracting R objects from the 'userdata' slot +// facilities for extracting R objects from the 'userdata' slot const SEXP get_pomp_userdata (const char *name); const int *get_pomp_userdata_int (const char *name); const double *get_pomp_userdata_double (const char *name); -// facility for computing evaluating a basis of periodic bsplines +// facility for evaluating a set of periodic bspline basis functions void periodic_bspline_basis_eval (double x, double period, int degree, int nbasis, double *y); // Prototype for parameter transformation function. @@ -191,7 +191,13 @@ // facility for computing the inner product of // a vector of parameters ('coef') against a vector of basis-function values ('basis') -double dot_product (int dim, const double *basis, const double *coef); +static R_INLINE double dot_product (int dim, const double *basis, const double *coef) { + int j; + double trans = 0.0; + for (j = 0; j < dim; j++) + trans += coef[j]*basis[j]; + return(trans); +} static R_INLINE double logit (double p) { return log(p/(1.0-p)); @@ -201,17 +207,88 @@ return 1.0/(1.0+exp(-x)); } -// prototypes for C-level access to Euler-multinomial distribution functions +// C-level definitions of Euler-multinomial distribution functions // simulate Euler-multinomial transitions // NB: 'reulermultinom' does not call GetRNGstate() and PutRNGstate() internally // this must be done by the calling program // But note that when reulermultinom is called inside a pomp 'rprocess', there is no need to call // {Get,Put}RNGState() as this is handled by pomp -void reulermultinom (int m, double size, double *rate, double dt, double *trans); +static void reulermultinom (int m, double size, double *rate, double dt, double *trans) { + double p = 0.0; + int j, k; + if ((size < 0.0) || (dt < 0.0) || (floor(size+0.5) != size)) { + for (k = 0; k < m; k++) trans[k] = R_NaN; + return; + } + for (k = 0; k < m; k++) { + if (rate[k] < 0.0) { + for (j = 0; j < m; j++) trans[j] = R_NaN; + return; + } + p += rate[k]; // total event rate + } + if (p > 0.0) { + size = rbinom(size,1-exp(-p*dt)); // total number of events + if (!(R_FINITE(size))) + warning("reulermultinom: result of binomial draw is not finite"); + m -= 1; + for (k = 0; k < m; k++) { + if (rate[k] > p) p = rate[k]; + trans[k] = ((size > 0) && (p > 0)) ? rbinom(size,rate[k]/p) : 0; + if (!(R_FINITE(size)&&R_FINITE(p)&&R_FINITE(rate[k])&&R_FINITE(trans[k]))) + warning("reulermultinom: result of binomial draw is not finite"); + size -= trans[k]; + p -= rate[k]; + } + trans[m] = size; + } else { + for (k = 0; k < m; k++) trans[k] = 0.0; + } +} -// compute probabilities of eulermultinomial transitions -double deulermultinom (int m, double size, double *rate, double dt, double *trans, int give_log); +// compute probabilities of Euler-multinomial transitions +static double deulermultinom (int m, double size, double *rate, double dt, double *trans, int give_log) { + double p = 0.0; + double n = 0.0; + double ff = 0.0; + int k; + if ((dt < 0.0) || (size < 0.0) || (floor(size+0.5) != size)) { + warning("NaNs produced"); + return R_NaN; + } + for (k = 0; k < m; k++) { + if (rate[k] < 0.0) { + warning("NaNs produced"); + return R_NaN; + } + if (trans[k] < 0.0) { + ff = (give_log) ? R_NegInf: 0.0; + return ff; + } + p += rate[k]; // total event rate + n += trans[k]; // total number of events + } + if (n > size) { + ff = (give_log) ? R_NegInf: 0.0; + return ff; + } + ff = dbinom(n,size,1-exp(-p*dt),1); // total number of events + m -= 1; + for (k = 0; k < m; k++) { + if ((n > 0) && (p > 0)) { + if (rate[k] > p) p = rate[k]; + ff += dbinom(trans[k],n,rate[k]/p,1); + } else if (trans[k] > 0.0) { + ff = R_NegInf; + return ff; + } + n -= trans[k]; + p -= rate[k]; + } + ff = (give_log) ? ff : exp(ff); + return ff; +} static R_INLINE double rbetabinom (double size, double prob, double theta) { return rbinom(size,rbeta(prob*theta,(1.0-prob)*theta)); From noreply at r-forge.r-project.org Fri Jun 7 14:27:52 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 7 Jun 2013 14:27:52 +0200 (CEST) Subject: [Pomp-commits] r861 - in pkg/pomp: inst src Message-ID: <20130607122752.716221812D4@r-forge.r-project.org> Author: kingaa Date: 2013-06-07 14:27:52 +0200 (Fri, 07 Jun 2013) New Revision: 861 Modified: pkg/pomp/inst/NEWS pkg/pomp/src/R_init_pomp.c Log: - to preserve backward-compatibility, continue to export 'reulermultinom', 'deulermultinom', and 'dot_product' Modified: pkg/pomp/inst/NEWS =================================================================== --- pkg/pomp/inst/NEWS 2013-06-07 12:13:08 UTC (rev 860) +++ pkg/pomp/inst/NEWS 2013-06-07 12:27:52 UTC (rev 861) @@ -1,6 +1,6 @@ NEWS 0.45-4 - o changes in the way 'reulermultinom', 'deulermultinom', 'dot_product' are exported to other packages. Rather than being exported as linkables, these are now defined as static inline functions in the 'pomp.h' header. + o changes in the way 'reulermultinom', 'deulermultinom', 'dot_product' are exported to other packages. Rather than just being exported as linkables, these are now also defined as static inline functions in the 'pomp.h' header. 0.45-3 o fix bug with 'continue' and method 'mif2' Modified: pkg/pomp/src/R_init_pomp.c =================================================================== --- pkg/pomp/src/R_init_pomp.c 2013-06-07 12:13:08 UTC (rev 860) +++ pkg/pomp/src/R_init_pomp.c 2013-06-07 12:27:52 UTC (rev 861) @@ -4,6 +4,9 @@ void R_init_pomp (DllInfo *info) { R_RegisterCCallable("pomp","periodic_bspline_basis_eval",(DL_FUNC) &periodic_bspline_basis_eval); + R_RegisterCCallable("pomp","dot_product",(DL_FUNC) &dot_product); + R_RegisterCCallable("pomp","reulermultinom",(DL_FUNC) &reulermultinom); + R_RegisterCCallable("pomp","deulermultinom",(DL_FUNC) &deulermultinom); R_RegisterCCallable("pomp","get_pomp_userdata",(DL_FUNC) &get_pomp_userdata); R_RegisterCCallable("pomp","get_pomp_userdata_int",(DL_FUNC) &get_pomp_userdata_int); R_RegisterCCallable("pomp","get_pomp_userdata_double",(DL_FUNC) &get_pomp_userdata_double); From noreply at r-forge.r-project.org Fri Jun 7 21:41:32 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Fri, 7 Jun 2013 21:41:32 +0200 (CEST) Subject: [Pomp-commits] r862 - in pkg/pompExamples: . src tests Message-ID: <20130607194132.D685D185559@r-forge.r-project.org> Author: kingaa Date: 2013-06-07 21:41:32 +0200 (Fri, 07 Jun 2013) New Revision: 862 Added: pkg/pompExamples/src/Makevars Modified: pkg/pompExamples/DESCRIPTION pkg/pompExamples/src/pertussis.c pkg/pompExamples/tests/budmoth.Rout.save pkg/pompExamples/tests/pertussis.Rout.save Log: - update to use new facilities from pomp v 0.45-4 Modified: pkg/pompExamples/DESCRIPTION =================================================================== --- pkg/pompExamples/DESCRIPTION 2013-06-07 12:27:52 UTC (rev 861) +++ pkg/pompExamples/DESCRIPTION 2013-06-07 19:41:32 UTC (rev 862) @@ -1,8 +1,8 @@ Package: pompExamples Type: Package Title: Statistical inference for partially observed Markov processes -Version: 0.21-1 -Date: 2013-04-22 +Version: 0.21-2 +Date: 2013-06-07 Maintainer: Aaron A. King Authors at R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="kingaa at umich.edu"), person(given=c("Edward","L."),family="Ionides",role=c("aut")), @@ -15,7 +15,7 @@ person(given=c("Helen"),family="Wearing",role=c("ctb"))) URL: http://pomp.r-forge.r-project.org Description: More 'pomp' examples. -Depends: R(>= 3.0.0), stats, methods, graphics, pomp(>= 0.43-8) +Depends: R(>= 3.0.0), stats, methods, graphics, pomp(>= 0.45-4) License: GPL (>= 2) LazyLoad: true LazyData: false Added: pkg/pompExamples/src/Makevars =================================================================== --- pkg/pompExamples/src/Makevars (rev 0) +++ pkg/pompExamples/src/Makevars 2013-06-07 19:41:32 UTC (rev 862) @@ -0,0 +1,2 @@ +POMP_INC = $(shell "$(R_HOME)/bin$(R_ARCH_BIN)/Rscript" -e 'library(pomp); cat(system.file("include",package="pomp"))') +PKG_CFLAGS = -I $(POMP_INC) Modified: pkg/pompExamples/src/pertussis.c =================================================================== --- pkg/pompExamples/src/pertussis.c 2013-06-07 12:27:52 UTC (rev 861) +++ pkg/pompExamples/src/pertussis.c 2013-06-07 19:41:32 UTC (rev 862) @@ -2,19 +2,10 @@ #include #include -#include +#include #include +#include -inline double expit (double x) {return 1.0/(1.0+exp(-x));} - -inline double logit (double p) {return log(p/(1.0-p));} - -static inline double rgammawn (double sigma, double dt) { - double sigmasq; - sigmasq = sigma*sigma; - return (sigmasq > 0) ? rgamma(dt/sigmasq,sigmasq) : dt; -} - static double term_time (double t) { double day = 365.0 * (t - floor(t)); int tt = (day >= 7.0 && day < 100.0) @@ -142,9 +133,6 @@ double beta, alpha3; double dW; // white noise process double foi; // force of infection - void (*reulermultinom)(int, double, double *, double, double *); - - reulermultinom = (void (*)(int,double,double*,double,double*)) R_GetCCallable("pomp","reulermultinom"); alpha3 = ALPHA*ALPHA_RATIO; beta = MEANBETA*(1+AMPLBETA*term_time(t)); Modified: pkg/pompExamples/tests/budmoth.Rout.save =================================================================== --- pkg/pompExamples/tests/budmoth.Rout.save 2013-06-07 12:27:52 UTC (rev 861) +++ pkg/pompExamples/tests/budmoth.Rout.save 2013-06-07 19:41:32 UTC (rev 862) @@ -1,7 +1,6 @@ -R version 2.15.2 (2012-10-26) -- "Trick or Treat" -Copyright (C) 2012 The R Foundation for Statistical Computing -ISBN 3-900051-07-0 +R version 3.0.1 (2013-05-16) -- "Good Sport" +Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. @@ -16,8 +15,7 @@ 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. -> require(pompExamples) -Loading required package: pompExamples +> library(pompExamples) Loading required package: pomp Loading required package: mvtnorm Loading required package: subplex @@ -130,4 +128,4 @@ > > proc.time() user system elapsed - 1.284 0.056 1.323 + 0.604 0.064 0.689 Modified: pkg/pompExamples/tests/pertussis.Rout.save =================================================================== --- pkg/pompExamples/tests/pertussis.Rout.save 2013-06-07 12:27:52 UTC (rev 861) +++ pkg/pompExamples/tests/pertussis.Rout.save 2013-06-07 19:41:32 UTC (rev 862) @@ -1,7 +1,6 @@ -R version 2.15.2 (2012-10-26) -- "Trick or Treat" -Copyright (C) 2012 The R Foundation for Statistical Computing -ISBN 3-900051-07-0 +R version 3.0.1 (2013-05-16) -- "Good Sport" +Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. @@ -16,8 +15,7 @@ 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. -> require(pompExamples) -Loading required package: pompExamples +> library(pompExamples) Loading required package: pomp Loading required package: mvtnorm Loading required package: subplex @@ -149,7 +147,7 @@ > > system.time(pf <- pfilter(pertussis.sim(full.small),seed=3445886L,Np=1000)) user system elapsed - 65.132 0.216 65.495 + 19.717 0.000 19.778 > logLik(pf) [1] -3829.33 > @@ -173,4 +171,4 @@ > > proc.time() user system elapsed - 66.960 0.264 67.348 + 20.497 0.064 20.642 From noreply at r-forge.r-project.org Tue Jun 11 18:28:47 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Tue, 11 Jun 2013 18:28:47 +0200 (CEST) Subject: [Pomp-commits] r863 - pkg/pompExamples Message-ID: <20130611162847.E50BA1858B0@r-forge.r-project.org> Author: kingaa Date: 2013-06-11 18:28:47 +0200 (Tue, 11 Jun 2013) New Revision: 863 Modified: pkg/pompExamples/DESCRIPTION Log: - bump to trigger r-forge rebuild Modified: pkg/pompExamples/DESCRIPTION =================================================================== --- pkg/pompExamples/DESCRIPTION 2013-06-07 19:41:32 UTC (rev 862) +++ pkg/pompExamples/DESCRIPTION 2013-06-11 16:28:47 UTC (rev 863) @@ -1,8 +1,8 @@ Package: pompExamples Type: Package Title: Statistical inference for partially observed Markov processes -Version: 0.21-2 -Date: 2013-06-07 +Version: 0.21-3 +Date: 2013-06-11 Maintainer: Aaron A. King Authors at R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="kingaa at umich.edu"), person(given=c("Edward","L."),family="Ionides",role=c("aut")),