Skip to main content

A social-science-friendly toolkit for OLS regression and SPSS-like ANOVA

Project description

sunlm

sunlm is a lightweight, social-science–friendly Python package for SPSS-like OLS regression and ANOVA / ANCOVA.
It is designed for researchers in communication, psychology, marketing, and related social sciences who want clear, interpretable statistical output without complex statistical coding.

sunlm emphasizes:

  • R-style formula syntax
  • SPSS-equivalent ANOVA (Type III SS, sum coding)
  • Standardized coefficients and semi-partial R²
  • Clean, APA-style tables
  • Simple, top-level API (sunlm.reg, sunlm.aov)

Installation

pip install sunlm

Quick Start: Load Example Data

sunlm includes a built-in example dataset for immediate practice.

import sunlm

df = sunlm.data()
df.head()
   personalization  involvement  price_sensitivity  brand_trust        age  purchase_intention
0                1            1          -0.740814     1.408369  51.311519             7.000000
1                0            1           0.072907    -0.608711  41.350777             5.122004
2                0            0           0.403086    -1.320603  27.877310             2.840572
3                1            0           1.471929    -0.669619  46.907773             3.497987
4                1            0           0.307384     1.264625  35.208771             4.472068

Tutorial 1️⃣ OLS Regression

import sunlm

model = sunlm.reg(
    "purchase_intention ~ personalization * involvement + age",
    data=df
)

model.summary()
## 📊 OLS Regression Summary
                            Unstd. B Std. Err. (unstd) t-value Std. β Semi-partial R²         p-value
Intercept                      2.284             0.473   4.829                         0.000 (< .001)
personalization                0.814             0.319   2.553  0.305           0.035   0.012 (< .05)
involvement                    0.609             0.177   3.443  0.363           0.064  0.001 (< .001)
personalization:involvement    0.374             0.248   1.510  0.204           0.012    0.134 (n.s.)
age                            0.039             0.010   3.713  0.273           0.074  0.000 (< .001)

## 📈 Model Fit Statistics
N            100
R²         0.490
Adj. R²    0.469

Tutorial 2️⃣ ANOVA / ANCOVA (SPSS-like)

import sunlm

model = sunlm.aov(
    "purchase_intention ~ C(personalization) * C(involvement) + age",
    data=df
)

model.summary()
## Tests of Between-Subjects Effects
Dependent Variable: purchase_intention
                       Source   sum_sq  df mean_sq      F        p-value Partial Eta Squared
              Corrected Model   91.322   6  15.220 16.409 0.000 (< .001)               0.514
                    Intercept   64.597   1  64.597 69.640 0.000 (< .001)               0.428
     personalization (factor)   33.449   1  33.449 36.060 0.000 (< .001)               0.279
         involvement (factor)   40.764   2  20.382 21.973 0.000 (< .001)               0.321
personalization × involvement    2.883   2   1.441  1.554   0.217 (n.s.)               0.032
                          age   11.819   1  11.819 12.742 0.001 (< .001)               0.120
                        Error   86.266  93   0.928                                          
                        Total 2719.617 100                                                  
              Corrected Total  177.588  99                                                  

R Squared = 0.514 (Adjusted R Squared = 0.483)

Tutorial 3️⃣ Post Hoc Tests

Tukey HSD

model.TukeyHSD("involvement")
## Tukey HSD for involvement (alpha=0.05)
 group1  group2 meandiff Std. Error        p-value  lower upper
      0       1    1.186      0.235 0.000 (< .001)  0.494 1.877
      0       2    1.494      0.243 0.000 (< .001)  0.779 2.210
      1       2    0.309      0.233   0.534 (n.s.) -0.377 0.995

Bonferroni

model.Bonferroni("involvement")
## Bonferroni Pairwise Comparisons for involvement (alpha=0.05)
 group1  group2 meandiff Std. Error     t        p-value  lower upper
      0       1    1.149      0.237 4.846 0.000 (< .001)  0.571 1.727
      0       2    1.576      0.246 6.410 0.000 (< .001)  0.976 2.175
      1       2    0.427      0.234 1.828   0.212 (n.s.) -0.142 0.996

Top-level API Summary

sunlm.reg(formula, data)   # OLS regression
sunlm.aov(formula, data)   # ANOVA / ANCOVA
sunlm.data()               # Load example dataset

Citation

If you use sunlm in academic research, please cite it as:

Kim, S.-W. (2025). sunlm (Version 0.1.3.post1) [Software]. https://pypi.org/project/sunlm/


License

MIT License


Author

Seonwoo Kim
Northern Arizona University

Designed for researchers who want SPSS-equivalent statistics with Python clarity.

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

sunlm-0.1.3.post9.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

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

sunlm-0.1.3.post9-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file sunlm-0.1.3.post9.tar.gz.

File metadata

  • Download URL: sunlm-0.1.3.post9.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for sunlm-0.1.3.post9.tar.gz
Algorithm Hash digest
SHA256 67026cfe92191aee0426f8bbffbce3d3abe3cdb114062ca2ebe02e9d31da3c53
MD5 3a8230ceb0b4dd3baf926db0bee19638
BLAKE2b-256 46c3925eaa4e4dc422a035222e59acdf1fe653d67c72e5b3f46baabf6a4ea78e

See more details on using hashes here.

File details

Details for the file sunlm-0.1.3.post9-py3-none-any.whl.

File metadata

  • Download URL: sunlm-0.1.3.post9-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for sunlm-0.1.3.post9-py3-none-any.whl
Algorithm Hash digest
SHA256 a1abdeaa86867865b6a7fc03196b3153425c62af652987a1d39e3255c9beafec
MD5 8a08821b4916be6254e338341bfe42e2
BLAKE2b-256 2e82cdaaea1f3efd5ce5dbe1209fcdac313dfb7ffbcad90002c5328bef75fa13

See more details on using hashes here.

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