-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Description
I added an explicit NotImplementedError
and future test in #5245 - 022cefa
Partial observed variables now rely on Aesara's local_subtensor_rv_lift
, to separate the observed and unobserved portions of a RV into two separate RVs.
This rewrite needs to be updated to work for Multivariate distributions, there are a couple of comments in its code suggesting how to start approaching such task. If it does not already exist, we should open an issue in Aesara as those code changes would go there.
Importantly, even after this rewrite, we won't have the same flexibility we had in V3, where we might be missing some portions of a the base multidimensional value. Let's call these "sub-values", such as in pm.MvNormal("x", np.ones(2), np.eye(2), observed=np.array([[1, 1], [1, np.nan]])
, because the missing portion of the distribution does not correspond to a MvNormal
distribution. In contrast, pm.MvNormal("x", np.ones(2), np.eye(2), observed=np.array([[1, np.nan], [1, np.nan]])
should work just fine, as we can split that into two MvNormal
s.
On the bright side, we would retain the ability to transform imputed values which was not the case with V3, and which would not be trivial if we were to somehow allow for "sub-value" imputation, because we don't know what are the constraints on those "sub-values".
One different issue, concerns partial observations for aeppl "derived" distributions such as in #5169. These won't work out of the box, because local_subtensor_rv_lift
is meant to work only with pure RandomVariables
. In theory we could make such rewrite (or a copycat one) work with these "derived distributions", as long as we can provide the value and parameters support/mapping information that the rewrite requires, as well as the ability to re-create a node on the spot. In #5169 I had to implement most of these features anyway, but kept them accessible only via the cls
object. These can easily be made more accessible via class properties or dispatching.