Coeficiente do modelo de teste (inclinação de regressão) em relação a algum valor

20

Em R, quando eu tenho um modelo linear (generalizada) ( lm, glm, gls, glmm, ...), como posso testar o coeficiente (inclinação de regressão) contra qualquer outro valor diferente de 0? No resumo do modelo, os resultados do teste t do coeficiente são relatados automaticamente, mas apenas para comparação com 0. Quero compará-lo com outro valor.

Sei que posso usar um truque para reparametrizar y ~ xcomo y - T*x ~ x, onde Testá o valor testado, e executar esse modelo reparametrizado, mas busco uma solução mais simples, que possivelmente funcione no modelo original.

Curioso
fonte

Respostas:

17

Aqui está uma solução mais ampla que funcionará com qualquer pacote, ou mesmo se você tiver apenas a saída de regressão (como em um artigo).

Tome o coeficiente e seu erro padrão.

Calcular . O df para oté o mesmo que seria para um teste comH0:β=0.t=β^-βH0 0se(β^)tH0 0:β=0 0

Glen_b -Reinstate Monica
fonte
1
Obrigado Glen, eu sei disso por [esta ótima resposta]. Mas como vou obter o valor p do valor t?
Curioso
2
@Curiouspt()
Affine
@Curious: Como Affine diz a função R pt - ou qualquer outra coisa que lhe dê o valor de t cdfs. Muitos pacotes possuem isso e existem tabelas t amplamente disponíveis.
Glen_b -Reinstala Monica
Seria bom se lm, lmer e os outros aceitassem um parâmetro de teste diferente de zero diretamente.
skan
@skan, é literalmente uma única linha de código R para obter um valor-p; seria simples escrever uma pequena função para pegar a saída do summary.lm e produzir uma nova tabela com suas especificações exatas.
Glen_b -Reinstate Monica
10

Você pode usar um teste t simples, conforme proposto por Glen_b, ou um teste Wald mais geral.

Rβ=qβ

No seu exemplo, onde você tem apenas uma hipótese em um parâmetro, R é um vetor de linha, com um valor de um para o parâmetro em questão e zero em outro lugar, e q é um escalar com a restrição de teste.

Em R, você pode executar um teste de Wald com a função linearHypothesis () do pacote car . Digamos que você queira verificar se o segundo coeficiente (indicado pelo argumento hipótese.matriz ) é diferente de 0,1 (argumento 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

Para o teste t, essa função implementa o teste t mostrado por 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

Vamos garantir que obtivemos o procedimento correto comparando Wald, nosso teste t e teste t padrão R, para a hipótese padrão de que o segundo coeficiente é 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

Você deve obter o mesmo resultado com os três procedimentos.

Matifou
fonte
parece bom! Você pode explicar o hypothesis.matrixparâmetro?
Curioso
Não tenho certeza se o teste de Wald faz isso. Eu pretendia usar o teste t normal, que é relatado normalmente junto com os parâmetros, mas não com 0, mas com algum outro valor.
Curioso
@ Espero que seja mais claro agora?
Matifou
3

No final, até agora a solução mais fácil foi fazer a reparametrização:

gls(I(y - T*x) ~ x, ...)
Curioso
fonte
Isso produzirá os mesmos resultados?
skan
Mas você está subtraindo algo que não é independente. Não seria um problema com as suposições para mínimos quadrados ou com colinearidade? Qual é a diferença de lm (y ~ x + + offset (T * x))?
skan
1
@skan a regressão é condicional em x, não há dependência lá; deve ser o mesmo que usar deslocamento.
Glen_b -Reinstala Monica