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.


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


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.


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, ...)

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
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.