多変量回帰のチェック

多変量回帰で共通した情報を持つ場合は、
共通した情報程度の係数になる。 ただし、AIC Step wise などを使うとノイズによって
不安定になり、片方に集中することも。。 Ridge回帰なら両方の変数を選んでくる。

例えば、
a1=情報1+0.2情報2
a2=情報1+0.3情報3

で、y=情報1+情報2

なら、a1の回帰係数のが少し大きくなる。


もし、片方に回帰係数が寄った場合、ランダム誤差か、それとも、情報1の割合が
大きく、情報3の割合がちいさかったからか? yへの

情報もってるからといって、回帰係数がおおいとは限らない。
回帰係数が真に大きい潜在変数に近いほうが回帰係数が大きくなる。
b1が増えて、b2=0が増えたとき、a1とa2がどれくらい増えるか連立方程式で計算。それをもとに係数が決められる。

library(glmnet)
a1<-rexp(1000)
a2<-rexp(1000)
a3<-rexp(1000)
b1<-0.9*a1+0.05*a2
b2<-0.9*a1+0.06*a2

y<-3*a1+0.1*a2+0.0*a3+1*rnorm(1000,sd=1)

ans<-lm(y~b1+b2)
coef(ans)
step(ans)

ans0<-lm(y~1)

step(ans0,direction=c("forward"),scope=list(upper="y~b1+b2",lower="y~1"))


#Lasso
fit.glmnet.lasso.cv <- cv.glmnet(as.matrix(cbind(b1,b2)),y,alpha = 1)
coefficients(fit.glmnet.lasso.cv)

#Ridge
fit.glmnet.lasso.cv <- cv.glmnet(as.matrix(cbind(b1,b2)),y,alpha = 0)
coefficients(fit.glmnet.lasso.cv)


a1<-rexp(1000)
a2<-rexp(1000)
a3<-rexp(1000)
b1<-0.9*a1+0.03*a2
b2<-0.9*a1+0.03*a3

y<-3*a1+0.1*a2+0.1*a3+1*rnorm(1000,sd=1)

ans<-lm(y~b1+b2)
coef(ans)
step(ans)

ans0<-lm(y~1)

step(ans0,direction=c("forward"),scope=list(upper="y~b1+b2",lower="y~1"))


#Lasso
fit.glmnet.lasso.cv <- cv.glmnet(as.matrix(cbind(b1,b2)),y,alpha = 1)
coefficients(fit.glmnet.lasso.cv)

#Ridge
fit.glmnet.lasso.cv <- cv.glmnet(as.matrix(cbind(b1,b2)),y,alpha = 0)
coefficients(fit.glmnet.lasso.cv)




a1<-rexp(1000)
a2<-rexp(1000)
a3<-rexp(1000)
b1<-0.9*a1+0.5*a2
b2<-0.9*a1+0.03*a3

y<-3*a1+0.1*a2+0.1*a3+1*rnorm(1000,sd=1)

ans<-lm(y~b1+b2)
coef(ans)
step(ans)

ans0<-lm(y~1)

step(ans0,direction=c("forward"),scope=list(upper="y~b1+b2",lower="y~1"))


#Lasso
fit.glmnet.lasso.cv <- cv.glmnet(as.matrix(cbind(b1,b2)),y,alpha = 1)
coefficients(fit.glmnet.lasso.cv)

#Ridge
fit.glmnet.lasso.cv <- cv.glmnet(as.matrix(cbind(b1,b2)),y,alpha = 0)
coefficients(fit.glmnet.lasso.cv)

3 x 1 sparse Matrix of class "dgCMatrix"
                     1
(Intercept) -0.1048879
b1           0.7910052
b2           2.2927133