Le point de test est que vous voulez rejeter votre hypothèse nulle, pas la confirmer. Le fait qu'il n'y ait pas de différence significative n'est nullement une preuve de l'absence de différence significative. Pour cela, vous devrez définir quelle taille d'effet vous jugez raisonnable pour rejeter la valeur nulle.
s l o p e - 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
Vous devez maintenant être conscient du fait que la taille d'effet pour laquelle une différence devient significative, est
> qt(0.975,DF)*seslope
[1] 0.08672358
à condition d'avoir un estimateur décent de l'erreur type sur la pente. Par conséquent, si vous décidez qu'une différence significative ne doit être détectée qu'à partir de 0,1, vous pouvez calculer le DF nécessaire comme suit:
optimize(
function(x)abs(qt(0.975,x)*seslope - 0.1),
interval=c(5,500)
)
$minimum
[1] 6.2593
Attention, cela dépend assez de l'estimation de la séslope. Pour obtenir une meilleure estimation sur seslope, vous pouvez rééchantillonner vos données. Une manière naïve serait:
n <- length(y)
seslope2 <-
mean(
replicate(n,{
id <- sample(seq.int(n),1)
model <- lm(y[-id]~x[-id])
coef(summary(model))[2,2]
})
)
mettre seslope2 dans la fonction d'optimisation, renvoie:
$minimum
[1] 6.954609
Tout cela vous dira que votre jeu de données retournera un résultat significatif plus rapidement que vous le jugerez nécessaire, et que vous n'avez besoin que de 7 degrés de liberté (dans ce cas, 9 observations) si vous voulez être sûr que non significatif signifie ce que vous voulez veux dire.