def expectation(self, dataSplit, coefficients, variances):
assignment_weights = np.ones(
(len(dataSplit), self.num_components), dtype=float)
self.Q = len(self.endoVar)
for k in range(self.num_components):
coef_ = coefficients[k]
Beta = coef_.ix[self.endoVar][self.endoVar]
Gamma = coef_.ix[self.endoVar][self.exoVar]
a_ = (np.dot(Beta, self.fscores[
self.endoVar].T) + np.dot(Gamma, self.fscores[self.exoVar].T))
invert_ = np.linalg.inv(np.array(variances[k]))
exponential = np.exp(-0.5 * np.dot(np.dot(a_.T, invert_), a_))
den = (((2 * np.pi)**(self.Q / 2)) *
np.sqrt(np.linalg.det(variances[k])))
probabilities = exponential / den
probabilities = probabilities[0]
assignment_weights[:, k] = probabilities
assignment_weights /= assignment_weights.sum(axis=1)[:, np.newaxis]
# print(assignment_weights)
return assignment_weights
评论列表
文章目录