Covariate moderated EBNM
Project description
como (Covariate moderated EBNM)
Python implimentation of various covariate moderated EBNM
Problem set-up
$$ \begin{align} \hat\beta \sim N(\beta, s^2) \ \beta \sim \pi_0(x) f_0 + \pi_1(x) f_1 \ \log \frac{\pi_1(x)}{\pi_0(x)} = {\bf \beta}^T {\bf x} \end{align} $$
- A logistic regression model $\log \frac{\pi_1({\bf x})}{\pi_0({\bf x})} = {\bf b}^T {\bf x}$
- A null component distribution $f_0$
- A alternative component distribution $f_1$
TwoComponentCoMo
TwoComponentCoMo is an abstract class that encapsulates the logic for fitting two component covariate moderated EBNM.
It's constructor requires a dictionary
dataa dictionaryf0andf1twoComponentDistributionobject (described below)logregaLogisticRegressionobject (described below)
ComponentDistribution
We've implmented a few options for $f_0$ and $f_1$ that can be flexibly recombined. ComponentDistribution
convolved_log_pdf(self, beta, se): compute $\log p(\hat\beta | s^2) = \log \int N(\hat\beta | \beta, s^2) f(\beta) d\beta$update(self, data): update the parameters ofComponentDistributionusingdata. Importantly, in practice this function should weight our observations according to the assignment probabilities.
So far we've implimented the following component distributions:
PointMassComponent: a point mass, usual choice for $f_0$NormalFixedLocComponent: a normal distribution with fixed location parameter (defaultloc=0)-- we estimate the scale parameterUnimodalNormalMixtureComponent: a scale mixture of normals, we estimate the mixture distribution $\pi$
LogisticRegression
LogisticRegression.predict(): return (expected) predicted log odds given current parameter estimates
LogisticRegression.evidence(): compute the log likelihood or lower bound for current parameter estimates
LogisticRegression.update(): update the logistic regression, accounting for the current assignment probabilities
So far we've implimented the following classes inheriting LogisticRegression:
LogisticSuSiE: log odds are modeled with a sparse regression $\beta^T x$ where $\beta$ has the sum of single effects prior.InterceptOnly: ignore the covariates, just estimate a constant mixture proprotion for all observations
Putting it all together
We can easily specify a new two component model, inheriting from the base TwoComponentCoMo class
class PointNormalSuSiE(TwoComponentCoMo):
def __init__(self, data, scale=1.0):
"""
Initialize Point Normal SuSiE
(Covariatiate EBNM with "point-normal" effects,
and SuSiE prior on the mixture proportion)
Parameters:
data: dictionary with keys
'beta' and 'se' for observations and standard errors,
'X' and 'Z' for annotations and (fixed) covariates resp.
scale: (initial) scale parameter for the normal mixture component
"""
f0 = PointMassComponent(0.0)
f1 = NormalFixedLocComponent(0, scale)
# TODO: make sure `y` is a key in data, otherwise make it
logreg = LogisticSusie(data, L=10)
super().__init__(data, f0, f1, logreg)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file como_ebnm-0.0.1-py3-none-any.whl.
File metadata
- Download URL: como_ebnm-0.0.1-py3-none-any.whl
- Upload date:
- Size: 4.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f02d5aeaafa9d698979c2f17c543f5fab8905195a0473649c27f2c4c7615d886
|
|
| MD5 |
c88ab6766b75586dd0354344c4b8e9de
|
|
| BLAKE2b-256 |
1ee3e6ea524d5253b45e1119f7612f7bc19496df3274a32e58383e30f91b5ff7
|