@@ -789,6 +789,29 @@ def value_vars(self):
789
789
"""
790
790
return [self .rvs_to_values [v ] for v in self .free_RVs ]
791
791
792
+ @property
793
+ def unobserved_value_vars (self ):
794
+ """List of all random variables (including untransformed projections),
795
+ as well as deterministics used as inputs and outputs of the the model's
796
+ log-likelihood graph
797
+ """
798
+ vars = []
799
+ for rv in self .free_RVs :
800
+ value_var = self .rvs_to_values [rv ]
801
+ transform = getattr (value_var .tag , "transform" , None )
802
+ if transform is not None :
803
+ # We need to create and add an un-transformed version of
804
+ # each transformed variable
805
+ untrans_value_var = transform .backward (rv , value_var )
806
+ untrans_value_var .name = rv .name
807
+ vars .append (untrans_value_var )
808
+ vars .append (value_var )
809
+
810
+ # Remove rvs from deterministics graph
811
+ deterministics , _ = rvs_to_value_vars (self .deterministics , apply_transforms = True )
812
+
813
+ return vars + deterministics
814
+
792
815
@property
793
816
def basic_RVs (self ):
794
817
"""List of random variables the model is defined in terms of
@@ -803,7 +826,7 @@ def basic_RVs(self):
803
826
804
827
@property
805
828
def unobserved_RVs (self ):
806
- """List of all random variable , including deterministic ones.
829
+ """List of all random variables , including deterministic ones.
807
830
808
831
These are the actual random variable terms that make up the
809
832
"sample-space" graph (i.e. you can sample these graphs by compiling them
@@ -1049,10 +1072,12 @@ def make_obs_var(
1049
1072
self .add_random_variable (observed_rv_var , dims )
1050
1073
self .observed_RVs .append (observed_rv_var )
1051
1074
1075
+ # Create deterministic that combines observed and missing
1052
1076
rv_var = at .zeros (data .shape )
1053
1077
rv_var = at .set_subtensor (rv_var [mask .nonzero ()], missing_rv_var )
1054
1078
rv_var = at .set_subtensor (rv_var [antimask_idx ], observed_rv_var )
1055
1079
rv_var = Deterministic (name , rv_var , self , dims )
1080
+
1056
1081
elif sps .issparse (data ):
1057
1082
data = sparse .basic .as_sparse (data , name = name )
1058
1083
rv_var .tag .observations = data
0 commit comments