Jak zastosować pojęcie współczynnika dla czynników i składników interaktywnych w równaniu liniowym?


9

Za pomocą R dopasowałem model liniowy dla jednej zmiennej odpowiedzi z mieszanki predyktorów ciągłych i dyskretnych. Jest to uber-podstawowe, ale mam problem z uchwyceniem, jak działa współczynnik dla współczynnika dyskretnego.

Pojęcie: Oczywiście współczynnik zmiennej ciągłej „x” jest stosowany w postaci, y = coefx(varx) + interceptale jak to działa dla współczynnika z, jeśli współczynnik jest nienumeryczny?y = coefx(varx) + coefz(factorz???) + intercept

Konkretnie: dopasowałem model w R jako lm(log(c) ~ log(d) + h + a + f + h:a)gdzie hi fsą dyskretnymi, nieliczbowymi czynnikami. Współczynniki są następujące:

Coefficients:
              Estimate 
(Intercept)  -0.679695 
log(d)        1.791294 
h1            0.870735  
h2           -0.447570  
h3            0.542033   
a             0.037362  
f1           -0.588362  
f2            0.816825 
f3            0.534440
h1:a         -0.085658
h2:a         -0.034970 
h3:a         -0.040637

Jak ich użyć, aby utworzyć równanie predykcyjne:

log(c) =  1.791294(log(d)) + 0.037362(a) + h??? + f???? + h:a???? + -0.679695

Czy robię to źle?

Myślę, że pojęcie to jest, jeśli obiekt mieści się w kategorii h1i f2równanie przyjmuje postać:

log(c) =  1.791294(log(d)) + 0.037362(a) +  0.870735  + 0.816825  + h:a???? + -0.679695

Ale tak naprawdę nie jestem pewien, w jaki sposób h:aanalizowany jest termin interaktywny. Dzięki, że mi poszło nie tak.

Odpowiedzi:


14

Nie jest to problem specyficzny dla R. R wykorzystuje konwencjonalne wyświetlanie współczynników.

Kiedy czytasz takie wyniki regresji (w pracy, w podręczniku lub z oprogramowania statystycznego), musisz wiedzieć, które zmienne są „ciągłe”, a które „kategoryczne”:

  • Te „ciągłe” są wyraźnie numeryczne, a ich wartości liczbowe zostały użyte w niezmienionej postaci w dopasowaniu regresji.

  • Zmienne „kategorialne” mogą być dowolnego typu, w tym te liczbowe! To, co czyni je kategorycznymi, polega na tym, że oprogramowanie traktowało je jako „czynniki”: to znaczy każdą znalezioną odrębną wartość uważa się za wskaźnik czegoś odrębnego.

    Większość oprogramowania traktuje wartości nienumeryczne (takie jak łańcuchy) jako czynniki. Większość oprogramowania można przekonać do traktowania wartości liczbowych również jako czynników. Na przykład kod usługi pocztowej (kod pocztowy w USA) wygląda jak liczba, ale tak naprawdę jest tylko kodem zestawu skrzynek pocztowych; dodawanie, odejmowanie i mnożenie kodów pocztowych przez inne liczby nie ma sensu! (Ta elastyczność jest źródłem częstego błędu: jeśli nie jesteś ostrożny lub nieświadomy, twoje oprogramowanie może traktować zmienną, którą uważasz za kategoryczną, jako ciągłą lub odwrotnie. Bądź ostrożny!)

    Niemniej jednak zmienne jakościowe muszą być w pewien sposób reprezentowane jako liczby w celu zastosowania algorytmów dopasowania. Istnieje wiele sposobów ich kodowania . Kody są tworzone przy użyciu „zmiennych zastępczych”. Dowiedz się więcej o kodowaniu zmiennych zastępczych, wyszukując na tej stronie; szczegóły tutaj nie mają znaczenia.

W kwestii powiedziano nam, że hi fsą kategoryczne ( „dyskretne”) wartości. Domyślnie log(d)i asą ciągłe. To wszystko, co musimy wiedzieć. Model jest

