Come simulare un'analisi di potenza personalizzata di un modello lm (usando R)


13

A seguito delle recenti domande che abbiamo avuto qui .

Stavo saltando per sapere se qualcuno si fosse imbattuto o fosse in grado di condividere il codice R per eseguire un'analisi di potenza personalizzata basata sulla simulazione di un modello lineare?

Successivamente, ovviamente, vorrei estenderlo a modelli più complessi, ma mi sembra il punto giusto per iniziare. Grazie.

Risposte:


4

Non sono sicuro che tu abbia bisogno di una simulazione per un semplice modello di regressione. Ad esempio, vedere la carta Portable Power . Per modelli più complessi, in particolare effetti misti, il pacchetto pamm in R esegue analisi di potenza tramite simulazioni. Vedi anche il post di Todd Jobe che ha il codice R per la simulazione.


1
Il collegamento dell'alimentazione portatile è interrotto. Se qualcuno può aggiornare il collegamento, sarebbe fantastico. Grazie.
Brian P,

3

Qui ci sono alcune fonti di codice di simulazione in R. Non sono sicuro se si tratti specificamente di modelli lineari, ma forse forniscono abbastanza un esempio per capire:

  • Benjamin Bolker ha scritto un grande libro dati ecologici e modelli con R . Una prima bozza dell'intero libro insieme al codice Sweave è disponibile online. Il capitolo 5 tratta dell'analisi e della simulazione della potenza.

C'è un altro paio di esempi di simulazione nei seguenti siti:


0

Adattato da Bolker 2009 Modelli ecologici e dati in R. È necessario dichiarare la forza della tendenza (cioè la pendenza) che si desidera verificare. Intuitivamente una tendenza forte e una bassa variabilità richiederanno una piccola dimensione del campione, una tendenza debole e una grande variabilità richiederanno una grande dimensione del campione.

a = 2  #desired slope
b = 1  #estimated intercept
sd = 20  #estimated variability defined by standard deviation
nsim = 400  #400 simulations
pval = numeric(nsim)  #placeholder for the second for loop output
Nvec = seq(25, 100, by = 1)  #vector for the range of sample sizes to be tested
power.N = numeric(length(Nvec))   #create placeholder for first for loop output
for (j in 1:length(Nvec)) {
  N = Nvec[j]  
  x = seq(1, 20, length = Nvec[j])  #x value length needs to match sample size (Nvec) length
  for (i in 1:nsim) {   #for this value of N, create random error 400 times
    y_det = a + b * x
    y = rnorm(N, mean = y_det, sd = sd)
    m = lm(y ~ x)
    pval[i] = coef(summary(m))["x", "Pr(>|t|)"]  #all the p values for 400 sims
  }  #cycle through all N values
  power.N[j] = sum(pval < 0.05)/nsim  #the proportion of correct p-values (i.e the power)
}
power.N
plot(Nvec, power.N)  #need about 90 - 100 samples for 80% power

Puoi anche simulare la tendenza minima che potresti provare per una determinata dimensione del campione, come mostrato nel libro

bvec = seq(-2, 2, by = 0.1)
power.b = numeric(length(bvec))
for (j in 1:length(bvec)) {
  b = bvec[j]
   for (i in 1:nsim) {
     y_det = a + b * x
     y = rnorm(N, mean = y_det, sd = sd)
     m = lm(y ~ x)
     pval[i] = coef(summary(m))["x", "Pr(>|t|)"]
     }
   power.b[j] = sum(pval < 0.05)/nsim
  }
 power.b
 plot(bvec, power.b)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.