è 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:
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.
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
Nessun codice nel libro o sul sito web del libro. Hai familiarità con il pacchetto: boot? –