선형 회귀 분석에서 귀무 가설 변경


18

관련성이 높은 데이터가 있습니다. 선형 회귀를 실행하면 기울기가 1에 가깝습니다 (= 0.93). 내가하고 싶은 것은이 경사가 1.0과 크게 다른지 테스트하는 것입니다. 내 기대는 그렇지 않다는 것입니다. 즉, 선형 회귀의 귀무 가설을 0의 기울기에서 1의 기울기로 변경하고 싶습니다. 이것은 합리적인 접근입니까? 나는 또한 당신이 당신의 답변에 일부 R 코드를 포함 시켜서이 방법 (또는 당신이 제안하는 더 좋은 방법)을 구현할 수 있다는 것에 정말로 감사드립니다. 감사.

답변:


11
set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2) # generate correlated data
summary(lm(y ~ x))                  # original model
summary(lm(y ~ x, offset= 1.00*x))  # testing against slope=1
summary(lm(y-x ~ x))                # testing against slope=1

출력 :

            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.01532    0.04728   0.324     0.75    
x            0.91424    0.04128  22.148 1.64e-14 ***

 

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.01532    0.04728   0.324   0.7497  
x           -0.08576    0.04128  -2.078   0.0523 .

 

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  0.01532    0.04728   0.324   0.7497  
x           -0.08576    0.04128  -2.078   0.0523 .

감사합니다! lm 명령을 변경하는 방법을 알 수 없었습니다.
Nick Crawford

그렇다면 "lm (y ~ x, offset = 1.00 * x)"와 정확히 같은 "lm (yx ~ x)"입니까 (또는 1.00이 없습니까)? 이 빼기가 최소 제곱에 대한 가정이나 공선성에 문제가되지 않습니까? 임의 효과 glmer (....)와 함께 로지스틱 회귀 분석에 사용하고 싶습니다. p- 값을 얻는 간단하지만 올바른 방법을 사용하는 것이 좋습니다.
skan

여기 stats.stackexchange.com/questions/111559/… Matifou는이 방법이 Wald 테스트보다 더 나쁘다고 말합니다.
skan

7

아르 자형β=아르 자형β아르 자형아르 자형

와이=β0+β1엑스+

β1=0아르 자형=[0,1]아르 자형=1

이러한 유형의 가설에 대해서는 linearHypothesispackage car의 함수를 사용할 수 있습니다 .

set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2) # generate correlated data
mod <- lm(y ~ x))                  # original model


> linearHypothesis(mod,matrix(c(0,1),nrow=1),rhs=c(1))
Linear hypothesis test

Hypothesis:
x = 1

Model 1: restricted model
Model 2: y ~ x

  Res.Df     RSS Df Sum of Sq      F  Pr(>F)  
1     19 0.96022                              
2     18 0.77450  1   0.18572 4.3162 0.05234 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

단측 테스트에 사용할 수 있습니까?
jpmath

6

여전히 귀무 가설을 기각하려고하는 것 같습니다. 그것과 관련된 많은 문제가 있지만, 그중 적어도 하나는 당신이 1과 다른 것을 볼 수있는 충분한 힘을 가지고 있지 않을 수도 있다는 것입니다. 1. 그러나 실제로 말할 수 없다면 어떻게해야합니까? 실제로 기울기가 크게 변하고 실제로 신뢰 구간이 ± 0.4 인 경우 1과 상당히 거리가 먼 기울기를 추정하는 경우 어떻게해야합니까? 여기서 가장 좋은 전술은 귀무 가설을 변경하지 않고 실제로 간격 추정에 대해 합리적으로 말하는 것입니다. confint () 명령을 모델에 적용하면 경사면에서 95 % 신뢰 구간을 얻을 수 있습니다. 그런 다음 이것을 사용하여 얻은 경사에 대해 토론 할 수 있습니다. 1이 신뢰 구간 내에 있으면 실제 값을 포함 할 것으로 생각되는 값의 범위 내에 있다고 진술 할 수 있습니다. 그러나 더 중요한 것은 그 값의 범위가 무엇인지 진술 할 수도 있습니다.


3

테스트의 요점은 귀무 가설을 기각하고 확인하는 것이 아니라는 것입니다. 큰 차이가 없다는 사실은 결코 큰 차이가 없다는 증거는 아닙니다. 이를 위해서는 null을 거부하기에 적당한 효과 크기를 정의해야합니다.

에스영형이자형1

set.seed(20); y = rnorm(20); x = y + rnorm(20, 0, 0.2)
model <- lm(y~x)

coefx <- coef(summary(model))[2,1]
seslope <- coef(summary(model))[2,2]
DF <- model$df.residual

# normal test
p <- (1 - pt(coefx/seslope,DF) )*2
# test whether different from 1
p2 <- (1 - pt(abs(coefx-1)/seslope,DF) )*2

이제 차이가 커지는 효과 크기가 다음과 같다는 사실을 알고 있어야합니다.

> qt(0.975,DF)*seslope
[1] 0.08672358

경사에 대한 표준 오차를 적절하게 추정 할 수 있습니다. 따라서 0.1에서 큰 차이 만 감지하기로 결정한 경우 다음과 같이 필요한 DF를 계산할 수 있습니다.

optimize(
    function(x)abs(qt(0.975,x)*seslope - 0.1),
    interval=c(5,500)
) 
$minimum
[1] 6.2593

염두에 두십시오. 이것은 비석의 추정치에 따라 크게 다릅니다. seslope에 대한 더 나은 추정치를 얻으려면 데이터를 리샘플링 할 수 있습니다. 순진한 방법은 다음과 같습니다.

n <- length(y)
seslope2 <-
  mean(
    replicate(n,{
      id <- sample(seq.int(n),1)
      model <- lm(y[-id]~x[-id])
      coef(summary(model))[2,2]
    })
  )

seslope2를 최적화 함수에 넣으면 다음을 반환합니다.

$minimum
[1] 6.954609

이 모든 것은 데이터 세트가 필요하다고 생각하는 것보다 훨씬 빠른 결과를 반환 할 것이며, 중요하지 않은 것이 원하는 것을 의미한다고 확신하려면 7 자유도 (이 경우 9 개의 관측치) 만 필요하다는 것을 알 수 있습니다 방법.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.