Skip to main content

SOFM

Spatially orthogonal factor models

Installation

Please install scikit-sparse via conda before installing this package:

conda install -c conda-forge scikit-sparse
pip install sofm

Data

Please use the spatialLIBD_to_netcdf.R script to download the DLPFC data from R and save as a netcdf file to be imported into xarray.

Code example

from sofm import SOFM

# 1. Load netcdf into xarray
# Please see `spatialLIBD_to_netcdf.R` for directions on formatting the netcdf file.
da = xr.open_dataset("/data_directory/spatial_transcriptomic_data.nc", engine='netcdf4')['logcounts']

da = da - da.mean(dim='spot') #SOFM assumes the mean structure has been subtracted
da = da.rename({ #SOFM assumes `da` has `location` dimension indexed by `lat,lon` coordinates
    'spot': 'location', 
    'array_col': 'lon', 
    'array_row': 'lat'
})
da = da.set_index(location=['lat', 'lon'])

# 2. Initialize SOFM model
sofm_model = SOFM(
    data=da, 
    n_components=5, 
    n_cores=-1 #please set number of cores
)

# 3. Fit model
sofm_model.fit()

# 4. Visualize spatial loadings
fig = sofm_model.plot_loadings(robust=True)
fig.show()

# 5. Analyze latent factors
latent_factors = sofm_model.Ez_

If helpful, try out the code using a synthetic dataset,

import numpy as np
import xarray as xr
from sofm import SOFM

# 1. Generate Synthetic Data
# Create a 30x30 spatial grid
lats, lons = np.meshgrid(np.linspace(-5, 5, 30), np.linspace(-5, 5, 30))
lat_flat = lats.flatten()
lon_flat = lons.flatten()
n_locations = len(lat_flat)
n_features = 20

factor1 = np.sin(lat_flat) + np.cos(lon_flat)      
factor2 = np.exp(-(lat_flat**2 + lon_flat**2) / 2) 
factor3 = lat_flat + lon_flat                      
Z = np.column_stack([factor1, factor2, factor3])

np.random.seed(42)
W = np.random.randn(3, n_features) # Synthetic loadings
data_matrix = Z @ W + np.random.randn(n_locations, n_features) * 0.5

da = xr.DataArray(
    data_matrix,
    dims=['location', 'feature'],
    coords={
        'lat': ('location', lat_flat),
        'lon': ('location', lon_flat),
        'feature': np.arange(n_features)
    }
)
da = da.set_index(location=['lat', 'lon'])
da = da - da.mean(dim='location')

# 2. Initialize SOFM model
sofm_model = SOFM(
    data=da, 
    n_components=3, 
    n_cores=-1 #please set number of cores
)

# 3. Fit model
sofm_model.fit()

# 4. Visualize spatial loadings
fig = sofm_model.plot_loadings(robust=True)
fig.show()

# 5. Analyze latent factors
latent_factors = sofm_model.Ez_

Release files for sofm 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sofm 0.1.5
File Size Uploaded
sofm-0.1.5.tar.gz 19.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sofm 0.1.5
File Interpreter ABI Platform
sofm-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 39.7 kB

Release files / sofm-0.1.5.tar.gz

Download URL sofm-0.1.5.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
3037043bb85babb5d983f9e9f4aeeb740d6a15df4cd35d3a32d7d8f42f9d5f1a
BLAKE2b-256 checksum
How to use checksums
1f0f8a7bf14e3ae2012ca798ed89a35a55e9c8135ef046fb6cf0508a5974aa9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / sofm-0.1.5-py3-none-any.whl

Download URL sofm-0.1.5-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aed5b954e6ea3eff5561e430d256a4a4a4f9a3681cb9d34edcf1dbef44e66f9b
BLAKE2b-256 checksum
How to use checksums
b2b0135cd4ed09ad1f960433894d5d66258fa44c5d021e5e86afebc2f37d9597
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

0.1.6

2 release files

This release

0.1.5 This release

2 release files

0.1.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page