y=0.679695+1.791294 log(d)+0.870735 if h=h10.447570 if h=h2+0.542033 if h=h3+0.037362 a0.588362 if f=f1+0.816825 if f=f2+0.534440 if f=f30.085658 a if h=h10.034970 a if h=h20.040637 a if h=h3

Stosowane tutaj zasady to:

  • Termin „przechwytujący”, jeśli się pojawia, jest stałą addytywną (pierwszy wiersz).

  • Zmienne ciągłe, są mnożone przez ich współczynników, nawet w „interakcji” podobnie jak h1:a, h2:ai h3:awarunkach. (To odpowiada oryginalne pytanie.)

  • Każda zmienna kategoryczna (lub czynnik) jest uwzględniana tylko w przypadkach, w których pojawia się wartość tego czynnika.

Na przykład załóżmy, że , , , i . Dopasowana wartość w tym modelu tolog(d)=2h=h3a=1f=f2

y^=0.6797+1.7913×(2)+0.5420+0.0374×(1)+0.81680.0406×(1).

Zauważ, że większość współczynników modelu po prostu nie pojawia się w obliczeniach, ponieważ hmoże przyjąć dokładnie jedną z trzech wartości , , a zatem tylko jeden z trzech współczynników dotyczy i tylko jeden z trzech współczynników zwiększy się w interakcji; podobnie, tylko jeden współczynnik ma zastosowanie w każdym konkretnym przypadku.h1h2h3(0.870735,0.447570,0.542033)h(0.085658,0.034970,0.040637)ah:af


8

To tylko komentarz, ale jako taki nie zmieści się w ograniczonych polach edycji, które mamy do dyspozycji.

Lubię widzieć, jak równanie regresji jest napisane czystym tekstem, tak jak @whuber w swojej odpowiedzi. Oto szybki sposób na to w R, z pakietem Hmisc . (Będę też używał rms , ale to nie ma znaczenia.) Zasadniczo zakłada jedynie, że na twoim komputerze dostępny jest system składu .LATEX

Najpierw symulujmy niektóre dane,

n <- 200
x1 <- runif(n)
x2 <- runif(n)
x3 <- runif(n)
g1 <- gl(2, 100, n, labels=letters[1:2])
g2 <- cut2(runif(n), g=4)
y <- x1 + x2 + rnorm(200)

następnie dopasuj model regresji,

