Pour voir quelles valeurs de p sont correctes (le cas échéant), répétons le calcul pour les données simulées dans lesquelles l'hypothèse nulle est vraie. Dans le cadre actuel, le calcul est un ajustement des moindres carrés aux données (x, y) et l'hypothèse nulle est que la pente est nulle. Dans la question, il y a quatre valeurs x 1,2,3,4 et l'erreur estimée est d'environ 0,7, alors incorporons cela dans la simulation.
Voici la configuration, écrite pour être compréhensible par tout le monde, même ceux qui ne le connaissent pas R
.
beta <- c(intercept=0, slope=0)
sigma <- 0.7
x <- 1:4
y.expected <- beta["intercept"] + beta["slope"] * x
La simulation génère des erreurs indépendantes, les ajoute à y.expected
, appelle lm
pour faire l'ajustement et summary
pour calculer les valeurs de p. Bien que cela soit inefficace, il teste le code réel qui a été utilisé. Nous pouvons encore faire des milliers d'itérations en une seconde:
n.sim <- 1e3
set.seed(17)
data.simulated <- matrix(rnorm(n.sim*length(y.expected), y.expected, sigma), ncol=n.sim)
slope.p.value <- function(e) coef(summary(lm(y.expected + e ~ x)))["x", "Pr(>|t|)"]
p.values <- apply(data.simulated, 2, slope.p.value)
Des valeurs de p correctement calculées agiront comme des nombres aléatoires uniformes compris entre et101 lorsque l'hypothèse nulle est vraie. Un histogramme de ces valeurs p nous permettra de vérifier cela visuellement - est-ce qu'il semble à peu près horizontal - et un test d'uniformité khi permettra une évaluation plus formelle. Voici l'histogramme:
h <- hist(p.values, breaks=seq(0, 1, length.out=20))
et, pour ceux qui pourraient imaginer que ce n'est pas suffisamment uniforme, voici le test du chi carré:
chisq.test(h$counts)
X au carré = 13,042, df = 18, valeur p = 0,7891
La grande valeur de p dans ce test montre que ces résultats sont cohérents avec l'uniformité attendue. En d'autres termes, lm
c'est correct.
D'où viennent donc les différences de valeurs de p? Vérifions les formules probables qui pourraient être invoquées pour calculer une valeur de p. Dans tous les cas, la statistique de test sera
|t|=∣∣∣∣β^−0se(β^)∣∣∣∣,
égal à l'écart entre le coefficient estimé et l'hypothèse (et la valeur correcte) , exprimé en multiple de l'erreur-type de l'estimation du coefficient. Dans la question, ces valeurs sont la ß=0β^β=0
|t|=∣∣∣3.050.87378∣∣∣=3.491
pour l'estimation d'interception et
|t|=∣∣∣−1.380.31906∣∣∣=4.321
pour l'estimation de la pente. Habituellement, celles-ci seraient comparées à la distribution de Student dont le paramètre des degrés de liberté est (la quantité de données) moins (le nombre de coefficients estimés). Calculons-le pour l'ordonnée à l'origine:4 2t42
pt(-abs(3.05/0.87378), 4-2) * 2
[1] 0.0732
(Ce calcul multiplie la probabilité de Student gauche par car il s'agit d'un test de contre l'alternative bilatérale ) Il est d'accord avec la sortie.2 H 0 : β = 0 H A : β ≠ 0t2H0:β=0HA:β≠0lm
Un calcul alternatif utiliserait la distribution normale standard pour approximer la distribution de Student . Voyons ce qu'il produit:t
pnorm(-abs(3.05/0.87378)) * 2
[1] 0.000482
Effectivement: biglm
suppose que la distribution nulle de la statistique est normale Normal. Quelle est l'erreur? La réexécution de la simulation précédente en utilisant à la place de donne cet histogramme des valeurs de p:tbiglm
lm
Près de 18% de ces valeurs de p sont inférieures à , un seuil standard de «signification». C'est une énorme erreur.0.05
Voici quelques leçons que nous pouvons tirer de cette petite enquête:
N'utilisez pas d'approximations dérivées d'analyses asymptotiques (comme la distribution normale standard) avec de petits ensembles de données.
Connaissez votre logiciel.
pt(-3.491, 2)*2
àpnorm(-3.491)*2
, par exemple.