Diferença entre implementação de regressão de crista em R e SAS

10

Tenho lido a descrição da regressão de crista em Modelos Estatísticos Lineares Aplicados , 5º Ed, capítulo 11. A regressão de crista é feita com dados de gordura corporal disponíveis aqui .

O livro corresponde à saída no SAS, onde os coeficientes transformados de volta são dados no modelo ajustado como:

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

Isso é mostrado no SAS como:

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

Mas R fornece coeficientes muito diferentes:

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 
> 

Alguém pode me ajudar a entender o porquê?

B_Miner
fonte
Eu usei o mesmo conjunto de dados e o analisei no SPSS. Os resultados são semelhantes ao SAS. No entanto, se pudermos padronizar os dados como no livro, o primeiro valor em c = 0 é semelhante no R e no SPSS (executando uma regressão linear múltipla). No entanto, os resultados são bastante diferentes quando avançamos conforme indicado acima. Também não encontrei nenhuma pista da diferença entre saídas para os mesmos dados.
Asad

Respostas:

6

Embora a regressão do cume pareça a princípio um algoritmo simples, o diabo está nos detalhes. Aparentemente, as variáveis ​​originais são dimensionadas e o parâmetro não é o parâmetro que você pensaria que recebe a descrição original. Pelo que concluí lendo a referência dada na página de ajuda de R, não há uma maneira acordada de fazer regressão de crista. Portanto, a diferença nos resultados só pode ser explicada por diferentes algoritmos usados ​​pelo R e SAS. Espero que alguém com mais conhecimento possa dar uma resposta mais detalhada.λlm.ridge

Você pode ver que tipo de algoritmo é aplicado em R olhando a fonte de lm.ridge. Basta digitar lm.ridgeo prompt R.

mpiktas
fonte
Achei este link útil para decifrar como o lm.ridge está calculando os coeficientes: mail-archive.com/[email protected]/msg81115.html Mas ainda fiquei intrigado com a diferença entre os resultados e o texto que referenciei e SAS , considerando que cada um supostamente está de volta à escala original.
B_Miner
@ user2040, verifique se os mesmos dados são usados ​​pelo SAS e R. Se for o mesmo, a única conclusão é que os algoritmos são diferentes. O que a página de ajuda do SAS está dizendo?
precisa saber é o seguinte
@ user2040, repliquei a regressão de crista SAS em R com seus dados. Portanto, sabemos com certeza que os algoritmos são diferentes.
mpiktas
11
Você acabou de me derrotar! :) Eu estava olhando a página de ajuda do SAS que você referenciou. Eu comparei o RMSE (somente dados na amostra, ainda não validamos com um CV ou bootstrap) e o resultado R foi superior.Então, você acha que a regressão de crista é mais adequada para previsão e não para interpretar os coeficientes (já que os resultados podem ser tão diferente pelo algoritmo)? Eu já sei que a teoria de modelos lineares regulares (ICs, contrastes etc.) está sujeita à regressão de cume (o bootstrapping se aproxima, mas ainda pode ser enganoso devido ao viés).
B_Miner
0

O uso de lm.ridge também produz um vetor de escala (tente head (model) para ver toda a saída). Para obter os valores previstos em R que você vê no SAS, pegue os coeficientes e divida pelo vetor escalar.

Thomas
fonte
2
Eu não entendo esse resultado, você pode ilustrar, por favor?
B_Miner