SPB Git

spb/metrika Public

Stata-class statistics, GPU-accelerated by Apple Silicon. Native Swift — no Electron, no Python runtime, no compromises.

Swift 92.4% HTML 3.3% R 3% Shell 1.3%

History of MetrikaKit/Tests/MetrikaKitTests/DTATests.swift · clear filter

  1. feat(stats): xtreg fixed effects and ivregress 2sls
    - parser: (endog = instruments) varlist groups -> ZQIVSpec; digit-led
      sub-commands (2sls) reassembled from number+identifier tokens via
      column adjacency
    - ZQFixedEffects: within estimator with Stata conventions (add-back
      means, reported _cons, df = N-K-G), within R-squared, panel-clustered
      VCE with G/(G-1) and t on G-1 df; v0.2 restriction: cluster variable
      must equal the panel variable
    - ZQIV: 2SLS via thin-Q projection of the instrument matrix (Z'Z never
      formed), residuals from original regressors, Stata 'small' inference,
      classical/HC1/cluster VCE built on projected regressors
    - engine: xtreg (requires xtset + fe), ivregress 2sls with dedicated
      listwise deletion across depvar/exog/endog/instruments; shared
      coefficient-table renderer extracted
    - fixtures: z1/z2 instrument columns (drawn after existing draws, earlier
      golden values bit-identical), manual within/2SLS algebra in R
    - 75 tests green (swift test and xcodebuild with GPU suites)
    
    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
    simon-pierre boucher committed 6 days ago (Aug 5, 2026) · 1 file changed +2 −1
  2. feat(data): native Stata .dta reader (117-119) and writer (118)
    - DTAReader: formats 117/118/119, both byte orders, all numeric storage
      types widened to Float64 with Stata missing codes (., .a-.z) mapped to
      the validity mask; str# and strL (GSO) load as strings; value labels
      read past but not yet applied; pre-117 files rejected with a clear
      message
    - DTAWriter: format 118 (UTF-8, LSF), doubles + str# up to 2045 bytes,
      real map offsets so Stata/haven/pandas can seek
    - ZQDataStore routes .dta through the native path for use and save
    - ZQColumnData equality now ignores value slots at missing positions
      (undefined by contract, often NaN — synthesized == failed on NaN != NaN)
    - Fixtures: haven-written 117 + 118 files; tests assert bit-identical
      numeric loads vs the CSV, lossless write/read roundtrip; haven
      cross-reads Metrika-written files (verified)
    - 61 tests green
    
    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
    simon-pierre boucher committed 6 days ago (Aug 5, 2026) · 1 file changed +111