Differenza tra l'implementazione della regressione della cresta in R e SAS


10

Ho letto la descrizione della regressione della cresta in Modelli statistici lineari applicati , 5 ° Ed capitolo 11. La regressione della cresta viene fatta sui dati relativi al grasso corporeo disponibili qui .

Il libro di testo corrisponde all'output in SAS, dove i coefficienti trasformati indietro sono indicati nel modello montato come:

Y=7.3978+0.5553X1+0.3681X20.1917X3

Questo è mostrato da SAS come:

proc reg data = ch7tab1a outest = temp outstb noprint;
  model y = x1-x3 / ridge = 0.02;
run;
quit;
proc print data = temp;
  where _ridge_ = 0.02 and y = -1;
  var y intercept x1 x2 x3;
run;
Obs     Y    Intercept       X1         X2         X3

 2     -1     -7.40343    0.55535    0.36814    -0.19163
 3     -1      0.00000    0.54633    0.37740    -0.13687

Ma R fornisce coefficienti molto diversi:

data <- read.table("http://www.cst.cmich.edu/users/lee1c/spss/V16_materials/DataSets_v16/BodyFat-TxtFormat.txt", 
                   sep=" ", header=FALSE)
data <- data[,c(1,3,5,7)]
colnames(data)<-c("x1","x2","x3","y")
ridge<-lm.ridge(y ~ ., data, lambda=0.02)   
ridge$coef
coef(ridge)

>   ridge$coef
       x1        x2        x3 
10.126984 -4.682273 -3.527010 
>   coef(ridge)
                   x1         x2         x3 
42.2181995  2.0683914 -0.9177207 -0.9921824 
> 

Qualcuno può aiutarmi a capire perché?


Ho usato lo stesso set di dati e l'ho analizzato in SPSS. I risultati sono simili a quelli di SAS. Tuttavia, se possiamo standardizzare i dati come nel libro, il primo valore in c = 0 è simile in R e SPSS (eseguendo una regressione lineare multipla). Tuttavia, i risultati sono abbastanza diversi quando ci spostiamo ulteriormente come indicato sopra. Anch'io non ho trovato alcun indizio della differenza tra output per gli stessi dati.
Asad

Risposte:


6

λlm.ridge

Puoi vedere che tipo di algoritmo viene applicato in R guardando la fonte di lm.ridge. Digita lm.ridgeil prompt R.


Ho trovato questo link utile per decifrare come lm.ridge sta calcolando i coefficienti: mail-archive.com/r-help@r-project.org/msg81115.html Ma ancora perplesso quanto siano diversi i risultati dal testo a cui ho fatto riferimento e SAS , dato che ognuno è presumibilmente tornato alla scala originale.
B_Miner

@ user2040, verifica che gli stessi dati vengano utilizzati da SAS e R. Se è lo stesso, l'unica conclusione è che gli algoritmi sono diversi. Cosa dice la pagina di aiuto di SAS?
mpiktas,

@ user2040, ho replicato la regressione della cresta SAS su R con i tuoi dati. Quindi sappiamo per certo che gli algoritmi sono diversi.
mpiktas,

1
Mi hai appena battuto! :) Stavo guardando la pagina di aiuto di SAS a cui hai fatto riferimento. Ho confrontato l'RMSE (solo dati nel campione, non ancora convalidato con un CV o bootstrap) e il risultato R è stato superiore. Quindi, pensi che la regressione della cresta sia più adatta per la previsione e non interpretare i coefficienti (poiché i risultati possono essere così diverso dall'algoritmo)? So già che la teoria dei modelli lineari regolari (CI, contrasti, ecc.) È fuori per la regressione della cresta (il bootstrap si avvicina ma può ancora essere fuorviante a causa di distorsioni).
B_Miner

0

L'uso di lm.ridge produce anche un vettore di ridimensionamento (provare head (modello) per vedere tutto l'output). Per ottenere i valori previsti in R che vedi in SAS, prendi i coefficienti e dividi per il vettore scalare.


2
Non ottengo quel risultato, puoi illustrarmi per favore?
B_Miner,
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.