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.0b4.tar.gz (29.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.0b4-py3-none-any.whl (20.2 kB view details)

Uploaded Python 3

File details

Details for the file scpc_python-0.1.0b4.tar.gz.

File metadata

  • Download URL: scpc_python-0.1.0b4.tar.gz
  • Upload date:
  • Size: 29.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.0b4.tar.gz
Algorithm Hash digest
SHA256 ee8cc93018344334adaeaff591506fec1ce4c25d20cf1779e6a2834b096360a2
MD5 aa2f1847a290504bf8ad15948cafdd09
BLAKE2b-256 8688607c7b5cfd89e33c9f8183939b2d4c41460b0fa0d9b3dcd6754ef7148541

See more details on using hashes here.

Provenance

The following attestation bundles were made for scpc_python-0.1.0b4.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.0b4-py3-none-any.whl.

File metadata

  • Download URL: scpc_python-0.1.0b4-py3-none-any.whl
  • Upload date:
  • Size: 20.2 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.0b4-py3-none-any.whl
Algorithm Hash digest
SHA256 a2bfc5a3075e28770879f9f459d5a470eef0509e4f8cbbb1eca20619f79d81d8
MD5 938215f6881c3fca82a62df3298c0742
BLAKE2b-256 9bd1a2d74b93f877c4b807f236c140a3a73b46c61b1d5090a548ad4ea7c28897

See more details on using hashes here.

Provenance

The following attestation bundles were made for scpc_python-0.1.0b4-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