답변:
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 .
이러한 유형의 가설에 대해서는 linearHypothesis
package 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
여전히 귀무 가설을 기각하려고하는 것 같습니다. 그것과 관련된 많은 문제가 있지만, 그중 적어도 하나는 당신이 1과 다른 것을 볼 수있는 충분한 힘을 가지고 있지 않을 수도 있다는 것입니다. 1. 그러나 실제로 말할 수 없다면 어떻게해야합니까? 실제로 기울기가 크게 변하고 실제로 신뢰 구간이 ± 0.4 인 경우 1과 상당히 거리가 먼 기울기를 추정하는 경우 어떻게해야합니까? 여기서 가장 좋은 전술은 귀무 가설을 변경하지 않고 실제로 간격 추정에 대해 합리적으로 말하는 것입니다. confint () 명령을 모델에 적용하면 경사면에서 95 % 신뢰 구간을 얻을 수 있습니다. 그런 다음 이것을 사용하여 얻은 경사에 대해 토론 할 수 있습니다. 1이 신뢰 구간 내에 있으면 실제 값을 포함 할 것으로 생각되는 값의 범위 내에 있다고 진술 할 수 있습니다. 그러나 더 중요한 것은 그 값의 범위가 무엇인지 진술 할 수도 있습니다.
테스트의 요점은 귀무 가설을 기각하고 확인하는 것이 아니라는 것입니다. 큰 차이가 없다는 사실은 결코 큰 차이가 없다는 증거는 아닙니다. 이를 위해서는 null을 거부하기에 적당한 효과 크기를 정의해야합니다.
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 개의 관측치) 만 필요하다는 것을 알 수 있습니다 방법.