deepirtools package¶
deepirtoools.iwave
Module¶
- class deepirtools.iwave.IWAVE(model_type: Union[str, List[str]], learning_rate: float = 0.001, device: str = 'cpu', gradient_estimator: str = 'dreg', log_interval: int = 100, verbose: bool = True, n_intervals: int = 100, **model_kwargs)[source]¶
Importance-weighted amortized variational estimator (I-WAVE). 1 2
- Parameters
model_type (str or list of str)) –
Measurement model type.
Can either be a string if all items have same type or a list of strings specifying each item type.
Let \(y_j\) be the response to item \(j\), \(\boldsymbol{x}\) be a \(\text{latent_size} \times 1\) vector of latent factors, and \(\boldsymbol{\beta}_j\) be a \(\text{latent_size} \times 1\) vector of factor loadings for item \(j\). Current measurement model options are:
"grm", graded response model:
\[\begin{split}\begin{split} &\text{Pr}(y_j = k \mid \mathbf{x}) \\ &= \begin{cases} 1 - \sigma(\alpha_{j,k + 1} + \boldsymbol{\beta}_j^\top \mathbf{x}), & \text{if $k = 0$} \\ \sigma(\alpha_{j,k} + \boldsymbol{\beta}_j^\top \mathbf{x}) - \sigma(\alpha_{j,k+1} + \boldsymbol{\beta}_j^\top \mathbf{x}), & \text{if $k \in \{1, \ldots, K_j - 2\}$},\\ \sigma(\alpha_{j,k} + \boldsymbol{\beta}_j^\top \mathbf{x}), & \text{if $k = K_j - 1$}, \end{cases} \end{split}\end{split}\]where \(\alpha_{j, k}\) is the \(k^\text{th}\) category intercept for item \(j\), \(K_j\) is the number of response categories for item \(j\), and \(\sigma(z) = 1 / (1 + \exp[-z])\) is the inverse logistic link function.
"gpcm", generalized partial credit model:
\[\text{Pr}(y_j = k - 1 \mid \boldsymbol{x}) = \frac{\exp\big[(k - 1)\boldsymbol{\beta}_j^\top \boldsymbol{x} + \sum_{\ell = 1}^k \alpha_{j, \ell} \big]}{\sum_{m = 1}^{K_j} \exp \big[ (m - 1) \boldsymbol{\beta}_j^\top\boldsymbol{x} + \sum_{\ell = 1}^m \alpha_{j, \ell} \big]},\]where \(k = 1, \ldots, K_j\) and \(\alpha_{j, k}\) is the \(k^\text{th}\) category intercept for item \(j\).
"nominal", nominal response model:
\[\text{Pr}(y_j = k \mid \boldsymbol{x}) = \frac{\exp[\mathbb{1}(k \neq 0) (\alpha_{j, k} + \boldsymbol{\beta}_j^\top \boldsymbol{x}) ]}{1 + \sum_{\ell = 1}^{K_j} \exp [ \alpha_{j, \ell} + \boldsymbol{\beta}_j^\top \boldsymbol{x} ]},\]where \(k = 0, \ldots, K_j - 1\), \(\mathbb{1}(\cdot)\) is the indicator function, and \(\alpha_{j, k}\) is the \(k^\text{th}\) category intercept for item \(j\).
"poisson", poisson factor model:
\[y_j \mid \boldsymbol{x} \sim \text{Pois}(\exp[\boldsymbol{\beta}_j^\top\boldsymbol{x} + \alpha_j]),\]where \(y_j \in \{ 0, 1, 2, \ldots \}\) and \(\alpha_j\) is the intercept for item \(j\).
"negative_binomial", negative binomial factor model:
\[y_j \mid \boldsymbol{x} \sim \text{NB}(\exp[\boldsymbol{\beta}_j^\top\boldsymbol{x} + \alpha_j], p),\]where \(y_j \in \{ 0, 1, 2, \ldots \}\), \(\alpha_j\) is the intercept for item \(j\), and \(p\) is a success probability.
"normal", normal factor model:
\[y_j \mid \boldsymbol{x} \sim \mathcal{N}(\boldsymbol{\beta}_j^\top\boldsymbol{x} + \alpha_j, \sigma_j^2),\]where \(y_j \in (-\infty, \infty)\), \(\alpha_j\) is the intercept for item \(j\), and \(\sigma_j^2\) is the residual variance for item \(j\).
"lognormal", lognormal factor model:
\[\ln y_j \mid \boldsymbol{x} \sim \mathcal{N}(\boldsymbol{\beta}_j^\top\boldsymbol{x} + \alpha_j, \sigma_j^2),\]where \(y_j > 0\) and \(\alpha_j\) is the intercept for item \(j\).
learning_rate (float, default = 0.001) –
Step size for stochastic gradient optimizer.
This is the main hyperparameter that may require tuning. Decreasing it typically improves optimization stability at the cost of increased fitting time.
device (str, default = "cpu") –
Computing device used for fitting.
Current options are:
"cpu", central processing unit; and
"cuda", graphics processing unit.
gradient_estimator (str, default = "dreg") –
Gradient estimator for inference model parameters.
Current options are:
"dreg", doubly reparameterized gradient estimator; and
"iwae", standard gradient estimator.
"dreg" is the recommended option due to its bounded variance as the number of importance-weighted samples tends to infinity.
log_interval (str, default = 100) – Number of mini-batches between printed updates during fitting.
verbose (bool, default = True) – Whether to print updates during fitting.
n_intervals (str, default = 100) – Number of 100-mini-batch intervals after which fitting is terminated if best average loss does not improve.
latent_size (int) – Number of latent factors.
n_cats (list of int and None, optional) –
Number of response categories for each item.
Only needed if some items are categorical. Any continuous items or counts are indicated with None.
For example, setting
n_cats = [3, 3, None, 2]
indicates that items 1–2 are categorical with 3 categories, item 3 is continuous, and item 4 is categorical with 2 categories.n_items (int, optional) –
Number of items.
Only specified if all items are continuous. Not needed if n_cats is specified instead.
inference_net_sizes (list of int, default = [100]) –
Neural network inference model hidden layer dimensions.
For example, setting
inference_net_sizes = [100, 100]
creates a neural network inference model with two hidden layers of size 100.fixed_variances (bool, default = True) –
Whether to constrain variances of latent factors to one.
Only applicable when
use_spline_prior = False
.fixed_means (bool, default = True) –
Whether to constrain means of latent factors to zero.
Only applicable when
use_spline_prior = False
.correlated_factors (list of int, default = []) –
Which latent factors should be correlated.
Only applicable when
use_spline_prior = False
.For example, setting
correlated_factors = [0, 3, 4]
in a model with 5 latent factors models the correlations between the first, fourth, and fifth factors while constraining the other correlations to zero.covariate_size (int, default = None) –
Number of covariates for latent regression.
Setting
covariate_size > 0
whenuse_spline_prior = False
models the distribution of the latent factors as:3 4\[\boldsymbol{x} \mid \boldsymbol{z} \sim \mathcal{N}(\boldsymbol{\Gamma}^\top \boldsymbol{z}, \boldsymbol{\Sigma}),\]where \(\boldsymbol{\Gamma}\) is a \(\text{latent_size} \times \text{covariate_size}\) matrix of regression weights, \(\boldsymbol{z}\) is a \(\text{covariate_size} \times 1\) vector of covariates, and \(\boldsymbol{\Sigma}\) is a \(\text{latent_size} \times \text{latent_size}\) factor covariance matrix.
Q (Tensor, default = None) –
Binary matrix indicating measurement structure.
A \(\text{n_items} \times \text{latent_size}\) matrix. Elements of \(\mathbf{Q}\) are zero if the corresponding loading is set to zero and one otherwise:
\[\beta_{j,d} = q_{j,d} \beta_{j,d}',\]where \(\beta_{j,d}\) is the loading for item \(j\) on factor \(d\), \(q_{j,d} \in \{0, 1\}\) is an element of \(\mathbf{Q}\), and \(\beta_{j,d}'\) is an unconstrained loading.
A (Tensor, default = None) –
Matrix imposing linear constraints on loadings.
Linear constraints are imposed as follows:
\[\boldsymbol{\beta} = \boldsymbol{b} + \boldsymbol{A} \boldsymbol{\beta}',\]where \(\boldsymbol{\beta} = (\beta_{1, 1}, \ldots, \beta_{\text{n_items}, 1}, \ldots, \beta_{1, \text{latent_size}}, \ldots, \beta_{\text{n_items}, \text{latent_size}})^\top\) is a \((\text{latent_size} \cdot \text{n_items}) \times 1\) vector of constrained loadings values, \(\boldsymbol{b}\) is a \((\text{latent_size} \cdot \text{n_items}) \times 1\) vector of constants, \(\boldsymbol{A}\) is a \((\text{latent_size} \cdot \text{n_items}) \times (\text{latent_size} \cdot \text{n_items})\) matrix of constants, and \(\boldsymbol{\beta}' = (\beta_{1, 1}', \ldots, \beta_{\text{n_items}, 1}', \ldots, \beta_{1, \text{latent_size}}', \ldots, \beta_{\text{n_items}, \text{latent_size}}')^\top\) is a \((\text{latent_size} \cdot \text{n_items}) \times 1\) vector of unconstrained loadings.
b (Tensor, default = None) –
Vector imposing linear constraints on loadings.
See above for elaboration on linear constraints.
ints_mask (Tensor, default = None) –
Binary vector constraining specific intercepts to zero.
A length \(\text{n_items}\) vector. For categorical items, only the smallest category intercept is constrained to zero.
use_spline_prior (bool, default = False) – Whether to use spline/spline coupling prior distribution for the latent factors. 5 6
spline_init_normal (bool, default = True) – Whether to initialize spline/spline coupling prior close to a standard normal distribution.
flow_length (int, default = 2) –
Number of spline coupling flow layers.
Only applicable when
latent_size > 1
.count_bins (int, optional) – Number of segments for each spline transformation.
bound (float, optional) – Quantity determining the bounding box of each spline transformation.
spline_net_sizes (list of int, optional) –
Hidden layer dimensions for neural network mapping from covariates to base density for spline/spline coupling prior.
Corresponds to a more flexible version of the latent regression model.
- loadings¶
Factor loadings matrix.
A \(\text{n_items} \times \text{latent_size}\) matrix.
- Type
Tensor
- intercepts¶
Intercepts.
When all items are continuous, a length \(\text{n_items}\) vector. When some items are graded (i.e., ordinal), a \(\text{n_items} \times M\) matrix where \(M\) is the maximum number of response categories across all items.
- Type
Tensor
- residual_std¶
Residual standard deviations.
A length \(\text{n_items}\) vector. Only applicable to normal and lognormal factor models.
- Type
Tensor or None
- probs¶
Success probabilities for Bernoulli trials.
A length \(\text{n_items}\) vector. Only applicable to negative binomial factor models.
- Type
Tensor or None
- cov¶
Factor covariance matrix.
A \(\text{latent_size} \times \text{latent_size}\) matrix. Only applicable when
use_spline_prior = False
.- Type
Tensor or None
- mean¶
Factor mean vector.
A length \(\text{latent_size}\) vector. Only applicable when
use_spline_prior = False
.- Type
Tensor or None
- latent_regression_weight¶
Latent regression weight matrix.
A \(\text{latent_size} \times \text{covariate_size}\). Only applicable to latent regression models.
- Type
Tensor or None
- grad_estimator¶
Gradient estimator for inference model parameters.
- Type
str
- device¶
Computing device used for fitting.
- Type
str
- verbose¶
Whether to print updates during fitting.
- Type
bool
- global_iter¶
Number of mini-batches processed during fitting.
- Type
int
- timerecords¶
Stores run times for various processes (e.g., fitting).
- Type
dict
References
- 1(1,2)
Urban, C. J., & Bauer, D. J. (2021). A deep learning algorithm for high-dimensional exploratory item factor analysis. Psychometrika, 86 (1), 1–29. https://link.springer.com/article/10.1007/s11336-021-09748-3
- 2
Urban, C. J. (2021). Machine learning-based estimation and goodness-of-fit for large-scale confirmatory item factor analysis (Publication No. 28772217) [Master’s thesis, University of North Carolina at Chapel Hill]. ProQuest Dissertations Publishing. https://www.proquest.com/docview/2618877227/21C6C467D6194C1DPQ/
- 3
Camilli, G., & Fox, J.-P. (2015). An aggregate IRT procedure for exploratory factor analysis. Journal of Educational and Behavioral Statistics, 40, 377–401.
- 4
von Davier, M., & Sinharay, S. (2010). Stochastic approximation methods for latent regression item response models. Journal of Educational and Behavioral Statistics, 35 (2), 174–193.
- 5
Durkan, C., Bekasov, A., Murray, I., & Papamakarios, G. (2019). Neural spline flows. Advances in Neural Information Processing Systems, 32. https://papers.nips.cc/paper/2019/hash/7ac71d433f282034e088473244df8c02-Abstract.html
- 6
Dolatabadi, H. M., Erfani, S., & Leckie, C. (2020). Invertible generative modeling using linear rational splines. Proceedings of the 23rd International Conference on Artificial Intelligence and Statistics, 108, 4236–4246. http://proceedings.mlr.press/v108/dolatabadi20a
- 7
Cremer, C., Morris, Q., & Duvenaud, D. (2017). Reinterpreting importance-weighted autoencoders. In 5th International Conference on Learning Representations. ICLR. https://arxiv.org/abs/1704.02916.
Examples
>>> import deepirtools >>> from deepirtools import IWAVE >>> import torch >>> deepirtools.manual_seed(123) >>> data = deepirtools.load_grm()["data"] >>> n_items = data.shape[1] >>> model = IWAVE( ... model_type = "grm", ... latent_size = 4, ... n_cats = [3] * n_items, ... Q = torch.block_diag(*[torch.ones([3, 1])] * 4), ... correlated_factors = [0, 1, 2, 3], ... ) Initializing model parameters Initialization ended in 0.0 seconds >>> model.fit(data, iw_samples = 10) Fitting started Epoch = 100 Iter. = 25201 Cur. loss = 10.68 Intervals no change = 100 Fitting ended in 109.23 seconds >>> model.loadings tensor([[0.8295, 0.0000, 0.0000, 0.0000], [0.5793, 0.0000, 0.0000, 0.0000], [0.7116, 0.0000, 0.0000, 0.0000], [0.0000, 0.7005, 0.0000, 0.0000], [0.0000, 1.1687, 0.0000, 0.0000], [0.0000, 1.2890, 0.0000, 0.0000], [0.0000, 0.0000, 0.9268, 0.0000], [0.0000, 0.0000, 1.2653, 0.0000], [0.0000, 0.0000, 1.5622, 0.0000], [0.0000, 0.0000, 0.0000, 1.0346], [0.0000, 0.0000, 0.0000, 1.3641], [0.0000, 0.0000, 0.0000, 1.1348]]) >>> model.intercepts tensor([[ 2.4245, -0.1637], [ 1.8219, -1.0013], [ 2.0811, -1.1320], [ 0.0948, -1.7253], [ 2.6597, -2.3412], [ 0.2610, -1.4938], [ 2.8196, -1.3281], [ 0.4833, -2.8053], [ 1.6395, -2.2220], [ 1.3482, -1.8870], [ 2.1606, -2.8600], [ 2.5318, -0.1333]]) >>> model.cov tensor([[ 1.0000, -0.0737, 0.2130, 0.2993], [-0.0737, 1.0000, -0.1206, -0.3031], [ 0.2130, -0.1206, 1.0000, 0.1190], [ 0.2993, -0.3031, 0.1190, 1.0000]]) >>> model.log_likelihood(data) Computing approx. LL Approx. LL computed in 33.27 seconds Out[6]: -85961.69088745117 >>> model.scores(data) tensor([[-0.6211, 0.1301, -0.7207, -0.7485], [ 0.2189, -0.2649, 0.0109, -0.2363], [ 0.0544, 0.9308, 0.7940, -0.8851], ..., [-0.2964, -0.9597, -0.8885, -0.0057], [-1.6015, 0.9812, 0.0486, 0.1773], [ 2.0448, 0.0583, 1.2005, -0.9317]])
- fit(data: Tensor, batch_size: int = 32, missing_mask: Optional[Tensor] = None, covariates: Optional[Tensor] = None, max_epochs: int = 100000, **model_kwargs)¶
Fit model to a data set.
- Parameters
data (Tensor) –
Data set.
A \(\text{sample_size} \times \text{n_items}\) matrix.
batch_size (int, default = 32) – Mini-batch size for stochastic gradient optimizer.
missing_mask (Tensor, default = None) –
Binary mask indicating missing item responses.
A \(\text{sample_size} \times \text{n_items}\) matrix.
covariates (Tensor, default = None) –
Matrix of covariates.
A \(\text{sample_size} \times \text{covariate_size}\) matrix .
max_epochs (int, default = 100000) – Number of passes through the full data set after which fitting should be terminated if convergence not achieved.
mc_samples (int, default = 1) –
Number of Monte Carlo samples.
Increasing this decreases the log-likelihood estimator’s variance.
iw_samples (int, default = 5000) –
Number of importance-weighted samples.
Increasing this decreases the log-likelihood estimator’s bias.
- load_model(model_name: str, load_path: str)¶
Load fitted model.
The initialized model should have the same hyperparameter settings as the fitted model that is being loaded (e.g., the same number of latent variables).
- Parameters
model_name (str) – Name of fitted model.
load_path (str) – Where to load fitted model from.
- log_likelihood(data: Tensor, missing_mask: Optional[Tensor] = None, covariates: Optional[Tensor] = None, mc_samples: int = 1, iw_samples: int = 5000)[source]¶
Approximate log-likelihood of a data set.
- Parameters
data (Tensor) –
Data set.
A \(\text{sample_size} \times \text{n_items}\) matrix.
missing_mask (Tensor, default = None) –
Binary mask indicating missing item responses.
A \(\text{sample_size} \times \text{n_items}\) matrix.
covariates (Tensor, default = None) –
Matrix of covariates.
A \(\text{sample_size} \times \text{covariate_size}\) matrix.
mc_samples (int, default = 1) –
Number of Monte Carlo samples.
Increasing this decreases the log-likelihood estimator’s variance.
iw_samples (int, default = 5000) –
Number of importance-weighted samples.
Increasing this decreases the log-likelihood estimator’s bias.
- Returns
ll – Approximate log-likelihood of the data set.
- Return type
float
- sample(sample_size: int, covariates: Optional[Tensor] = None, return_scores: bool = False)[source]¶
Sample from model.
- Parameters
sample_size (int) – Number of observations to sample.
covariates (Tensor, default = None) –
Matrix of covariates.
A \(\text{sample_size} \times \text{covariate_size}\) matrix.
return_scores (bool, default = False) – Whether to reture sampled factor scores in addition to item responses.
- Returns
samples – Sampled observations and factor scores.
- Return type
dict
- save_model(model_name: str, save_path: str)¶
Save fitted model.
- Parameters
model_name (str) – Name for fitted model.
save_path (str) – Where to save fitted model.
- scores(data: Tensor, missing_mask: Optional[Tensor] = None, covariates: Optional[Tensor] = None, mc_samples: int = 1, iw_samples: int = 5000, return_mu: bool = True)[source]¶
Approximate expected a posteriori (EAP) factor scores given a data set.
- Parameters
data (Tensor) –
Data set.
A \(\text{sample_size} \times \text{n_items}\) matrix.
missing_mask (Tensor, default = None) –
Binary mask indicating missing item responses.
A \(\text{sample_size} \times \text{n_items}\) matrix.
covariates (Tensor, default = None) –
Matrix of covariates.
A \(\text{sample_size} \times \text{covariate_size}\) matrix.
mc_samples (int, default = 1) –
Number of Monte Carlo samples.
Increasing this decreases the EAP estimator’s variance.
iw_samples (int, default = 5000) –
Number of importance-weighted samples.
Increasing this decreases the EAP estimator’s bias. When
iw_samples > 1
, samples are drawn from the expected importance-weighted distribution using sampling- importance-resampling. 7return_mu (bool, default = True) –
Whether to return exact approximate EAP scores (i.e., approximate EAP scores with no sampling error).
Equivalent to using an infinite number of Monte Carlo samples. Only applicable when
iw_samples = 1
.
- Returns
factor_scores – Approximate EAP factor scores given the data set.
A \(\text{sample_size} \times \text{latent_size}\) matrix.
- Return type
Tensor
deepirtoools.data
Module¶
- deepirtools.data.load_grm()[source]¶
Return data-generating parameters and sampled data for a graded response model.
The generating model has four correlated latent factors and twelve items with three categories each.
- Returns
res – A dictionary containing sampled data and data-generating parameters. The returned dictionary includes the following key-value pairs:
"data", the sampled data set of item responses;
"loadings", the data-generating factor loadings;
"intercepts", the data-generating category intercepts;
"cov_mat", the data-generating factor covariance matrix; and
"factor_scores", the sampled factor scores.
- Return type
dict
deepirtoools.figures
Module¶
- deepirtools.figures.loadings_heatmap(loadings: Tensor, xlab: str = 'Factor', ylab: str = 'Item', title: str = 'Factor Loadings')[source]¶
Make heatmap of factor loadings.
Result is saved as a PDF in the working directory.
- Parameters
loadings (Tensor) – Factor loadings matrix.
xlab (str, default = "Factor") – Heatmap x-axis label.
ylab (str, default = "Item") – Heatmap y-axis label.
title (str, default = "Factor Loadings") – Heatmap title.
- deepirtools.figures.screeplot(latent_sizes: List[int], data: Tensor, model_type: Union[str, List[str]], test_size: float, inference_net_sizes_list: Optional[List[List[int]]] = None, learning_rates: Optional[List[float]] = None, missing_mask: Optional[Tensor] = None, max_epochs: int = 100000, batch_size: int = 32, gradient_estimator: str = 'dreg', device: str = 'cpu', log_interval: int = 100, mc_samples_fit: int = 1, iw_samples_fit: int = 1, mc_samples_ll: int = 1, iw_samples_ll: int = 5000, random_seed: int = 1, xlab: str = 'Number of Factors', ylab: str = 'Predicted Approximate Negative Log-Likelihood', title: str = 'Approximate Log-Likelihood Scree Plot', **model_kwargs)[source]¶
Make a log-likelihood screeplot. 1
Useful in the exploratory setting to detect the number of latent factors. Result is saved as a PDF in the working directory.
- Parameters
latent_sizes (list of int) – Latent dimensions to plot.
data (Tensor) –
Data set.
A \(\text{sample_size} \times \text{n_items}\) matrix.
model_type (str or list of str) –
Measurement model type.
Can either be a string if all items have same type or a list of strings specifying each item type.
Current options are:
"grm", graded response model;
"gpcm", generalized partial credit model;
"nominal", nominal response model;
"poisson", poisson factor model;
"negative_binomial", negative binomial factor model;
"normal", normal factor model; and
"lognormal", lognormal factor model.
See
IWAVE
class documentation for further details regarding each model type.test_size (float) – Proportion of data used for calculating LL. Range of values is \((0, 1)\).
inference_net_sizes_list (list of list of int, default = None) –
Neural net hidden layer sizes for each latent dimension in the screeplot.
For example, when making a screeplot for three latent dimensions, setting
inference_net_sizes_list = [[150, 75], [150, 75], [150, 75]]
creates three neural nets each with two hidden layers of size 150 and 75, respectively.The default
inference_net_sizes_list = None
sets each neural net to have a single hidden layer of size 100.learning_rates (list of float, default = None) –
Step sizes for stochastic gradient optimizers.
The default
learning_rates = None
sets each optimizer’s step size to 0.001.missing_mask (Tensor, default = None) –
Binary mask indicating missing item responses.
A \(\text{sample_size} \times \text{n_items}\) matrix.
max_epochs (int, default = None) – Number of passes through the full data set after which fitting should be terminated if convergence not achieved.
batch_size (int, default = 32) – Mini-batch size for stochastic gradient optimizer.
gradient_estimator (str, default = "dreg") –
Gradient estimator for inference model parameters.
Current options are:
"dreg", doubly reparameterized gradient estimator; and
"iwae", standard gradient estimator.
"dreg" is the recommended option due to its bounded variance as the number of importance-weighted samples increases.
device (int, default = "cpu") – Computing device used for fitting.
log_interval (str, default = 100) – Frequency of updates printed during fitting.
mc_samples_fit (int, default = 1) – Number of Monte Carlo samples for fitting.
iw_samples_fit (int, default = 1) – Number of importance-weighted samples for fitting.
mc_samples_ll (int, default = 1) – Number of Monte Carlo samples for calculating approximate log-likelihoods.
iw_samples_ll (int, default = 5000) – Number of importance-weighted samples for calculating approximate log-likelihoods.
random_seed (int, default = 1) – Seed for reproducibility.
xlab (str, default = "Number of Factors") – Screeplot x-axis label.
ylab (str, default = "Predicted Approximate Negative Log-Likelihood") – Screeplot y-axis label.
title (str, default = "Approximate Log-Likelihood Scree Plot") – Screeplot title.
**model_kwargs – Additional keyword arguments passed to
IWAVE.__init__()
.
- Returns
ll_list – List of approximate hold-out set log-likelihoods for each latent dimension.
- Return type
list of float
Examples
>>> import deepirtools >>> from deepirtools import screeplot >>> deepirtools.manual_seed(123) >>> data = deepirtools.load_grm()["data"] >>> n_items = data.shape[1] >>> screeplot( ... latent_sizes = [2, 3, 4, 5, 6], ... data = data, ... model_type = "grm", ... test_size = 0.1, ... iw_samples_fit = 10, ... n_cats = [3] * n_items, ... ) Latent size = 2 Initializing model parameters Initialization ended in 0.0 seconds Fitting started Epoch = 79 Iter. = 17801 Cur. loss = 11.78 Intervals no change = 100 Fitting ended in 43.68 seconds Computing approx. LL Approx. LL computed in 2.02 seconds Latent size = 3 Initializing model parameters Initialization ended in 0.0 seconds Fitting started Epoch = 150 Iter. = 33901 Cur. loss = 10.66 Intervals no change = 100 Fitting ended in 73.85 seconds Computing approx. LL Approx. LL computed in 2.48 seconds Latent size = 4 Initializing model parameters Initialization ended in 0.0 seconds Fitting started Epoch = 97 Iter. = 22001 Cur. loss = 10.69 Intervals no change = 100 Fitting ended in 48.14 seconds Computing approx. LL Approx. LL computed in 2.54 seconds Latent size = 5 Initializing model parameters Initialization ended in 0.0 seconds Fitting started Epoch = 65 Iter. = 14801 Cur. loss = 10.23 Intervals no change = 100 Fitting ended in 32.25 seconds Computing approx. LL Approx. LL computed in 2.53 seconds Latent size = 6 Initializing model parameters Initialization ended in 0.0 seconds Fitting started Epoch = 87 Iter. = 19701 Cur. loss = 10.85 Intervals no change = 100 Fitting ended in 47.94 seconds Computing approx. LL Approx. LL computed in 2.37 seconds [-8626.66552734375, -8601.913513183594, -8603.8798828125, -8604.689666748047, -8603.455841064453]
deepirtools.utils
Module¶
- deepirtools.utils.invert_cov(cov: Tensor, mat: Tensor)[source]¶
Flip factor covariances according to loadings signs.
- Parameters
cov (Tensor) – Factor covariance matrix.
mat (Tensor) – Loadings matrix.
- Returns
inverted_cov – Inverted factor covariance matrix.
- Return type
Tensor
- deepirtools.utils.invert_factors(mat: Tensor)[source]¶
For each factor, flip sign if sum of loadings is negative.
- Parameters
mat (Tensor) – Loadings matrix.
- Returns
inverted_mat – Inverted loadings matrix.
- Return type
Tensor
- deepirtools.utils.invert_latent_regression_weight(weight: Tensor, mat: Tensor)[source]¶
Flip latent regression weights according to loadings signs.
- Parameters
weight (Tensor) – Latent regression weight matrix.
mat (Tensor) – Loadings matrix.
- Returns
inverted_weight – Inverted latent regression weight matrix.
- Return type
Tensor
- deepirtools.utils.invert_mean(mean: Tensor, mat: Tensor)[source]¶
Flip factor means according to loadings signs.
- Parameters
mean (Tensor) – Factor mean vector.
mat (Tensor) – Loadings matrix.
- Returns
inverted_mean – Inverted factor mean vector.
- Return type
Tensor
- deepirtools.utils.normalize_ints(ints: Tensor, mat: Tensor, n_cats: List[int])[source]¶
Convert intercepts to normal ogive metric (only for IRT models).
- Parameters
ints (Tensor) – Intercepts vector.
mat (Tensor) – Loadings matrix.
n_cats (list of int) – Number of categories for each item.
- Returns
normalized_ints – Normalized intercepts vector.
- Return type
Tensor