Skip to content

Commit e0f790d

Browse files
Steven L. Scottcran-robot
authored andcommitted
version 0.6.4
1 parent 5d0c4e5 commit e0f790d

File tree

6 files changed

+40
-26
lines changed

6 files changed

+40
-26
lines changed

DESCRIPTION

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
Package: bsts
2-
Date: 2016-03-10
2+
Date: 2016-08-02
33
Title: Bayesian Structural Time Series
44
Author: Steven L. Scott <stevescott@google.com>
55
Maintainer: Steven L. Scott <stevescott@google.com>
66
Description: Time series regression using dynamic linear models fit using MCMC.
77
Depends: BoomSpikeSlab (>= 0.5.3), zoo, xts, Boom (>= 0.3), R(>= 3.1.0)
88
LinkingTo: Boom, BH (>= 1.15.0-2)
9-
Version: 0.6.3
9+
Version: 0.6.4
1010
License: LGPL-2.1 | file LICENSE
1111
Encoding: UTF-8
1212
NeedsCompilation: yes
13-
Packaged: 2016-03-11 16:00:47 UTC; stevescott
13+
Packaged: 2016-08-02 16:47:46 UTC; stevescott
1414
Repository: CRAN
15-
Date/Publication: 2016-03-15 16:10:32
15+
Date/Publication: 2016-08-03 10:09:37

MD5

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
db489ee2926cd564ad6ea09bf0a41e07 *DESCRIPTION
1+
b36acbcd3679bf49aaf8e8713bcc7339 *DESCRIPTION
22
7eb09e6fd83eb49ed22911c3b2f06744 *LICENSE
33
77b0e5e553b77ad75d4e4a27e6a709c9 *NAMESPACE
44
3c5c0ab86b65f589f216f5b00493af8c *R/add.ar.R
@@ -72,16 +72,16 @@ d57163e548d8d3d98c73c076206cd4e2 *man/summary.bsts.Rd
7272
ba703f81ad4be6d3ac29a85e9c8e397c *man/timeseries.boxplot.Rd
7373
57af8d3de323423befb55d02ed034ada *man/week.ends.Rd
7474
5442c109b338e0fe1e159ab48a2bf06d *src/Makevars
75-
1eeee71e5c9b8d40de50d83b9660fa59 *src/aggregate_time_series.cc
76-
6e67221598474c74ae2647663d084b53 *src/bsts.cc
77-
78b9d1a324db8777ec461d6c23654880 *src/mixed_frequency.cc
75+
329f5c2a4b884556265575b56e7c0cc7 *src/aggregate_time_series.cc
76+
b9e63a061f7a09bc7a0ef13e660f1600 *src/bsts.cc
77+
f246aff45481d5394c45b65d58d1dfba *src/mixed_frequency.cc
7878
a018b30ec484c5246b0d8f4f5022eab3 *src/model_manager.cc
7979
be96d943440bcad54510a233ebda6ed8 *src/model_manager.h
8080
1fd9ab4d4c7476c1552b3bd2809ce92e *src/state_space_gaussian_model_manager.cc
8181
d94a7f45f987cd281697ad728b8358c8 *src/state_space_gaussian_model_manager.h
8282
78669ac7c6707568653f9178be79f222 *src/state_space_logit_model_manager.cc
8383
f4f89c92a9a1ec5d47525613351c7b68 *src/state_space_logit_model_manager.h
84-
b01c649ff283cee42350461cd0a440e3 *src/state_space_poisson_model_manager.cc
84+
0979c1dd250e7864245f800935e39a4e *src/state_space_poisson_model_manager.cc
8585
36526e9c92a816247aa58ca5ef5a2b47 *src/state_space_poisson_model_manager.h
8686
84529a90869531b8bb986ef9d140d1f5 *src/state_space_regression_model_manager.cc
8787
80e15c96df989cd2fde323ca89a7b515 *src/state_space_regression_model_manager.h

src/aggregate_time_series.cc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "LinAlg/SubMatrix.hpp"
88
#include "LinAlg/Types.hpp"
99
#include "Rinternals.h"
10+
#include "r_interface/boom_r_tools.hpp"
1011

1112
extern "C" {
1213
// Sum the results of a fine-scale time series to a coarser scale.
@@ -83,13 +84,13 @@ extern "C" {
8384
}
8485
}
8586

86-
SEXP r_ans;
87-
PROTECT(r_ans = Rf_isMatrix(r_fine_series)
88-
? Rf_allocMatrix(REALSXP, num_fine_rows, num_coarse_time_points)
89-
: Rf_allocVector(REALSXP, num_coarse_time_points));
87+
BOOM::RMemoryProtector protector;
88+
SEXP r_ans = protector.protect(
89+
Rf_isMatrix(r_fine_series)
90+
? Rf_allocMatrix(REALSXP, num_fine_rows, num_coarse_time_points)
91+
: Rf_allocVector(REALSXP, num_coarse_time_points));
9092
double *ans = REAL(r_ans);
9193
std::copy(coarse_series.begin(), coarse_series.end(), ans);
92-
UNPROTECT(1);
9394
return r_ans;
9495
}
9596
}

src/bsts.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include <ctime>
2+
13
#include "utils.h"
24
#include "model_manager.h"
35

