MINOS and reliability of errors

Hi,

I want to minimize a problem (with 17 variables) and get reliable errors using root/minuit2 5.28/00h. Migrad does successfully converge when fitting for the 17 free parameters. When fitting for only 2 free parameters (over the 17), MINOS does a good job of estimating the errors. However when fitting for 3 parameters, MINOS fails to compute some lower or upper errors (see log below) but still give some values.
So where do these values come from? Is it the correlation between parameters that prevent a reliable estimation of the errors? Does anyone has some advice on how to fix this?

Thanks
Gregory

  MnMinimize migrad(fFCN, upar);
  FunctionMinimum min = migrad();

  cout<<"start Minos 1-sigma error"<<endl;
  MnMinos Minos(fFCN, min, MnStrategy(2));
  pair<double, double> e0, e1, e2, e3, e4, e5;
  if (!alpha_fixed) e0 = Minos(0);
  if (!delta_fixed) e1 = Minos(1);
  if (!phase0_fixed) e2 = Minos(2);
  if (!inc_fixed) e3 = Minos(3);
  if (!psi00_fixed) e4 = Minos(4);

  if (!alpha_fixed)  cout<<" alpha: "<<min.UserState().Value("alpha")<<" +/- "<<e0.first<<" "<<e0.second<<endl;
  if (!delta_fixed)  cout<<" delta: "<<min.UserState().Value("delta")<<" +/- "<<e1.first<<" "<<e1.second<<endl;
  if (!phase0_fixed) cout<<"phase0: "<<min.UserState().Value("phase0")<<" +/- "<<e2.first<<" "<<e2.second<<endl;
  if (!inc_fixed)    cout<<"   inc: "<<min.UserState().Value("inc")<<" +/- "<<e3.first<<" "<<e3.second<<endl;
  if (!psi00_fixed)  cout<<" psi00: "<<min.UserState().Value("psi00")<<" +/- "<<e4.first<<" "<<e4.second<<endl;

  cout<<"start Minos 2-sigma error"<<endl;
  fFCN.setErrorDef(4.);
  if (!alpha_fixed) e0 = Minos(0);
  if (!delta_fixed) e1 = Minos(1);
  if (!phase0_fixed) e2 = Minos(2);
  if (!inc_fixed) e3 = Minos(3);
  if (!psi00_fixed) e4 = Minos(4);

  if (!alpha_fixed)  cout<<" alpha: "<<min.UserState().Value("alpha")<<" +/- "<<e0.first<<" "<<e0.second<<endl;
  if (!delta_fixed)  cout<<" delta: "<<min.UserState().Value("delta")<<" +/- "<<e1.first<<" "<<e1.second<<endl;
  if (!phase0_fixed) cout<<"phase0: "<<min.UserState().Value("phase0")<<" +/- "<<e2.first<<" "<<e2.second<<endl;
  if (!inc_fixed)    cout<<"   inc: "<<min.UserState().Value("inc")<<" +/- "<<e3.first<<" "<<e3.second<<endl;
  if (!psi00_fixed)  cout<<" psi00: "<<min.UserState().Value("psi00")<<" +/- "<<e4.first<<" "<<e4.second<<endl;