Skip to content

EventStudy

0.66.0Package record

Event Study Analysis

0packages depend
90downloads / year
92.0%test coverage
8/11flavors OK

Overview

About

Financial event study analysis. Implements the classical event study methodology of MacKinlay (1997) https://www.jstor.org/stable/2729691 with multiple return models: market model, market adjusted, comparison period mean adjusted, Fama and French three-factor (1993) doi:10.1016/0304-405X(93)90023-5 and five-factor (2015) doi:10.1016/j.jfineco.2014.10.010, Carhart (1997) four-factor doi:10.1111/j.1540-6261.1997.tb03808.x, generalized autoregressive conditional heteroskedasticity (GARCH; Bollerslev, 1986) doi:10.1016/0304-4076(86)90063-1, rolling window, and dynamic conditional correlation GARCH (DCC-GARCH; Engle, 2002) doi:10.1198/073500102288618487. Provides parametric and non-parametric test statistics, including the standardized cross-sectional test of Boehmer, Musumeci and Poulsen (1991) doi:10.1016/0304-405X(91)90032-F and its cross-correlation adjustment by Kolari and Pynnonen (2010) doi:10.1093/rfs/hhq072; buy-and-hold abnormal returns (Barber and Lyon, 1997) doi:10.1016/S0304-405X(96)00890-2; volume and volatility event studies; cross-sectional regression; intraday event studies; panel difference-in-differences event studies with the estimators of Callaway and Sant'Anna (2021) doi:10.1016/j.jeconom.2020.12.001, de Chaisemartin and D'Haultfoeuille (2020) doi:10.1257/aer.20181169, and Borusyak, Jaravel and Spiess (2024) doi:10.1093/restud/rdae007; synthetic control methods (Abadie, Diamond and Hainmueller, 2010) doi:10.1198/jasa.2009.ap08746; wild bootstrap inference; multiple testing corrections; power analysis via simulation; data download helpers; automated reporting; and visualization tools. Results can be exported to comma-separated values (CSV), 'Excel', or 'LaTeX'.

Changes in 0.66.0

CRAN resubmission

  • DESCRIPTION text revised per CRAN review: single quotes only around software names, all acronyms spelled out, and method references given as author (year) with DOI/URL links.

Statistical correctness fixes (2026-09-24 re-evaluation)

The 2026-09-24 package re-evaluation found twelve silent-wrong-statistic

defects across return models, multi-event test statistics, bootstrap

inference, and cross-sectional regression. Every fix ships with a

failing-first regression test in tests/testthat/test_reeval_statistical_fixes.R

and, where the fix redefines a valid-input result, a re-pinned golden value in

tests/testthat/test_golden_values.R. See vignettes/statistical-conventions.Rmd

for the full audit log and citations.

