Source code for embedded_voting.ratings.ratings_generator_epistemic_multivariate

from embedded_voting.ratings.ratings_generator_epistemic \
    import RatingsGeneratorEpistemic
import numpy as np
from embedded_voting.ratings.ratings import Ratings


[docs]class RatingsGeneratorEpistemicMultivariate(RatingsGeneratorEpistemic): """ A generator of ratings based on a covariance matrix. Parameters ---------- covariance_matrix : np.ndarray The covariance matrix of the voters. Should be of shape :attr:`~embedded_voting.RatingsGenerator.n_voters`, :attr:`~embedded_voting.RatingsGenerator.n_voters`. independent_noise : float The variance of the independent noise. truth_generator : TruthGenerator The truth generator used to generate to true values of each candidate. Default: `TruthGeneratorUniform(10, 20)`. Attributes ---------- ground_truth_ : np.ndarray The ground truth ("true value") for each candidate, corresponding to the last ratings generated. Examples -------- >>> np.random.seed(42) >>> generator = RatingsGeneratorEpistemicMultivariate(np.ones((5, 5))) >>> generator() # doctest: +ELLIPSIS Ratings([[17.2428...], [17.2428...], [17.2428...], [17.2428...], [17.2428...]]) >>> generator.independent_noise = 0.5 >>> generator() # doctest: +ELLIPSIS Ratings([[14.5710...], [14.3457...], [15.0093...], [14.3981...], [14.1460...]]) """ def __init__(self, covariance_matrix, independent_noise=0, truth_generator=None): n_voters = len(covariance_matrix) super().__init__(n_voters=n_voters, truth_generator=truth_generator) self.covariance_matrix = covariance_matrix self.independent_noise = independent_noise def __call__(self, n_candidates=1): self.ground_truth_ = self.truth_generator(n_candidates=n_candidates) ratings = np.zeros((self.n_voters, n_candidates)) for i in range(n_candidates): v_dependent_noise = np.random.multivariate_normal( mean=np.zeros(self.n_voters), cov=self.covariance_matrix) v_independent_noise = np.random.normal( loc=0, scale=self.independent_noise, size=self.n_voters) ratings[:, i] = self.ground_truth_[i] + v_dependent_noise + v_independent_noise return Ratings(ratings)