Questa è in parte una risposta a @Sashikanth Dareddy (poiché non si adatta a un commento) e in parte una risposta al post originale.
Ricorda che cos'è un intervallo di predizione, è un intervallo o un insieme di valori in cui prevediamo che mentiranno osservazioni future. Generalmente l'intervallo di predizione ha 2 pezzi principali che ne determinano la larghezza, un pezzo che rappresenta l'incertezza sulla media prevista (o altro parametro) questa è la parte dell'intervallo di confidenza, e un pezzo che rappresenta la variabilità delle singole osservazioni attorno a quella media. L'intervallo di confidenza è fiabesco grazie al Teorema del limite centrale e, nel caso di una foresta casuale, aiuta anche il bootstrap. Ma l'intervallo di previsione dipende completamente dalle ipotesi su come i dati sono distribuiti, date le variabili predittive, CLT e bootstrap non hanno alcun effetto su quella parte.
L'intervallo di previsione dovrebbe essere più ampio laddove anche l'intervallo di confidenza corrispondente sarebbe più ampio. Altre cose che potrebbero influenzare la larghezza dell'intervallo di previsione sono ipotesi sulla varianza uguale o no, questo deve venire dalla conoscenza del ricercatore, non dal modello di foresta casuale.
Un intervallo di predizione non ha senso per un risultato categorico (potresti fare un set di predizione piuttosto che un intervallo, ma il più delle volte probabilmente non sarebbe molto informativo).
Possiamo vedere alcuni dei problemi relativi agli intervalli di previsione simulando i dati in cui conosciamo la verità esatta. Considera i seguenti dati:
set.seed(1)
x1 <- rep(0:1, each=500)
x2 <- rep(0:1, each=250, length=1000)
y <- 10 + 5*x1 + 10*x2 - 3*x1*x2 + rnorm(1000)
Questi dati particolari seguono i presupposti per una regressione lineare ed è abbastanza semplice per un adattamento casuale della foresta. Sappiamo dal modello "vero" che quando entrambi i predittori sono 0 che la media è 10, sappiamo anche che i singoli punti seguono una distribuzione normale con deviazione standard di 1. Ciò significa che l'intervallo di previsione del 95% basato sulla conoscenza perfetta per questi punti vanno da 8 a 12 (ben 8,04 a 11,96, ma l'arrotondamento lo rende più semplice). Qualsiasi intervallo di previsione stimato dovrebbe essere più ampio di questo (non avere informazioni perfette aggiunge larghezza per compensare) e includere questo intervallo.
Diamo un'occhiata agli intervalli dalla regressione:
fit1 <- lm(y ~ x1 * x2)
newdat <- expand.grid(x1=0:1, x2=0:1)
(pred.lm.ci <- predict(fit1, newdat, interval='confidence'))
# fit lwr upr
# 1 10.02217 9.893664 10.15067
# 2 14.90927 14.780765 15.03778
# 3 20.02312 19.894613 20.15162
# 4 21.99885 21.870343 22.12735
(pred.lm.pi <- predict(fit1, newdat, interval='prediction'))
# fit lwr upr
# 1 10.02217 7.98626 12.05808
# 2 14.90927 12.87336 16.94518
# 3 20.02312 17.98721 22.05903
# 4 21.99885 19.96294 24.03476
Possiamo vedere che c'è una certa incertezza nelle medie stimate (intervallo di confidenza) e che ci dà un intervallo di predizione che è più ampio (ma include) l'intervallo da 8 a 12.
Ora diamo un'occhiata all'intervallo basato sulle singole previsioni dei singoli alberi (dovremmo aspettarci che siano più ampie poiché la foresta casuale non beneficia delle ipotesi (che sappiamo essere vere per questi dati) che la regressione lineare fa):
library(randomForest)
fit2 <- randomForest(y ~ x1 + x2, ntree=1001)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- apply(pred.rf$individual, 1, function(x) {
c(mean(x) + c(-1, 1) * sd(x),
quantile(x, c(0.025, 0.975)))
})
t(pred.rf.int)
# 2.5% 97.5%
# 1 9.785533 13.88629 9.920507 15.28662
# 2 13.017484 17.22297 12.330821 18.65796
# 3 16.764298 21.40525 14.749296 21.09071
# 4 19.494116 22.33632 18.245580 22.09904
Gli intervalli sono più ampi degli intervalli di previsione della regressione, ma non coprono l'intero intervallo. Includono i valori reali e pertanto possono essere legittimi come intervalli di confidenza, ma prevedono solo dove si trova la media (valore previsto), nessun elemento aggiunto per la distribuzione intorno a tale media. Per il primo caso in cui x1 e x2 sono entrambi 0 gli intervalli non scendono al di sotto di 9,7, questo è molto diverso dal vero intervallo di predizione che scende a 8. Se generiamo nuovi punti dati, allora ci saranno diversi punti (molto di più del 5%) che si trovano negli intervalli di regressione e true, ma non rientrano negli intervalli di foresta casuali.
Per generare un intervallo di previsione dovrai fare alcune forti ipotesi sulla distribuzione dei singoli punti attorno ai mezzi previsti, quindi potresti prendere le previsioni dai singoli alberi (il pezzo dell'intervallo di confidenza avviato) e quindi generare un valore casuale dall'assunto distribuzione con quel centro. I quantili per quei pezzi generati possono formare l'intervallo di predizione (ma lo testerei ancora, potrebbe essere necessario ripetere il processo più volte e combinare).
Ecco un esempio di ciò aggiungendo deviazioni normali (poiché sappiamo che i dati originali hanno utilizzato una normale) alle previsioni con la deviazione standard basata sul MSE stimato dall'albero:
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i, ] + rnorm(1001, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
# 2.5% 97.5%
# [1,] 7.351609 17.31065
# [2,] 10.386273 20.23700
# [3,] 13.004428 23.55154
# [4,] 16.344504 24.35970
Questi intervalli contengono quelli basati su una conoscenza perfetta, quindi sembra ragionevole. Tuttavia, dipenderanno molto dalle ipotesi formulate (le ipotesi sono valide qui perché abbiamo usato la conoscenza di come i dati sono stati simulati, potrebbero non essere validi in casi di dati reali). Continuerei a ripetere più volte le simulazioni per dati che assomigliano più ai tuoi dati reali (ma simulati in modo da conoscere la verità) più volte prima di affidarmi completamente a questo metodo.
score
funzione per valutare le prestazioni. Poiché l'output si basa sul voto a maggioranza degli alberi nella foresta, in caso di classificazione ti darà la probabilità che questo risultato sia vero, in base alla distribuzione dei voti. Non sono sicuro della regressione però .... Quale libreria usi?