f <- ols(y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

co daje następujące wyniki:

Linear Regression Model

ols(formula = y ~ x1 + x2 + x3 + g1 + g2 + x1:g1)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs      200    LR chi2     35.22    R2       0.161    
sigma 0.9887    d.f.            8    R2 adj   0.126    
d.f.     191    Pr(> chi2) 0.0000    g        0.487    

Residuals

    Min      1Q  Median      3Q     Max 
-3.1642 -0.7109  0.1015  0.7363  2.7342 

                   Coef    S.E.   t     Pr(>|t|)
Intercept           0.0540 0.2932  0.18 0.8541  
x1                  1.1414 0.3642  3.13 0.0020  
x2                  0.8546 0.2331  3.67 0.0003  
x3                 -0.0048 0.2472 -0.02 0.9844  
g1=b                0.2099 0.2895  0.73 0.4692  
g2=[0.23278,0.553)  0.0609 0.1988  0.31 0.7598  
g2=[0.55315,0.777) -0.2615 0.1987 -1.32 0.1896  
g2=[0.77742,0.985] -0.2107 0.1986 -1.06 0.2901  
x1 * g1=b          -0.2354 0.5020 -0.47 0.6396  

Następnie, aby wydrukować odpowiednie równanie regresji, wystarczy użyć latexfunkcji ogólnej , takiej jak ta:

latex(f)

Po konwersji dvi na png powinieneś dostać coś takiego

wprowadź opis zdjęcia tutaj

IMO ma tę zaletę, że pokazuje, jak obliczyć przewidywane wartości w zależności od rzeczywistych lub wybranych wartości dla predyktorów liczbowych i kategorycznych. W tym drugim przypadku poziomy współczynników są wskazane w nawiasach w pobliżu odpowiedniego współczynnika.


1
+1 To niezła możliwość. Składnia takich terminów jak jest jednak potencjalnie myląca: nie ma wyraźnego związku między tym wyrażeniem a zmienną kategorialną , ani też nie jest całkowicie oczywiste, że naprawdę oznacza wskaźnik, że zamiast wartości liczbowej ! (Tutaj naprawdę oznacza „b” - literę - co może być wystarczającym ostrzeżeniem, ale gdy kategorie są zakodowane cyframi, takimi jak i , uważaj ...)+0.2099013{b}g1{b}g1=bbb01
whuber

1
@whuber Powyższe zdjęcie zostało przycięte, ale istnieje przypis przypominający, że „{c} = 1, jeśli temat jest w grupie c, w przeciwnym razie 0” (wybór cmoże być mylący w tym konkretnym przypadku, ponieważ wybieram dwie litery reprezentują poziomy g1, ale zwykle jest to dość intuicyjne - i to jest czysty tex, więc nadal możemy edytować plik źródłowy). W załączeniu jest inne podsumowanie, w którym zmieniłem g1tak, że teraz jest to czteropoziomowy czynnik. Jednak przy etykietach 0/1 może to być bardziej mylące .
chl

5

Możesz sprawdzić, czy „kontrasty” są domyślne, options()szukając:

$contrasts
        unordered           ordered 
"contr.treatment"      "contr.poly" 

Jeśli twoje nieuporządkowane kontrasty są ustawione jako contr.treatment(tak jak powinny, chyba że je zmieniłeś), wówczas pierwszy poziom każdego z twoich czynników zostanie ustawiony jako punkt odniesienia. Otrzymasz tylko szacunki dla współczynników przed zmiennymi fikcyjnymi utworzonymi dla innych poziomów tego współczynnika. W efekcie współczynniki te będą brzmiały: „jak średnio średnia jest zmienna odpowiedzi na tym poziomie współczynnika w porównaniu z poziomem wyjściowym współczynnika, kontrolując wszystko inne w modelu”.

Domyślam się, że z twoich danych wyjściowych jest an h0i f0które są poziomami podstawowymi dla h i f (chyba że masz inną niż domyślną opcję kontrastów, w którym to przypadku istnieje kilka możliwości; spróbuj ?contr.treatmentuzyskać pomoc).

Podobnie jest z interakcją. Jeśli mój poprzedni akapit jest poprawny, podane szacunki abędą naprawdę nachyleniem na akiedy h=h0. Szacunki podane w podsumowaniu, które odnoszą się do interakcji, to o ile zmienia się to nachylenie dla różnych poziomów h.

Więc w twoim przykładzie, gdzie h = h1 if = f2, spróbuj:

log(c) =  1.791294(log(d)) + (0.037362 - 0.085658) (a) +  0.870735  + 0.816825  -0.679695

Aha, możesz też użyć predict()wielu przydatnych rzeczy ... jeśli naprawdę chcesz coś przewidzieć (zamiast zapisać równanie do raportu). Spróbuj ?predict.lmzobaczyć, co predict()robi z obiektem utworzonym przez lm.


+1 (właściwie, głosowałem to miesiąc temu i akurat wróciłem, by go teraz ponownie czytać) w każdym razie, przychodzi mi do głowy, że zaleca się sprawdzenie typu kontrastu przez options(). Będziesz musiał przewinąć wiele śmieci, aby znaleźć to, czego potrzebujesz. Możesz spróbować options()$contrasts, który wyświetli tylko to, czego chcesz.
Gung - Przywróć Monikę

dobra sugestia, mój mózg musiał spać.
Peter Ellis,

Wiesz, często odpowiadam na pytania CV tuż przed pójściem spać ...
Gung - Przywróć Monikę
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.