2013-10-29 14 views
7

Próbuję wykonać liniowe dopasowanie do niektórych danych w numpy.Jakie są wartości masy używane w numpy polyfit i jaki jest błąd dopasowania

Ex (gdzie W jest liczbą próbek mam do tej wartości, to znaczy do punktu (x=0, y=0) że tylko 1 pomiarów i wartość tego pomiaru jest 2.2, ale z punktu (1,1) mam 2 pomiarów z wartością . z 3.5

x = np.array([0, 1, 2, 3]) 
y = np.array([2.2, 3.5, 4.6, 5.2]) 
w = np.array([1, 2, 2, 1]) 

z = np.polyfit(x, y, 1, w = w) 

Więc teraz jest pytanie: jest to prawidłowe użycie w=w w polyfit dla tych przypadków lub powinno się używać w = sqrt(w) co powinienem użyć

także, w jaki sposób? Dostaję błąd dopasowania od polyfit?

Odpowiedz

4

Jeśli normalnie dzieliłeś pomiary, niepewność co do każdej wartości byłaby proporcjonalna do 1/sqrt(n), gdzie n jest liczbą pomiarów. Chcesz ważyć dopasowanie przez odwrotność niepewności, więc twoje drugie przypuszczenie jest najlepsze: w=np.sqrt(n)

Aby otrzymać kowariancję na swoich parametrach, podaj także cov=True.

x = np.array([0, 1, 2, 3]) 
y = np.array([2.2, 3.5, 4.6, 5.2]) 
n = np.array([1, 2, 2, 1]) 

p, c = np.polyfit(x, y, 1, w=np.sqrt(n), cov=True) 

Przekątne swojej matrycy cov są poszczególne wariancje na każdego parametru, a oczywiście Off-przekątne są kowariancji. Najprawdopodobniej dlatego, że "błąd dopasowania" jest pierwiastkiem kwadratowym tych przekątnych:

e = np.sqrt(np.diag(c)) 
+0

Dziękuję bardzo. Tego właśnie szukałem. – jbssm

+1

Chętnie pomożemy, @jbssm. Nawiasem mówiąc, podczas używania 'np.polyfit',' np.polyval', 'np.poly1d', itp., Nie łącz ich z żadną z funkcji modułu' np.polynomial', ponieważ one [postępuj zgodnie z różnymi konwencjami , w szczególności zamówienie powrotne] (http://stackoverflow.com/a/18767992/1730674). Zwykle zaleca się używanie wyłącznie pakietu '' np.polynomial'' (http://docs.scipy.org/doc/numpy/reference/routines.polynomials.polynomial.html), ale z jakiegoś powodu [nie podać "kowariancję"] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.polynomial.polynomial.polyfit.html) – askewchan