Show all changes in 0.66.0Hide the rest of the changes in 0.66.0
  • **A1 -- RollingWindowModel now restricts each rolling window to COMPLETE PAIRS** (both firm and index finite) before computing x_bar/ss_xx/ residuals/sigma. Previously, rows where the firm return was NA but the index was not still contributed to x_bar/ss_xx, biasing beta whenever NA-firm rows co-occur with index outliers. fit() and calculate_statistics() now share the same complete-pair count for df/FEC.
  • **A2 -- A fully-degenerate event (zero finite event-window abnormal returns) is now EXCLUDED from every CAR-based multi-event statistic** (CSectTTest, PatellZTest, SignTest, GeneralizedSignTest, BMPTest, KolariPynnonenTest), applied once per group (at most one warning per group, not one per configured statistic). Previously it was coalesced to 0 and silently understated cross-event dispersion. The pre-existing STATS-03 convention (a partial gap contributes 0 to that event's own CAR) is unchanged.
  • **A3 -- KolariPynnonenTest never falls back to an adjustment factor of 1.** A degenerate (constant or too-short) estimation-window SAR series is now excluded from the r_bar cross-sectional correlation estimate (reported once); if fewer than 2 usable events remain, kp_t/ckp_t are NA instead of silently reporting the unadjusted BMP value. The per-day KP adjustment now uses THAT DAY's n_valid_events instead of the first day's count applied uniformly to every day.
  • **A4 -- RankTest and GeneralizedSignTest now group by event_id, not firm_symbol,** for ranking/centering and p_hat estimation. Previously a firm recurring across multiple events had its data silently pooled across those events.
  • **A5 -- cross_sectional_regression() sample-integrity hardening.** Duplicated event_ids in the data argument now error; a car_window extending outside any event's available event window now errors; task events with no matching data row are dropped with one warning; an event whose CAR is NA because an abnormal return inside car_window is missing is excluded with one warning (.extract_cars() no longer sums with na.rm = TRUE, so ANY missing AR in the window makes the whole CAR NA; car_by_group()/car_quantiles()/plot_car_distribution() inherit this NA-CAR semantics without an additional warning).
  • **A6 -- OLS insufficient-observations guard is now n_params-based, not a flat threshold,** for MarketModel and every LinearFactorModel subclass (FF3, FF5, Carhart4); a model that fits with fewer than 30 valid estimation observations (the same recommended minimum as validate_task()'s default) now emits one advisory warning in both modes. PatellZTest's k is now read explicitly from each model's statistics$n_params (MarketModel 2, FF3 4, Carhart4 5, FF5 6, CPMA 1, MarketAdjusted 0) instead of being derived as length(resid) - df (which was silently wrong whenever df reflected an unrelated correction); m now counts finite estimation-window abnormal returns instead of the raw row count. MarketModel's forecast-error correction now uses complete pairs only for mean(Rm_est)/SS_market, matching exactly the rows lm() used.
  • **A7 -- CalendarTimePortfolioTest denominator redefined to the Brown-Warner (1980, 1985) estimation-window AAR standard deviation.** Previously ts_sd was computed from the event-window portfolio series itself (self-referential with the numerator, so a larger event-day shock inflated both). caltime_t/ccaltime_t now use degrees of freedom n_estimation_days - 1, exposed as attr(result, "caltime_df") and read by both adjust_p_values() and tidy(). **This is a valid-input redefinition:** caltime_t/ccaltime_t values differ from the initial 0.66.0 submission; golden values are re-pinned.
  • **A8 -- MarketAdjustedModel's forecast-error correction is now forecast_error_corrected_sigma == sigma exactly** (correction factor 1), because the model estimates nothing from the estimation window. Previously it wrongly reused the constant-MEAN correction formula (sigma * sqrt(1 + 1/m)), which is only valid for a model that DOES estimate one parameter (a mean), like ComparisonPeriodMeanAdjustedModel (unchanged). **This is a valid-input redefinition;** golden values are re-pinned.
  • **A9 -- Sign convention unified to strict n_pos = sum(AR > 0) / n_neg = sum(AR <= 0)** in CSectTTest, PatellZTest, and CalendarTimePortfolioTest (previously >= 0/< 0), matching the pre-existing SignTest convention. An abnormal return of exactly 0 now counts as non-positive everywhere.
  • **A10 -- TestStatisticBase$confidence_type is now validated** with match.arg(c("two-sided", "less", "greater")) (an invalid value errors) and emits one warning at construction when a non-default value is supplied, stating that every p-value in EventStudy is currently two-sided and the value has no effect. No p-value formula changed; one-sided p-values are not implemented.
  • **A11 -- BMPTest roxygen documentation corrected (docs-only, no formula change).** The docstring incorrectly claimed standardization by the forecast-error-corrected sigma; both BMPTest and KolariPynnonenTest standardize by the MODEL sigma (model$statistics$sigma), which is what the code always computed.
  • **A12 -- bootstrap_test() observed/draw construction aligned; NA draws excluded from the p-value denominator.** observed_caar now uses the SAME per-event coalesce-to-0 CAR construction as the bootstrap draws (matches cumsum(observed_aar) exactly on NA-free input, but differs from it under a partial-window gap, where the per-event construction is correct). A bootstrap draw whose statistic is NA (e.g. a sign-flip combination that zeroes the cross-sectional SD) is now excluded from BOTH the exceedance count and the denominator, instead of being counted as "did not exceed" while still inflating n_boot + 1. The bootstrap weight clustering unit (firm_symbol) is confirmed correct and unchanged.

API and documentation consistency (2026-09-24 re-evaluation)

  • **B1 -- ModelBase, TestStatisticBase, and ReturnCalculation are now exported** with roxygen documenting the subclass contract expected by run_event_study() (fit()/abnormal_returns(), compute(), calculate_return(), and the statistics fields consumed downstream, including the optional n_params field added by A6). Previously these base classes existed but were unexported, so vignettes and skills advertising "subclass ModelBase" referenced a symbol users could not actually reach with EventStudy::ModelBase.
  • **B5 -- generics::tidy(task) now dispatches to tidy.EventStudyTask().** generics added to Suggests; tidy.EventStudyTask() remains directly callable and exported as before.
  • **B2 -- Vignette code examples fixed to the real function signatures.** modern-did-estimators.Rmd and automated-reports.Rmd previously called PanelEventStudyTask$new() with non-existent arguments (data/unit_col/time_col/treatment_col/outcome_col); fixed to the real (panel_data, unit_id, time_id, outcome, treatment, treatment_time). cross_sectional_regression(characteristics = ...) fixed to data = .... automated-reports.Rmd's "Available sections" table and every sections = c(...) example previously listed section keys (summary, data, single_event, multi_event, cross_sectional, panel) that do not exist in the report template; corrected to the real keys (exec_summary, data_methods, results, diagnostics, robustness, references, appendix).
  • **B4 -- pkgdown reference reorganized.** statistical-conventions added as an article; dieselgate/earnings_surprises now listed explicitly in "Data & Datasets"; degenerate-input-contract, eventstudy-shape-contracts, and eventstudy-deprecation grouped under a new "Contracts & Lifecycle" reference section; report_table added to "Export & Reporting" and its \keyword{internal} tag removed (it is exported and advertised).
  • **B6 -- Unused DT and patchwork removed from Suggests.** download_stock_data()'s quantmod fallback branch now guards zoo::index() with its own requireNamespace("zoo") check before any download.
  • **B7 -- .claude/skills/es-capabilities/SKILL.md signatures corrected** for run_event_study() and validate_task() to match formals(); a scripted scan of every vignette/README/skill code chunk confirms zero remaining argument-name drift against the installed package.
  • **B3 -- .claude/skills/es-advisor/reference/interpreting-diagnostics.md rewritten to the real es_diagnostics() structure** (meta, estimation_window, event_window, cross_sectional, contract_state, aggregate_summary), verified field-by-field against a live run, with the 8 offline knowledge-base rule thresholds restated in terms of the real field paths they key off. The previous version documented a fabricated structure (n_events, per_event, mean_r_squared, etc.) that did not exist on the returned object.

Testing (2026-09-24 re-evaluation)

Test-suite quality hardening so vacuous or always-skip tests no longer mask

regressions, and so the full NOT_CRAN=true suite runs with WARN 0

(every warning a test triggers is now explicitly expected by class/regexp,

or muffled at its source when the fixture is intentionally short).

  • **C1 -- adjust_p_values()** gains explicit-formula tests for its KolariPynnonenTest, GeneralizedSignTest, RankTest and CalendarTimePortfolioTest branches, comparing against 2*pt(-abs(t), df)/2*pnorm(-abs(z)) directly.
  • **C2 -- Vacuous regression tests made real:** the bootstrap firm-clustering test now hand-replicates the wild-bootstrap algorithm (one weight per unique firm_symbol) and shows it differs from an event-level clustering alternative on the same seed; the two Patell Q_i tests now assert the exact aar_z from an independent hand computation (k=2 and k=4); the LinearFactorModel FEC test now asserts the exact hat-matrix value sigma*sqrt(1+h_t); the HAC-SE test now asserts equality with sandwich::NeweyWest() on the same lm() fit.
  • **C3 -- Panel TWFE tests tightened to golden checks** against a direct lm() two-way-fixed-effects fit on the same deterministic seeded fixture (static_twfe estimate + cluster-robust SE; dynamic_twfe every non-base event-time coefficient), replacing the previous loose numeric bounds.
  • **C4 -- .rank_events_for_cap() real test:** an event genuinely unfitted via a degenerate estimation window (with its one contract warning asserted explicitly) is shown to always rank first (anomaly score Inf) and always survive a max_events cap, replacing the previous unconditional skip().
  • **C5 -- DCC-GARCH / MarketModel FEC tests de-guarded:** the DCC-GARCH test no longer swallows errors in a tryCatch()-to-TRUE handler; it now asserts is_fitted unconditionally and skips ONLY on a narrowly-matched non-convergence warning. The MarketModel FEC "effective obs count" test no longer hides its assertions behind if (is_fitted).
  • **C6 -- .try_download() narrowed** to convert only network/HTTP-style failures into skip() (by condition class when available, otherwise a narrow message pattern); any other error (a parse/logic bug) now fails the test. Covered by two new direct tests of the helper itself.
  • **C7 -- Every test_that() block that draws random numbers without its own seed now has one**, across test_edge_cases.R, test_models.R, test_multi_event_statistics.R, test_cross_sectional.R, test_synthetic_control.R and test_intraday.R; test_intraday.R's Sys.time()-based fixtures were replaced with fixed UTC POSIXct literals.
  • **C8 -- High-value numeric assertions added** to test_execute.R (each exercised model's AR/alpha/beta checked against a direct lm() or arithmetic computation) and test_export.R (exported CSV AR/CAR/AAR values checked to equal the task's own values, round-tripped through the file).
  • **C9 -- Test-file organization:** the full-pipeline CalendarTimePortfolioTest case moved from test_bhar_test_statistics.R to test_multi_event_statistics.R (it is not a BHAR test); the browser()-source-grep check in test_aar_test_statistics.R replaced with a behavioural PatellZTest$compute() test against a hand computation; the single weak test in test_caar_test_statistics.R folded into a real numeric CSectTTest check.
  • **C10 -- No leaked warnings.** Every warning a test triggers is now either asserted explicitly (expect_warning(..., regexp = / nested for multiple independent warnings) or muffled by class via the new muffle_short_window() helper (tests/testthat/helper-warnings.R) for fixtures whose short estimation window is intentional (golden/invariant/ numerical-stability fixtures, never a blanket suppressWarnings()). A new test_execute.R test locks that fit_model() collapses N short-window events into exactly ONE eventstudy_short_estimation_window warning listing the event ids.

API Stabilization & Deprecation Lifecycle (Phase 28)

This release completes a signature-consistency audit of the full public API and

wires a formal deprecation lifecycle (base .Deprecated() + optional

lifecycle shim). All deprecated argument names continue to work and emit

exactly one deprecation warning pointing to the replacement.

Renamed Arguments (deprecated old names still work)

  • plot_stocks(): do_sample is deprecated in favour of sample_symbols (#APIS-01). The new name is noun-first, consistent with the sibling parameter max_symbols. Pass the old name and you receive one deprecation warning; the result is identical. (#APIS-04)

Deprecation Infrastructure

  • New internal helper .deprecate_arg() in R/deprecation.R. Always calls base .Deprecated() unconditionally; additionally calls lifecycle::deprecate_warn() when lifecycle is installed (Suggests-only, never a hard dependency). (#APIS-04)

Return-Shape Contracts (opt-in, default-off)

  • New R/shape_contracts.R provides an opt-in return-shape contract for the pipeline's result tibbles. Enable with options(EventStudy.shape_contracts = TRUE). When enabled, the pipeline checks that the column names and types of the single-event statistics tibbles (ART, CART) and the multi-event AAR/CAAR tibble (CSectT) match the canonical expected shapes. On any mismatch exactly one warning() is emitted naming the context and the specific drift; the contract never calls stop(). Correctly-shaped is_fitted = FALSE degenerate outputs (same column names, NA-propagated values) are treated as valid shapes and produce no warning. The option defaults to FALSE so valid-input behaviour and the existing test suite are completely unaffected. (#APIS-02)

Install-Tested Multi-OS CI (Phase 29)

  • The GitHub Actions workflow now runs rcmdcheck against the *installed* package (not load_all) across multiple operating systems, catching install-vs-load_all divergence in NAMESPACE/imports before it reaches CRAN.
  • A dedicated CI leg runs with _R_CHECK_FORCE_SUGGESTS_ forced on, exercising every optional-Suggests code path so the requireNamespace() guards are verified end-to-end.
  • report_table() is now an exported function; the public API snaps

The NEWS section is longer than shown here.

From NEWS.md in the release

Install

Health

CRAN checks
3ERROR8OK
Check messages
ERRORtestsr-devel-linux-x86_64-debian-clang, r-devel-linux-x86_64-debian-gcc, r-release-linux-x86_64

r-devel-linux-x86_64-debian-clang

Running ‘testthat.R’ [206s/272s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > library(testthat)
  > library(EventStudy)
  > 
  > test_check("EventStudy")
  
  Attaching package: 'dplyr'
  
  The following objects are masked from 'package:stats':
  
      filter, lag
  
  The following objects are masked from 'package:base':
  
      intersect, setdiff, setequal, union
  
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing 
...[truncated]...
eBytes = TRUE)
   12.           └─base::file(con, "w")
  ── Error ('test_report_narrative.R:146:3'): invalid narrative (not a list) -> exactly one warning, degrades to NULL ──
  Error in `file(con, "w")`: cannot open the connection
  Backtrace:
       ▆
    1. ├─testthat::expect_warning(...) at test_report_narrative.R:146:3
    2. │ └─testthat:::expect_condition_matching_(...)
    3. │   └─testthat:::quasi_capture(...)
    4. │     ├─testthat (local) .capture(...)
    5. │     │ └─base::withCallingHandlers(...)
    6. │     └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    7. └─EventStudy::generate_report(...)
    8.   └─rmarkdown::render(...)
    9.     └─knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
   10.       └─xfun::write_utf8(res, output)
   11.         └─base::writeLines(enc2utf8(text), con, ..., useBytes = TRUE)
   12.           └─base::file(con, "w")
  
  [ FAIL 3 | WARN 15 | SKIP 73 | PASS 2694 ]
  Error:
  ! Test failures.
  Execution halted

r-devel-linux-x86_64-debian-gcc

Running ‘testthat.R’ [134s/153s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > library(testthat)
  > library(EventStudy)
  > 
  > test_check("EventStudy")
  
  Attaching package: 'dplyr'
  
  The following objects are masked from 'package:stats':
  
      filter, lag
  
  The following objects are masked from 'package:base':
  
      intersect, setdiff, setequal, union
  
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing 
...[truncated]...
eBytes = TRUE)
   12.           └─base::file(con, "w")
  ── Error ('test_report_narrative.R:146:3'): invalid narrative (not a list) -> exactly one warning, degrades to NULL ──
  Error in `file(con, "w")`: cannot open the connection
  Backtrace:
       ▆
    1. ├─testthat::expect_warning(...) at test_report_narrative.R:146:3
    2. │ └─testthat:::expect_condition_matching_(...)
    3. │   └─testthat:::quasi_capture(...)
    4. │     ├─testthat (local) .capture(...)
    5. │     │ └─base::withCallingHandlers(...)
    6. │     └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    7. └─EventStudy::generate_report(...)
    8.   └─rmarkdown::render(...)
    9.     └─knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
   10.       └─xfun::write_utf8(res, output)
   11.         └─base::writeLines(enc2utf8(text), con, ..., useBytes = TRUE)
   12.           └─base::file(con, "w")
  
  [ FAIL 3 | WARN 15 | SKIP 73 | PASS 2694 ]
  Error:
  ! Test failures.
  Execution halted

r-release-linux-x86_64

Running ‘testthat.R’ [202s/265s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > library(testthat)
  > library(EventStudy)
  > 
  > test_check("EventStudy")
  
  Attaching package: 'dplyr'
  
  The following objects are masked from 'package:stats':
  
      filter, lag
  
  The following objects are masked from 'package:base':
  
      intersect, setdiff, setequal, union
  
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing grouping variables: `group`
  Adding missing 
...[truncated]...
eBytes = TRUE)
   12.           └─base::file(con, "w")
  ── Error ('test_report_narrative.R:146:3'): invalid narrative (not a list) -> exactly one warning, degrades to NULL ──
  Error in `file(con, "w")`: cannot open the connection
  Backtrace:
       ▆
    1. ├─testthat::expect_warning(...) at test_report_narrative.R:146:3
    2. │ └─testthat:::expect_condition_matching_(...)
    3. │   └─testthat:::quasi_capture(...)
    4. │     ├─testthat (local) .capture(...)
    5. │     │ └─base::withCallingHandlers(...)
    6. │     └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    7. └─EventStudy::generate_report(...)
    8.   └─rmarkdown::render(...)
    9.     └─knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
   10.       └─xfun::write_utf8(res, output)
   11.         └─base::writeLines(enc2utf8(text), con, ..., useBytes = TRUE)
   12.           └─base::file(con, "w")
  
  [ FAIL 3 | WARN 15 | SKIP 73 | PASS 2694 ]
  Error:
  ! Test failures.
  Execution halted

CRAN check page ↗

Slowest check: 15.3 min · r-oldrel-macos-x86_64
Status changes
  • ERROR8 OK, 3 ERRORNow
  • ERROR6 OK, 1 ERROR2026-10-23
  • OK5 OK2026-10-21
Advisories

none known

Documentation

In release 0.66.0
README· In the repository, left out of the releaseVignettesYes · 20 · dynamicNEWSYes · 100% structured · mentions 0.66.0Citation fileYes · software entry onlyWebsiteYes · pkgdown

The repository also keeps web-only articles.

Help pages
100 (3 internal)includes a package overview page
Examples that run
21%3 run in a plain check · 9 only when donttest examples are enabled (R CMD check --as-cran) · 2 never run
Exported functions with examples
15%
Documented parameters
97%
Return-value docs
48%
Help pages citing references
4%

Downloads

90
CRAN downloads in the past year
Rank #25,638 · ~0/day · ~8/mo
Daily download trend is not available in this view yet.
Also on37 r2u6 autocran

Repository

12Stars
5Forks
0Open issues
0Open PRs
3Releases
620Commits
2Commit identities
eventstudy
License file reads as AGPL-3.0 · 620 commits · Last activity 2026-10-09
Responsiveness
How these are sampled
PRs merged (all time)
100%
Median days to close, 50 most recently updated closed issues
0
Median days to close, 50 most recently updated closed PRs
0
PracticesBeta

9 development-tooling and community-health practices detected across 6 families in the upstream repository

Checks run against github.com/sipemu/eventstudy on 2026-10-22.

Continuous integration (2)
GitHub ActionsR CMD check workflow

The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel

Docs source (3)
pkgdown

GitHub Pages site last deployed 2026-10-09 · The repository has a site deploy workflow

pkgdown site last built 2026-10-09, before release 0.66.0 (2026-10-21)

Coverage (1)
Coverage reporting
Reproducibility and dev environment (1)
data-raw/
Show all practicesHide 2 practices
CRAN release process (1)
cran-comments.md
Lint, format, editor (1)
RStudio project
How this is detected·Detection ruleset v4 (2026-10-20)
AI coding toolsBeta

This repository shows signs of AI coding tools.

  • Claude Codefirst seen 2026-02-20
    Seen in the repository: .claude, .claude-plugin, .claude/skills
    Named in .Rbuildignore: .claude-plugin
    Pull request it wrote: opened by a project member
    Commits: at least 229 crediting it in the message
Models named in its commits
  • Claude Opus 4.845 commits · Jun to Sep 2026
  • Claude Opus 4.640 commits · Feb to Mar 2026
  • Claude Sonnet 4.615 commits · Sep 2026

Some of these counts are a minimum, because the search stopped before the oldest commits.

Counts are commits, not lines of code. Commits by a tool's accounts count once across all of its accounts. Commits crediting it are the largest count among its credit lines, a minimum.How this is detected·Detection ruleset v4 (updated 2026-09-27)

Dependencies

Declared dependencies
35 external dependencies (excludes base and recommended)

Installing EventStudy adds 66 packages (35 with compiled code, 63 MB of source tarballs). Heaviest: stringi 11 MB, ggplot2 6.0 MB, data.table 5.7 MB.

Depends (1)
R >= 4.1.0
LinkingTo (0)
none
Enhances (0)
none
Reverse dependencies
0direct
0indirect

Nothing depends on this yet.

Datasets

People & History

People (1)
Maintainer, Author · added in 0.66.0

Maintainer since 0.30 (2017)

Listed in earlier versions (1)
Dr. Simon Mueller
no longer listed · 0.30 to 0.39.2
Releases (12)

Pick two releases to compare their code metrics.

  • unarchivedReturned to CRAN
    2026-10-21
  • 0.66.0Latest
    record
    first seen 2026-10-21 · current release · diff ↗ ·
    removed 15 exports
    %>%, AARResults, ARCApplicationInput, ARResults, AVCApplicationInput, AVyCApplicationInput, CAAResults, CAResults, EventStudyAPI, EventStudyAddin, ResultParser, checkFile, checkFiles, estAPIKey, getSP500ExampleFiles
    added 81 exports
    ARTTest, AnthropicProvider, BHARModel, BHARTTest, BMPTest, CARTTest, CSectTTest, CalendarTimePortfolioTest, Carhart4FactorModel, ComparisonPeriodMeanAdjustedModel, CustomProvider, DCCGARCHModel, EventStudyTask, FamaFrench3FactorModel, FamaFrench5FactorModel, GARCHModel, GeneralizedSignTest, IntradayEventStudyTask, KolariPynnonenTest, LinearFactorModel, LogReturn, MarketAdjustedModel, MarketModel, ModelBase, MultiEventStatisticsSet, OpenAICompatProvider, PanelEventStudyTask, ParameterSet, PatellZTest, ProviderBase and 51 more
    ·
    12 days in CRAN's queue
    Listed in CRAN's incoming queue from 2026-10-09 14:50 to 2026-10-21 05:36 UTC, in 63 readings.
  • R
    R 4.6.0 released · 2026-04-24
  • R
    R 4.5.0 released · 2025-04-11
  • R
    R 4.4.0 released · 2024-04-24
  • archivedRemoved from CRAN
    2024-04-20
    issues were not corrected despite reminders
  • R
    R 4.3.0 released · 2023-04-21
  • unarchivedReturned to CRAN
    2023-03-28
  • 0.39.2
    record
    2023-03-28 · diff ↗
  • archivedRemoved from CRAN
    2023-03-27
    requires archived package 'tidyquant'
  • 0.39.1
    record
    2023-03-23 · diff ↗
  • 0.39
    record
    2022-09-20 · diff ↗ ·
    removed 2 exports
    aarPlot, arPlot
    added 4 exports
    AARResults, ARResults, CAAResults, CAResults
  • R
    R 4.2.0 released · 2022-04-22
  • 0.37
    record
    2021-12-20 · diff ↗
  • R
    R 4.1.0 released · 2021-05-18
  • R
    R 4.0.0 released · 2020-04-24
Show 10 earlier eventsHide 10 earlier events
Across CRAN, the median accepted release of the past year spent 26 hours in the queue, 90% under 11 days.How queue time is measured

Package metadata

First published
2017-05-20
Total releases
12 / 9 yrs
License
AGPL-3 OSI · relicensed from MIT + file LICENSE in 0.66.0
Minimum R
≥ 4.1.0
Bundled data
15 KB / 2 files
Download size
2.0 MB

Cite

Cite this package

Run in R for the authors' entry:

citation("EventStudy")

The package provides a citation file, so citation() returns the authors' own entry.

Cite the R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA

Balamuta, J. J. (2026). R Observatory: Metrics for EventStudy version 0.66.0 [Data set]. HJJB, LLC. Data release v2026-10-25. https://doi.org/10.5281/zenodo.21843040

From data release v2026-10-25, which the citation names so these numbers can be found later. More on citing and the projects behind them.

Report a problem with this page →

Privacy choices

These apply to this browser and are stored on this device only. Nothing about your choice is sent to us.

Read the privacy policy