- for (int i = 0; i < num_players; ++i) {
- for (int j = 0; j < num_players; ++j) {
- printf("%.12f ", hessian[i][j]);
+// Compute uncertainty (stddev) of mu estimates, which is sqrt((H^-1)_ii),
+// where H is the Hessian (see construct_hessian()).
+void compute_mu_uncertainty(const float *mu, const vector<string> &players)
+{
+ // FIXME: Use pseudoinverse if applicable.
+ Matrix<float, Dynamic, Dynamic> ih = hessian.inverse();
+ for (unsigned i = 0; i < players.size(); ++i) {
+ mu_stddev[i] = sqrt(ih(i, i));
+ }
+
+ for (unsigned i = 0; i < players.size(); ++i) {
+ for (unsigned j = 0; j < players.size(); ++j) {
+ printf("covariance %s %s %f\n",
+ players[i].c_str(),
+ players[j].c_str(),
+ ih(i, j));