Test du coefficient du modèle (pente de régression) par rapport à une certaine valeur

20

Dans R, quand j'ai un (généralisé) modèle linéaire ( lm, glm, gls, glmm, ...), comment tester le coefficient (pente de régression) contre toute autre valeur que 0? Dans le résumé du modèle, les résultats du test t du coefficient sont automatiquement rapportés, mais uniquement pour comparaison avec 0. Je veux le comparer avec une autre valeur.

Je sais que je peux utiliser une astuce avec reparamétriser y ~ xcar y - T*x ~ x, où Test la valeur testée, et exécuter ce modèle reparamétrisé, mais je cherche une solution plus simple, qui pourrait éventuellement fonctionner sur le modèle d'origine.

Curieuse
la source

Réponses:

17

Voici une solution plus large qui fonctionnera avec n'importe quel package, ou même si vous ne disposez que de la sortie de régression (comme celle d'un papier).

Prenez le coefficient et son erreur standard.

Calculez . Les df pour le sont les mêmes que pour un test avec .t=β^-βH0se(β^)tH0:β=0

Glen_b -Reinstate Monica
la source
1
Merci Glen, je le sais de [cette excellente réponse]. Mais comment vais-je obtenir la valeur p de la valeur t?
Curieux
2
@Curiouspt()
Affine
@Curious: Comme Affine le dit, la fonction R pt - ou tout autre élément qui vous donne la valeur de t cdfs. De nombreux packages en disposent, et il existe des tables en T largement disponibles.
Glen_b -Reinstate Monica
Ce serait bien si lm, lmer et les autres acceptaient directement un paramètre de test différent de zéro.
skan
@skan c'est littéralement une seule ligne de code R pour obtenir une valeur p; il serait simple d'écrire une petite fonction pour prendre la sortie de summary.lm et produire un nouveau tableau selon vos spécifications exactes.
Glen_b -Reinstate Monica
10

Vous pouvez utiliser soit un simple test t comme proposé par Glen_b, soit un test Wald plus général.

Le test de Wald permet de tester plusieurs hypothèses sur plusieurs paramètres. Il est formulé comme suit: où R sélectionne (une combinaison de) coefficients, et q indique la valeur à tester, étant les coefficients de régression standard.Rβ=qβ

Dans votre exemple, où vous n'avez qu'une seule hypothèse sur un paramètre, R est un vecteur ligne, avec une valeur de un pour le paramètre en question et zéro ailleurs, et q est un scalaire avec la restriction à tester.

Dans R, vous pouvez exécuter un test Wald avec la fonction linearHypothesis () de package car . Disons que vous voulez vérifier si le deuxième coefficient (indiqué par l'argument hypothesis.matrix ) est différent de 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

Pour le t-test, cette fonction implémente le t-test montré par 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

Assurons-nous d'avoir obtenu la bonne procédure en comparant le Wald, notre test t et le test t par défaut R, pour l'hypothèse standard que le deuxième coefficient est nul:

> 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

Vous devriez obtenir le même résultat avec les trois procédures.

Matifou
la source
Cela semble bon! Pouvez-vous expliquer le hypothesis.matrixparamètre?
Curieux
Je ne sais pas si le test Wald le fait. Je voulais utiliser le test t normal qui est normalement rapporté avec les paramètres, mais pas avec 0 mais avec une autre valeur.
Curieux du
@Curious Hope, c'est plus clair maintenant?
Matifou
3

Finalement, la solution la plus simple a été de procéder à la reparamétrisation:

gls(I(y - T*x) ~ x, ...)
Curieuse
la source
Cela produira-t-il les mêmes résultats?
skan
Mais vous soustrayez quelque chose qui n'est pas indépendant. Ne serait-ce pas un problème avec les hypothèses des moindres carrés ou avec la colinéarité? En quoi est-il différent de lm (y ~ x + + offset (T * x))?
skan
1
@skan la régression est conditionnelle à x, il n'y a pas de dépendance là-bas; il doit être identique à l'utilisation de l'offset.
Glen_b -Reinstate Monica