I am not sure this would work - at least it is not one of the cases that we tested I think.
Internally, PyMC3 search for the masked value in the observed, and create a free random variable of the masked values. In effect it is adding a new random variable and do prior predictive sample from it:
elif isinstance(data, dict):
with self:
var = MultiObservedRV(name=name, data=data, distribution=dist,
total_size=total_size, model=self)
self.observed_RVs.append(var)
if var.missing_values:
self.free_RVs += var.missing_values
self.missing_values += var.missing_values
for v in var.missing_values:
self.named_vars[v.name] = v
else:
with self:
var = ObservedRV(name=name, data=data,
distribution=dist,
total_size=total_size, model=self)
self.observed_RVs.append(var)
if var.missing_values:
self.free_RVs.append(var.missing_values)
self.missing_values.append(var.missing_values)
self.named_vars[var.missing_values.name] = var.missing_values
def as_tensor(data, name, model, distribution):
dtype = distribution.dtype
data = pandas_to_array(data).astype(dtype)
if hasattr(data, 'mask'):
from .distributions import NoDistribution
testval = np.broadcast_to(distribution.default(), data.shape)[data.mask]
fakedist = NoDistribution.dist(shape=data.mask.sum(), dtype=dtype,
testval=testval, parent_dist=distribution)
missing_values = FreeRV(name=name + '_missing', distribution=fakedist,
model=model)
constant = tt.as_tensor_variable(data.filled())
dataTensor = tt.set_subtensor(
constant[data.mask.nonzero()], missing_values)
dataTensor.missing_values = missing_values
return dataTensor
elif sps.issparse(data):
data = sparse.basic.as_sparse(data, name=name)
data.missing_values = None
This file has been truncated. show original
1 Like