2012-11-06 11 views
6

mi chiedo come disegnare queste molteplici curve di bootstrap in R. I codici di mine è comeDisegnare curve multiple Bootstrap in R

dat2 <- read.delim("bone.data", sep ="\t", header= TRUE) 
y <- dat2[,4] 
x <- dat2[,2] 
plot(x,y,xlab="age",ylab="BMD",col=ifelse(dat2[,3]=="female","red","blue")) 

Le curve multiple Bootstrap sono come Fig 8.2 basso a sinistra uno in questo libro . ESL

enter image description here

E i dati denominato densità minerale ossea potrebbe essere ottenere da questo sito: data

Il collegamento diretto al file essere: here

+4

Che curve multiple di bootstrap? Per favore rendi il tuo esempio [riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) e chiarisci la tua domanda. – mnel

+0

Nessun codice nel libro o sul sito web del libro. Hai familiarità con il pacchetto: boot? –

risposta

6

è possibile tracciare una curva spline utilizzando smooth.spline e lines:

plot.spline = function(x, y, ...) { 
    s = smooth.spline(x, y, cv=TRUE) 
    lines(predict(s), ...) 
} 

Quindi, per eseguire il bootstrap, secondo le istruzioni del libro, assaggiare le righe casuali dai dati con sostituzione e chiamano plot.spline sui dati ricampionata:

bootstrap.curves = function(dat, nboot, ...) { 
    for (i in 1:nboot) { 
     subdata = dat[sample(NROW(dat), replace=TRUE), ] 
     plot.spline(subdata$age, subdata$spnbmd, ...) 
    } 
} 

È possibile utilizzare in tal modo questa funzione per eseguire appezzamenti separati per maschi e femmine:

bootstrap.curves(dat2[dat2$gender == "female", ], 10, col="red") 
bootstrap.curves(dat2[dat2$gender == "male", ], 10, col="blue") 

risultato finale:

enter image description here

Nota: Questo codice produrrà una serie di avvertimenti (non errori) che assomigliano:

1: In smooth.spline(x, y, cv = TRUE) : 
    crossvalidation with non-unique 'x' values seems doubtful 

Questo è a causa del ricampionamento bootstrap. smooth.spline utilizza la convalida incrociata per decidere il numero di gradi di libertà per dare una spline, ma preferisce non farlo con i valori duplicati x (come ci sarà sempre effettivamente con il ricampionamento bootstrap). Si potrebbe aggirare questo scegliendo il proprio numero di gradi di libertà, ma questo probabilmente va bene per questo scopo.

+0

Vedo dai test che l'impostazione 'cv = NA' nella chiamata' smooth.spline' elimina gli avvertimenti e non sembra influire sull'operazione di livellamento. Dopo aver letto l'aiuto sono un po 'indifferente su eventuali problemi che potrebbero verificarsi con questo metodo. qualche idea? – thelatemail

+0

@thelatemail: quando lo eseguo con 'cv = NA' tutte le curve sono sostituite da linee rette - questo non succede per te? Allo stesso modo, l'impostazione di 'cv = FALSE' porta a troppi gradi di libertà e le curve sono troppo frastagliate. –

+0

Non ho idea di cosa ho fatto, ma da qualche parte ho delle funzioni confuse. Sto ottenendo gli stessi risultati che hai ora. Calcolatelo per un paio di settimane. – thelatemail

Problemi correlati