Testuj współczynnik modelu (nachylenie regresji) względem pewnej wartości

20

W R, kiedy mam (uogólniony) model liniowy ( lm, glm, gls, glmm, ...), jak mogę sprawdzić współczynnik (nachylenie regresji) przed jakąkolwiek inną wartość niż 0? W podsumowaniu modelu wyniki testu t współczynnika są automatycznie raportowane, ale tylko dla porównania z 0. Chcę porównać go z inną wartością.

Wiem, że mogę użyć sztuczki z reparametryzacją y ~ xas y - T*x ~ x, gdzie Tjest testowana wartość, i uruchomić ten model z reparametryzacją, ale szukam prostszego rozwiązania, które prawdopodobnie działałoby na oryginalnym modelu.

Ciekawy
źródło

Odpowiedzi:

17

Oto szersze rozwiązanie, które będzie działać z dowolnym pakietem, a nawet jeśli masz tylko wyniki regresji (na przykład z papieru).

Weź współczynnik i jego błąd standardowy.

Oblicz . Df dlatsą takie same, jak dla testu zH0:β=0.t=β^βH0s.e.(β^)tH0:β=0

Glen_b - Przywróć Monikę
źródło
1
Dzięki Glen, znam to z [tej wspaniałej odpowiedzi]. Ale jak uzyskać wartość p na podstawie wartości t?
Ciekawe
2
@Curiouspt()
Afiniczna
@Curious: Jak mówi Affine, funkcja R pt - lub cokolwiek innego, co daje wartość t cdfs. Wiele pakietów ma je i są szeroko dostępne tabele T.
Glen_b
Byłoby miło, gdyby lm, lmer i inni bezpośrednio zaakceptowali parametr testowy różny od zera.
skan
@skan to dosłownie pojedynczy wiersz kodu R, aby uzyskać wartość p; byłoby prostą sprawą napisanie małej funkcji, aby pobrać dane wyjściowe pliku Summary.lm i utworzyć nową tabelę zgodną z dokładnymi specyfikacjami.
Glen_b
10

Możesz użyć prostego testu t zaproponowanego przez Glen_b lub bardziej ogólnego testu Walda.

Rβ=qβ

W twoim przykładzie, w którym masz tylko jedną hipotezę na jednym parametrze, R jest wektorem wiersza, z wartością jednego dla danego parametru i zero w innym miejscu, a q jest skalarem z ograniczeniem do testowania.

W R można uruchomić test Wald z funkcją linearHypothesis () z pakietu samochodu . Powiedzmy, że chcesz sprawdzić, czy drugi współczynnik (wskazany przez argument hypotheis.matrix ) jest inny niż 0,1 (argument rhs ):

reg <- lm(freeny)
coef(reg)

# wald test for lag.quarterly.revenue =0.1
>library(car)
>linearHypothesis(reg, hypothesis.matrix = c(0, 1, rep(0,3)), rhs=0.1)
#skip some result, look at last value on last row, of Pr(>F) 
  Res.Df       RSS Df  Sum of Sq      F Pr(>F)
1     35 0.0073811                            
2     34 0.0073750  1 6.0936e-06 0.0281 0.8679

W przypadku testu t ta funkcja implementuje test t pokazany przez Glen_b:

ttest <- function(reg, coefnum, val){
  co <- coef(summary(reg))
  tstat <- (co[coefnum,1]-val)/co[coefnum,2]
  2 * pt(abs(tstat), reg$df.residual, lower.tail = FALSE)
}

> ttest(reg, 2,0.1)
[1] 0.8678848

Upewnijmy się, że otrzymaliśmy prawidłową procedurę, porównując Wald, nasz test t i domyślny test t R, dla standardowej hipotezy, że drugi współczynnik wynosi zero:

> linearHypothesis(reg, hypothesis.matrix = c(0, 1, rep(0,3)), rhs=0)[["Pr(>F)"]][2]
[1] 0.3904361
> ttest(reg, 2,0)
[1] 0.3904361
## The 'right' answer from R:
> coef(summary(reg))[2,4]
[1] 0.3904361

Powinieneś uzyskać ten sam wynik dzięki trzem procedurom.

Matifou
źródło
wygląda dobrze! Czy możesz wyjaśnić ten hypothesis.matrixparametr?
Ciekawe
Nie jestem pewien, czy test Walda to robi. Chciałem użyć normalnego testu t, który jest standardowo zgłaszany wraz z parametrami, ale nie z 0, ale z inną wartością.
Ciekawy
@Curious Hope, że teraz jest jaśniej?
Matifou,
3

Ostatecznie zdecydowanie najłatwiejszym rozwiązaniem było wykonanie reparametryzacji:

gls(I(y - T*x) ~ x, ...)
Ciekawy
źródło
Czy to da takie same wyniki?
skan
Ale odejmujesz coś nie niezależnego. Czy nie byłoby problemu z założeniami dotyczącymi najmniejszych kwadratów czy z kolinearnością? Czym różni się od lm (y ~ x + + offset (T * x))?
skan
1
@skan regresja jest zależna od x, nie ma tam zależności; powinien być taki sam jak przy użyciu offsetu.
Glen_b