2013-08-15 7 views
5

Przeprowadzam regresję danych spisowych, w których moją zmienną zależną jest długość życia i mam osiem zmiennych niezależnych. Dane są agregowane przez miasta, więc mam wiele tysięcy obserwacji.Jak ustawić ważone najmniejsze kwadraty w r dla danych heteroscedastycznych?

Mój model jest jednak nieco heterosecedastyczny. Chcę prowadzić ważone najmniejsze kwadraty, w których każda obserwacja jest ważona przez populację miasta. W tym przypadku oznaczałoby to, że chcę ważyć obserwacje przez odwrotność pierwiastka kwadratowego populacji. Nie jest dla mnie jasne, jaka byłaby najlepsza składnia. Obecnie mam:

Model=lm(…,weights=(1/population)) 

Czy to prawda? Czy powinno być:

Model=lm(…,weights=(1/sqrt(population))) 

(znalazłem to pytanie tutaj. Weighted Least Squares - R ale to nie wyjaśnia w jaki sposób R interpretuje argument ciężary)

+0

Jeśli chcesz waga według odwrotności pierwiastka kwadratowego populacji, jaki byłby argument dla opcji 1 względem opcji 2? – joran

+0

Myślę, że to jest źródło tego pytania - czy R interpretuje argumenty wag dalej? –

Odpowiedz

1

aby odpowiedzieć na to pytanie, Lucas, Myślę, że chcesz wagi = (1/populacja). R parametryzuje wagi jako odwrotnie proporcjonalne do wariancji, więc określenie wag w ten sposób oznacza założenie, że wariancja erro r termin jest proporcjonalny do populacji miasta, co jest powszechnym założeniem w tym ustawieniu.

Ale sprawdź założenie! Jeśli wariancja terminu błędu jest rzeczywiście proporcjonalna do wielkości populacji, to jeśli podzielisz każdą resztkę przez pierwiastek kwadratowy z odpowiadającej jej wielkości próbki, reszty powinny mieć stałą wariancję. Pamiętaj, że dzielenie zmiennej losowej przez stałą powoduje wariancję dzieloną przez kwadrat tej stałej.

Oto jak można to sprawdzić: Uzyskanie reszt z regresji przez

residuals = lm(..., weights = 1/population)$residuals 

Następnie podzielić pozostałości przez kwadrat korzeni ludności wariancji:

standardized_residuals = residuals/sqrt(population) 

następnie porównać wariancji próbki między reszty odpowiadające dolnej połowie populacji:

variance1 = var(standardized_residuals[population < median(population)]) 

do wariancji próbki spośród reszt odpowiadających górnej połowie wielkości populacji:

variance2 = var(standardized_residuals[population > median(population)]) 

Jeśli te dwie liczby, variance1 i variance2 są podobne, to robisz coś dobrze.Jeśli są drastycznie odmienne, to może Twoje założenie zostanie naruszone.

2

Od ?lm: „ciężary: opcjonalny wektor wag być użyte w procesie dopasowywania powinny być wartościami NULL lub wektorami numerycznymi.Jeśli nie-NULL, ważone najmniejsze kwadraty są używane z wagami weights (tj. minimalizującymi sumę (w * e^2)), w przeciwnym razie stosuje się zwykłe najmniejsze kwadraty. " R nie robi żadnej dalszej interpretacji argumentu wag.

Tak więc, jeśli to, co chcesz, aby zminimalizować to suma (kwadratu odległości od każdego punktu do dopasowanej linii * 1/sqrt (liczba ludności), a następnie chcesz ...weights=(1/sqrt(population)). Jeśli chcesz, aby zminimalizować sumę (kwadrat odległość od każdego punktu do dopasowanej linii * 1/ludności), a następnie chcesz ...weights=1/population.

jako tego, który z nich jest najbardziej odpowiedni ... to pytanie dla CrossValidated!

Powiązane problemy