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:
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ê?
r
sas
ridge-regression
B_Miner
fonte
fonte
Respostas:
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 digitarlm.ridge
o prompt R.fonte
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.
fonte