I metodi robusti sono davvero migliori?


17

Ho due gruppi di soggetti, A e B, ciascuno con una dimensione di circa 400 e circa 300 predittori. Il mio obiettivo è costruire un modello di previsione per una variabile di risposta binaria. Il mio cliente vuole vedere il risultato dell'applicazione del modello costruito da A su B. (Nel suo libro "Regressione Modeling Strategies", @FrankHarrell menziona che è meglio combinare i due set di dati e costruire un modello su quello, poiché così facendo aggiunge potenza e precisione --- vedi pagina 90, Convalida esterna. Tendo a concordare con lui, considerando che la raccolta del tipo di dati che ho è molto costosa e richiede tempo, ma non ho scelta su ciò che il cliente desidera .) Molti dei miei predittori sono altamente correlati e anche molto distorti. Sto usando la regressione logistica per costruire il mio modello predittivo.

I miei predittori provengono principalmente dalla meccanica. Ad esempio, il tempo totale in cui il soggetto è stato sottoposto a una sollecitazione superiore alla soglia per il periodo di tempo , per vari valori di e . È chiaro che proprio dalle loro definizioni, molti di questi tempi totali sono algebricamente correlati tra loro. Molti dei predittori che non sono algebricamente correlati sono correlati a causa della loro natura: i soggetti che sono sottoposti a stress elevato durante un periodo di tempo tendono ad essere stressati durante il periodo di tempo , anche seα[t1,t2]α>00t1<t2[t1,t2][t3,t4][t1,t2][t3,t4]=. Per ridurre la dimensione dei dati, ho raggruppato insieme i predittori correlati (ad esempio, tutti i tempi di sollecitazione totali insieme) e ho usato l'analisi dei componenti principali per rappresentare ciascun cluster. Dato che le variabili erano inclinate, ho provato due percorsi alternativi:

  • Prima di fare il PCA, ho usato una trasformazione logaritmica per ridurre l'inclinazione delle variabili.
  • Ho usato l'algoritmo ROBPCA di Mia Hubert, implementato dal pacchetto rrcov in R, (PcaHubert), per trovare i principali componenti principali.

Sto usando la forma generale della curva ROC, la forma della curva di richiamo di precisione e l'area sotto la curva ROC (AUC) come misura delle mie prestazioni, e mi piacerebbe ottenere risultati simili per entrambi i set di dati A e B Mi aspettavo di ottenere un risultato molto migliore dall'utilizzo dei componenti principali robusti, ma con mia sorpresa, il primo metodo ha funzionato meglio: migliore valore AUC per entrambi i set di dati A e B, più somiglianza tra le curve ROC e richiamo di precisione più simile curve.

Qual è la spiegazione per questo? E come posso utilizzare componenti principali robusti, invece di provare a far sembrare i miei dati normali? Esistono metodi PCA particolarmente robusti che consiglieresti invece di ROBPCA?


"Ho raggruppato i predittori correlati insieme" puoi spiegare meglio quali passaggi comporta? "Mi aspettavo di ottenere un risultato molto migliore dall'utilizzo dei robusti componenti principali" Puoi spiegare come misurare i risultati?
user603

Perché pensi che sia meglio combinare i set di dati? Non sono affatto d'accordo. Una difficoltà che questo tipo di problema ha è fare troppo affidamento sui dati particolari. Testare il modello su un altro set di dati è una buona idea.
Peter Flom - Ripristina Monica

In che senso il normale PCA sulle variabili di registro era "migliore"? Aveva un senso più intuitivo? Ha dato un risultato migliore nel secondo set di dati?
Peter Flom - Ripristina Monica

Grazie @PeterFlom per i tuoi commenti! Ho aggiornato la domanda per i tuoi commenti.
user765195

Grazie @ user603 per il tuo commento! Ho aggiornato la domanda per riflettere il tuo commento.
user765195

Risposte:


17

In breve, e dalla tua descrizione, stai confrontando la mela con le arance .... in due modi.

log

Considera questo esempio:

library("MASS")
library("copula")
library("rrcov")
p<-2;n<-100;

eps<-0.2
l1<-list()
l3<-list(rate=1)
#generate assymetric data
model<-mvdc(claytonCopula(1,dim=p),c("unif","exp"),list(l1,l3));
x1<-rMvdc(ceiling(n*(1-eps)),model);
#adding 20% of outliers at the end:
x1<-rbind(x1,mvrnorm(n-ceiling(n*(1-eps)),c(7,3),1/2*diag(2))) 

dati

Ora, monta i due modelli (ROBPCA e pca classico entrambi sul registro dei dati):

x2<-log(x1)
v0<-PcaClassic(x2)
v1<-PcaHubert(x2,mcd=FALSE,k=2)

Ora, considera l'asse della più piccola variazione trovato da ciascun metodo (qui, per comodità, lo tracciamo sullo spazio trasformato in tronchi ma otterrai le stesse conclusioni sullo spazio originale).

modello

Visibilmente, ROBPCA svolge un lavoro migliore nel gestire la parte incontaminata dei dati (i punti verdi):

Ma ora arrivo al mio secondo punto.

Huziowio

ce l'hai (questo è chiaramente visibile nella trama sopra):

ΣioHu(zio)2<ΣioHu(wio)2(1)

Ma sembra che tu sia sorpreso dal fatto che:

Σio=1n(zio)2>Σio=1n(wio)2(2)

- il modo in cui hai descritto la tua procedura di test, calcoli il criterio di valutazione dell'adattamento sull'intero set di dati, quindi il tuo criterio di valutazione è una funzione monotona di (2) in cui dovresti usare una funzione monotona di (1) -

In altre parole, non aspettarti che una misura robusta abbia una somma minore di residui ortogonali quadrati rispetto a una procedura non solida sul tuo set di dati completo: lo stimatore non robusto è già il minimizzatore univoco del SSOR sul set di dati completo.


1
Grazie per la vostra risposta. Mi ci è voluto un po 'di tempo per sperimentare altri dati e pensare alla tua risposta per capirlo davvero.
user765195,
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.