Czy w R (lub ogólnie) można wymusić, aby współczynniki regresji były pewnym znakiem?

10

Pracuję z niektórymi danymi ze świata rzeczywistego, a modele regresji dają pewne sprzeczne z intuicją wyniki. Zwykle ufam statystykom, ale w rzeczywistości niektóre z tych rzeczy nie mogą być prawdziwe. Główny problem, jaki widzę, polega na tym, że wzrost jednej zmiennej powoduje wzrost odpowiedzi, gdy w rzeczywistości muszą one być skorelowane ujemnie.

Czy istnieje sposób wymuszenia określonego znaku dla każdego ze współczynników regresji? Doceniony zostanie również każdy kod R do tego celu.

Dzięki za wszelką pomoc!

JRW
źródło
9
Zobacz stat.columbia.edu/~gelman/stuff_for_blog/… .
Dimitriy V. Masterov
1
Może być powiązany tutaj
Ten link r-bloggers.com/positive-coefficient-regression-in-r Uważam, że odpowiada na pytanie @ JRW dotyczące wartości R-kwadrat. Jak już skomentowano, należy zachować ostrożność przed wymuszeniem dodatnich wartości współczynników.
Esme_

Odpowiedzi:

11
  1. uważaj na różnicę między korelacją marginalną a korelacją częściową (korelacja zależna od innych zmiennych). Mogą być legalnie innego rodzaju.

    To znaczy, że może w rzeczywistości być ujemny, podczas gdy współczynnik regresji w regresji wielokrotnej jest dodatni. Te dwie rzeczy niekoniecznie są sprzeczne. Zobacz także paradoks Simpsona , który jest nieco powiązany (zwłaszcza schemat). Zasadniczo nie można wnioskować, że współczynnik regresji musi mieć jeden znak, oparty jedynie na sporze o korelację marginalną.Corr(Y,Xja)

  2. Tak, z pewnością możliwe jest ograniczenie współczynników regresji do lub 0 *. Można to zrobić na kilka sposobów; niektóre z nich można łatwo wykonać w R, np. via . Zobacz także odpowiedzi na to pytanie, które wspominają o kilku pakietach R i innych możliwych podejściach.00nnls

    Ostrzegam jednak przed pospiesznym ignorowaniem punktów w 1. tylko dlatego, że wiele z nich można łatwo wdrożyć.

    * (możesz użyć programów, które robią nieujemne, aby robić nie dodatnie, negując odpowiednią zmienną)

Glen_b - Przywróć Monikę
źródło
10

Być może istnieje taki sposób, ale powiedziałbym, że w twoich okolicznościach nie jest to wskazane.

Jeśli masz wynik, który jest niemożliwy:

1) Wystąpił problem z Twoimi danymi 2) Wystąpił problem z definicją „niemożliwe” lub 3) Używasz niewłaściwej metody

Najpierw sprawdź dane. Po drugie, sprawdź kod. (Lub poproś innych o sprawdzenie). Jeśli oba są w porządku, może dzieje się coś nieoczekiwanego.

Na szczęście masz prostą „niemożliwość” - mówisz, że dwie zmienne nie mogą być dodatnio skorelowane. Zrób więc wykres rozrzutu i dodaj płynniej i zobacz. Może to powodować pojedyncza wartość odstająca; lub może to być związek nieliniowy. Albo coś innego.

Ale jeśli masz szczęście, znalazłeś coś nowego. Jak mawiał mój ulubiony profesor: „Jeśli nie jesteś zaskoczony, niczego się nie nauczyłeś”.

Peter Flom
źródło
(+1 zarówno Peterowi, jak i Glenowi) @JRW - Jeśli naprawisz znak, chciałbym być muchą na ścianie, próbując wyjaśnić swoim odbiorcom współczynnik, który „uzyskałeś” i przedział ufności. Co więcej, mogą słusznie zapytać, czy naprawiłeś znak i / lub zakres innych? Jeśli nie, dlaczego nie?
rolando2
6

Aby odpowiedzieć na konkretne pytanie, możesz wypróbować pakiet nnls , który wykonuje regresję metodą najmniejszych kwadratów z nieujemnymi ograniczeniami współczynników. Możesz go użyć, aby uzyskać pożądane znaki, zmieniając znaki odpowiednich predyktorów.

Nawiasem mówiąc, tutaj jest bardzo prosty sposób na utworzenie zestawu danych, aby wykazać, w jaki sposób można uzyskać dodatnie korelacje i ujemne współczynniki regresji.

> n <- rnorm(200)
> x <- rnorm(200)
> d <- data.frame(x1 = x+n, x2= 2*x+n, y=x)
> cor(d)
      x1        x2         y
 x1 1.0000000 0.9474537 0.7260542
 x2 0.9474537 1.0000000 0.9078732
 y  0.7260542 0.9078732 1.0000000
> plot(d)
> lm(y~x1+x2-1, d)

Call:
lm(formula = y ~ x1 + x2 - 1, data = d)

Coefficients:
x1  x2  
-1   1  
Innuo
źródło
Właśnie bawiłem się trochę z tym pakietem nnls. Czy jest jakiś sposób na uzyskanie skorygowanej wartości R-kwadrat (lub czegoś równoważnego), czy też musiałbym spróbować jakoś ją obliczyć?
JRW