Skip to main content

SCPC inference in Python

Project description

Tests Python Version

███████  ██████ ██████   ██████       ██████  ██    ██ ████████ ██   ██  ██████  ███    ██ 
██      ██      ██   ██ ██            ██   ██  ██  ██     ██    ██   ██ ██    ██ ████   ██ 
███████ ██      ██████  ██      █████ ██████    ████      ██    ███████ ██    ██ ██ ██  ██ 
     ██ ██      ██      ██            ██         ██       ██    ██   ██ ██    ██ ██  ██ ██ 
███████  ██████ ██       ██████       ██         ██       ██    ██   ██  ██████  ██   ████ 
                                                                                           

scpc-python: Spatial Correlation-Robust Inference

scpc-python provides spatial correlation-robust inference for regression coefficients following Müller and Watson (2022, 2023).

Installation

You can install scpc-python from PyPI (coming soon) with:

uv venv --python 3.11
uv pip install scpc-python

or from GitHub with:

uv venv --python 3.11
uv pip install git+https://github.com/DGoettlich/scpc-python.git

Basic Usage

This example starts from the transformed branch of the Becker, Boll, and Voth (2026) workflow. In the full workflow, you would first use spurtest to decide whether to stay in levels or transform. Here we assume the transformed branch and move directly to the regression plus scpc step.

# assumes spur-python is installed
from spur import load_chetty_data, spurtransform
from scpc import scpc
import statsmodels.formula.api as smf

data = load_chetty_data()

data = data[~data["state"].isin(["AK", "HI"])][
    ["am", "gini", "fracblack", "lat", "lon"]
]
data = data.dropna(subset=["am", "gini", "fracblack", "lat", "lon"]).copy()

transformed = spurtransform(
    "am ~ gini + fracblack",
    data,
    lon="lon",
    lat="lat",
    transformation="lbmgls",
    prefix="h_",
)

fit = smf.ols("h_am ~ h_gini + h_fracblack", data=transformed).fit()

result = scpc(
    fit,
    data=transformed,
    lon="lon",
    lat="lat",
    cvs=True,
)

scpc() returns an SCPCResult object:

  • result.scpcstats: the main inference table with coefficient estimates, standard errors, t statistics, p values, and 95% interval endpoints
  • result.scpccvs: optional stored critical values at 32%, 10%, 5%, and 1%
  • result.avc: the average pairwise correlation bound used in the analysis
  • result.c0: the kernel scale implied by avc
  • result.cv: the unconditional 5% critical value
  • result.q: the number of retained non-constant spatial principal components

Key Arguments

The most important scpc() arguments in the workflow above are:

  • model: the fitted regression model
  • data: the data frame
  • lon, lat: the geodesic coordinate column names
  • coords_euclidean: use this instead of lon / lat when coordinates are Euclidean rather than geographic
  • cluster: optional clustering column
  • ncoef: how many coefficients to report
  • avc: upper bound on the average pairwise correlation
  • uncond: whether to skip the conditional adjustment
  • cvs: whether to store the extra critical values

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scpc_python-0.1.1.tar.gz (39.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scpc_python-0.1.1-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file scpc_python-0.1.1.tar.gz.

File metadata

  • Download URL: scpc_python-0.1.1.tar.gz
  • Upload date:
  • Size: 39.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scpc_python-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b18c4aa9c7f0d605c9b971bfd9820d96bb16a6f475c3642f016b736a4785213d
MD5 f07a03cdb1ec4b3658214e001cd5809c
BLAKE2b-256 73105c40789e9dac742156fb5972e6eebea3d8122f20bb8dda44204559031130

See more details on using hashes here.

Provenance

The following attestation bundles were made for scpc_python-0.1.1.tar.gz:

Publisher: pypi.yaml on spatial-spur/scpc-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scpc_python-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: scpc_python-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 24.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for scpc_python-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 872c4e99eeb166a5d2085ed3b32869df04a55d8eb3d4e12e708d334217e32e3b
MD5 a1e8f08fceacc36b69ad1e96db3bc6aa
BLAKE2b-256 c37fe1f4cb9f4714cb0e8619b8e86a8d4df3b3574da00a64f236a0e9934c0925

See more details on using hashes here.

Provenance

The following attestation bundles were made for scpc_python-0.1.1-py3-none-any.whl:

Publisher: pypi.yaml on spatial-spur/scpc-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page