Hi Ehud,
The weights need to be 1 / uncertainty^2
see this. There is no need for Thread
, the data is already in the right form.
errors = data /. {_, u_} :> u["Uncertainty"]
nlm = NonlinearModelFit[data, a x^2 + b, {a, b}, x, Weights -> 1/errors^2]
nlm["BestFit"]
(* x^2 (2.00±0.10) + (5.0±1.3) *)