@@ -34,6 +36,7 @@ SEXP fit_bsts_model_(
3436
SEXP r_timeout_in_seconds,
3537
SEXP r_seed) {
3638
BOOM::RErrorReporter error_reporter;
39+
BOOM::RMemoryProtector protector;
3740
try {
3841
BOOM::RInterface::seed_rng_from_R(r_seed);
3942
BOOM::RListIoManager io_manager;
@@ -67,7 +70,7 @@ SEXP fit_bsts_model_(
6770
int niter = lround(Rf_asReal(r_niter));
6871
int ping = lround(Rf_asReal(r_ping));
6972
double timeout_threshold_seconds = Rf_asReal(r_timeout_in_seconds);
70-
SEXP ans = PROTECT(io_manager.prepare_to_write(niter));
73+
SEXP ans = protector.protect(io_manager.prepare_to_write(niter));
7174
clock_t start_time = clock();
7275
double time_threshold = CLOCKS_PER_SEC * timeout_threshold_seconds;
7376
for (int i = 0; i < niter; ++i) {
@@ -90,7 +93,6 @@ SEXP fit_bsts_model_(
9093
<< double(current_time - start_time) / CLOCKS_PER_SEC
9194
<< " seconds.";
9295
Rf_warning(warning.str().c_str());
93-
UNPROTECT(1);
9496
return BOOM::appendListElement(
9597
ans,
9698
ToRVector(BOOM::Vector(1, i + 1)),
@@ -103,13 +105,11 @@ SEXP fit_bsts_model_(
103105
<< "iteration " << i << ". Aborting." << std::endl
104106
<< e.what() << std::endl;
105107
error_reporter.SetError(err.str());
106-
UNPROTECT(1);
107108
return BOOM::appendListElement(ans,
108109
ToRVector(Vector(1, i)),
109110
"ngood");
110111
}
111112
}
112-
UNPROTECT(1);
113113
return ans;
114114
} catch (std::exception &e) {
115115
BOOM::RInterface::handle_exception(e);

src/mixed_frequency.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,7 @@ extern "C" {
339339
SEXP r_seed,
340340
SEXP r_truth) {
341341
RErrorReporter error_reporter;
342+
BOOM::RMemoryProtector protector;
342343
try {
343344
BOOM::RInterface::seed_rng_from_R(r_seed);
344345

@@ -378,7 +379,7 @@ extern "C" {
378379

379380
int niter = Rf_asInteger(r_niter);
380381
int ping = Rf_asInteger(r_ping);
381-
SEXP ans = PROTECT(io_manager.prepare_to_write(niter));
382+
SEXP ans = protector.protect(io_manager.prepare_to_write(niter));
382383

383384
for (int i = 0; i < niter; ++i) {
384385
if (RCheckInterrupt()) {
@@ -411,7 +412,6 @@ extern "C" {
411412
return R_NilValue;
412413
}
413414
}
414-
UNPROTECT(1);
415415
return ans;
416416
} catch(std::exception &e) {
417417
handle_exception(e);

src/state_space_poisson_model_manager.cc

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include "r_interface/prior_specification.hpp"
55

6+
#include "cpputil/math_utils.hpp"
7+
68
#include "Models/StateSpace/PosteriorSamplers/StateSpacePoissonPosteriorSampler.hpp"
79
#include "Models/Glm/PosteriorSamplers/PoissonRegressionSpikeSlabSampler.hpp"
810
#include "Models/Glm/PosteriorSamplers/PoissonDataImputer.hpp"
@@ -13,8 +15,18 @@ namespace BOOM {
1315
namespace bsts {
1416

1517
namespace {
16-
typedef StateSpacePoissonModelManager SSPMM;
17-
}
18+
typedef StateSpacePoissonModelManager SSPMM;
19+
void zero_missing_values(
20+
Vector *counts,
21+
Vector *exposure,
22+
const std::vector<bool> &observed) {
23+
for (size_t i = 0; i < counts->size(); ++i) {
24+
if (!observed[i]) {
25+
(*counts)[i] = (*exposure)[i] = 0;
26+
}
27+
}
28+
}
29+
} // namespace
1830

1931
SSPMM::StateSpacePoissonModelManager()
2032
: predictor_dimension_(-1) {}
@@ -37,6 +49,7 @@ StateSpacePoissonModel * SSPMM::CreateObservationModel(
3749
Matrix(counts.size(), 1.0);
3850
std::vector<bool> response_is_observed(ToVectorBool(getListElement(
3951
r_data_list, "response.is.observed")));
52+
zero_missing_values(&counts, &exposure, response_is_observed);
4053
model_.reset(
4154
new StateSpacePoissonModel(
4255
counts,
@@ -165,18 +178,18 @@ void SSPMM::AddData(const Vector &counts,
165178
const Matrix &predictors,
166179
const std::vector<bool> &is_observed) {
167180
for (int i = 0; i < counts.size(); ++i) {
181+
bool missing = (!is_observed.empty() && !is_observed[i]);
168182
Ptr<StateSpace::AugmentedPoissonRegressionData> data_point(
169183
new StateSpace::AugmentedPoissonRegressionData(
170-
counts[i],
171-
exposure[i],
184+
missing ? 0 : counts[i],
185+
missing ? 0 : exposure[i],
172186
predictors.row(i)));
173-
if (!is_observed.empty() && !is_observed[i]) {
187+
if (missing) {
174188
data_point->set_missing_status(Data::missing_status::completely_missing);
175189
}
176190
model_->add_data(data_point);
177191
}
178192
}
179193

180-
181194
} // namespace bsts
182195
} // namespace BOOM

0 commit comments

Comments
 (0)