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.4

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.4
File Size Uploaded
sofm-0.1.4.tar.gz 19.2 kB Details

Built distribution (wheel)

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

Total release size: 39.5 kB

Release files / sofm-0.1.4.tar.gz

Download URL sofm-0.1.4.tar.gz
Size 19.2 kB
Tags Source
SHA-256 checksum
How to use checksums
4079f5f0551a0a0b3a59bb7fb84ea62de35208e0779d84a65e4a94be64b7d950
BLAKE2b-256 checksum
How to use checksums
bb8c2e5006686d9b067b596ba06de594126393168c48ed5a5ad9f26842785845
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.4-py3-none-any.whl

Download URL sofm-0.1.4-py3-none-any.whl
Size 20.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07d3511bb8e9f35bcab11db5f602fbedaed5ad12eae427fd235d9e2f24bf8795
BLAKE2b-256 checksum
How to use checksums
c34e66db4b74731ea866a7da336bd8f7e29fccb139b0e2bc3f6fb7f58cc0c56f
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

0.1.5

2 release files

This release

0.1.4 This release

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