Per vedere quali valori p sono corretti (se uno dei due), ripetiamo il calcolo per i dati simulati in cui l'ipotesi nulla è vera. Nella presente impostazione, il calcolo è un minimo quadrato adatto ai dati (x, y) e l'ipotesi nulla è che la pendenza sia zero. Nella domanda ci sono quattro valori x 1,2,3,4 e l'errore stimato è di circa 0,7, quindi includiamolo nella simulazione.
Ecco la configurazione, scritta per essere comprensibile a tutti, anche a chi non ha familiarità R
.
beta <- c(intercept=0, slope=0)
sigma <- 0.7
x <- 1:4
y.expected <- beta["intercept"] + beta["slope"] * x
La simulazione genera errori indipendenti, li aggiunge a y.expected
, invoca lm
per adattarsi e summary
per calcolare i valori p. Sebbene ciò sia inefficiente, sta testando il codice effettivo utilizzato. Possiamo ancora fare migliaia di iterazioni in un secondo:
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)
I valori p calcolati correttamente agiranno come numeri casuali uniformi tra e101 quando l'ipotesi nulla è vera. Un istogramma di questi valori p ci consentirà di verificarlo visivamente - sembra approssimativamente orizzontale - e un test chi-quadrato di uniformità consentirà una valutazione più formale. Ecco l'istogramma:
h <- hist(p.values, breaks=seq(0, 1, length.out=20))
e, per coloro che potrebbero immaginare che questo non sia sufficientemente uniforme, ecco il test chi-quadrato:
chisq.test(h$counts)
Quadrato X = 13,042, df = 18, valore p = 0,7891
Il grande valore p in questo test mostra che questi risultati sono coerenti con l'uniformità attesa. In altre parole, lm
è corretto.
Da dove vengono quindi le differenze nei valori p? Controlliamo le formule probabili che potrebbero essere invocate per calcolare un valore p. In ogni caso la statistica del test sarà
| t | = ∣|||β^- 0SE( β^)||||,
uguale alla discrepanza tra il coefficiente stimato e l'ipotizzato (e valore corretto) , espresso come multiplo dell'errore standard della stima del coefficiente. Nella domanda questi valori sono ß=0β^β= 0
| t | = ∣||3.050,87,378 mila|||= 3.491
per la stima dell'intercettazione e
| t | = ∣||- 1,380,31,906 mila|||= 4.321
per la stima della pendenza. Normalmente questi sarebbero confrontati con la distribuzione Student il cui parametro gradi di libertà è (la quantità di dati) meno (il numero di coefficienti stimati). Calcoliamolo per l'intercettazione:t42
pt(-abs(3.05/0.87378), 4-2) * 2
[1] 0.0732
(Questo calcolo moltiplica la probabilità Studente della coda sinistra per perché si tratta di un test di rispetto all'alternativa bilaterale ) Concorda con l' output.tH 0 : β = 0 H A : β ≠ 02H0: β= 0HUN: β≠ 0lm
Un calcolo alternativo userebbe la distribuzione normale standard per approssimare la distribuzione Student . Vediamo cosa produce:t
pnorm(-abs(3.05/0.87378)) * 2
[1] 0.000482
Abbastanza sicuro: biglm
presuppone che la distribuzione nulla della statistica sia normale. Quanto di un errore è questo? Rieseguire la simulazione precedente usando al posto di fornisce questo istogramma di valori p:tbiglm
lm
Quasi il 18% di questi valori p è inferiore a , una soglia standard di "significatività". Questo è un errore enorme.0.05
Alcune lezioni che possiamo imparare da questa piccola indagine sono:
Non utilizzare approssimazioni derivate da analisi asintotiche (come la distribuzione normale standard) con piccoli set di dati.
Conosci il tuo software.
pt(-3.491, 2)*2
adpnorm(-3.491)*2
esempio.