Skip to main content

PLS-SEM compute engine, a maintained fork of plspm-python with extended metrics (SRMR, d_ULS, HTMT, Q², MGA) powering OpenPLS.

Project description

OpenPLS Engine

CI PyPI version Python versions License: GPL-3.0-or-later

The compute engine behind OpenPLS, a Python 3 library for Partial Least Squares Structural Equation Modeling (PLS-SEM).

openpls-engine is a fork of plspm-python by Jez Humble (Google). It keeps the original algorithm intact and adds the metrics and quality criteria that modern PLS-SEM reporting requires: HTMT, SRMR, d_ULS, adjusted R², BIC, Stone-Geisser Q², Cronbach α, Dijkstra-Henseler ρ, multi-group analysis, and a progress-streaming long bootstrap.

The engine also powers OpenPLS (the hosted web application) and the CLI / Docker self-host distribution planned for the next phase of the roadmap.

Status: pre-release (0.7.0a1). All planned ports from the OpenPLS web app are in. Numerical alignment with reference implementations and PyPI publication are tracked in TODO.md. See CHANGELOG.md for the version history.

Why fork

  • Upstream has not seen a release since 2020.
  • OpenPLS adds substantial extensions: SRMR, d_ULS, HTMT, Q², adjusted R², BIC, multi-group analysis (MGA), permutation tests, mean replacement, and a long-running bootstrap with BCa confidence intervals.
  • The OpenPLS hosted product depends on a single source of truth for the algorithm; a maintained, versioned package makes that practical.
  • The intention is to release openpls-engine on PyPI once the API stabilizes (see TODO).

Installation

The package is not on PyPI yet. To use it from source:

git clone https://github.com/jojacobsen/openpls-engine.git
cd openpls-engine
python3 -m pip install -e .

Once published, installation will be:

pip install openpls-engine

Development

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
pip install -e .

pytest          # run the test suite
ruff check .    # lint

CI runs lint and tests on Python 3.10 through 3.13 against every push and pull request against main.

Versioning

openpls-engine follows Semantic Versioning. The current pre-1.0 line is 0.x. Tagged releases (v0.7.0, v1.0.0, ...) trigger a GitHub Actions workflow that builds the package and publishes it to PyPI via OIDC trusted publishing. The version is the single source of truth in pyproject.toml and is exposed at runtime as plspm.__version__.

See CHANGELOG.md for the per-version history.

Usage

The public API mirrors upstream plspm 0.5.7. The upstream documentation is still authoritative for the inherited interface; OpenPLS-specific docs will land alongside the metric extensions.

import pandas as pd
import plspm.config as c
from plspm.plspm import Plspm
from plspm.scheme import Scheme
from plspm.mode import Mode

satisfaction = pd.read_csv("tests/data/satisfaction.csv", index_col=0)

structure = c.Structure()
structure.add_path(["IMAG"], ["EXPE", "SAT", "LOY"])
structure.add_path(["EXPE"], ["QUAL", "VAL", "SAT"])
structure.add_path(["QUAL"], ["VAL", "SAT"])
structure.add_path(["VAL"], ["SAT"])
structure.add_path(["SAT"], ["LOY"])

config = c.Config(structure.path(), scaled=False)
for lv in ["IMAG", "EXPE", "QUAL", "VAL", "SAT", "LOY"]:
    config.add_lv_with_columns_named(lv, Mode.A, satisfaction, lv.lower())

result = Plspm(satisfaction, config, Scheme.CENTROID)
print(result.inner_summary())
print(result.path_coefficients())

License

GNU General Public License v3.0, see LICENSE. Inherited from upstream plspm-python (also GPL-3.0).

Attribution

This project is a fork of googlecloudplatform/plspm-python by Jez Humble. The upstream R package plspm by Gaston Sanchez and the seminr package by Soumya Ray and Nicholas Danks remain the conceptual references for the algorithm. See ATTRIBUTION.md for details.

OpenPLS is an independent project and not affiliated with Google.

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

openpls_engine-0.7.0a2.tar.gz (53.5 kB view details)

Uploaded Source

Built Distribution

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

openpls_engine-0.7.0a2-py3-none-any.whl (56.7 kB view details)

Uploaded Python 3

File details

Details for the file openpls_engine-0.7.0a2.tar.gz.

File metadata

  • Download URL: openpls_engine-0.7.0a2.tar.gz
  • Upload date:
  • Size: 53.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openpls_engine-0.7.0a2.tar.gz
Algorithm Hash digest
SHA256 39833baf4662ed41427390dbd66f4a57232476e38286b710d5d9fc35c26fcd57
MD5 939780785318496a11c91ea8d8186838
BLAKE2b-256 bfc5cdcfb3c87dc1c72f53f53d6e1404042e6325c7661826b9e0d2c48c651efc

See more details on using hashes here.

Provenance

The following attestation bundles were made for openpls_engine-0.7.0a2.tar.gz:

Publisher: release.yml on jojacobsen/openpls-engine

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

File details

Details for the file openpls_engine-0.7.0a2-py3-none-any.whl.

File metadata

File hashes

Hashes for openpls_engine-0.7.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 4786b3ee617bbf020bc41b1c50016ed6342037c62001dcab4e73e4fdc5d9366a
MD5 30f0d9b97ea28ac8e57bc8eeedab995a
BLAKE2b-256 8234f72db34846261c810be99fd57de169a4809e7a0ce68b90461e7062a837fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for openpls_engine-0.7.0a2-py3-none-any.whl:

Publisher: release.yml on jojacobsen/openpls-engine

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