压缩方法 & 降维方法
1. 岭回归
法①:lm.ridge函数
## lm.ridge函数进行岭回归
# 对样本数据进行标准化处理
data <- data.frame(scale(data0[,2:]))
# 对标准化处理后的数据(不含截距项)进行岭回归
library(MASS)
ridge <- lm.ridge(y~.-1, data= ,lambda=seq(0,3,0.1))
beta <- coef(ridge) ; beta
# 绘制岭迹图(部分格式调整不必要)
k <- ridge$lambda
plot(k,k,type="n",xlab="岭参数k",ylab="岭回归系数",ylim=c(-2.5,2.5))
linetype <- c(1:) char <- c(18:) #绘图格式调整
for(i in 1:)
lines(k,beta[,i],type="o",lty=linetype[i],pch=char[i],cex=0.75)
legend(locator(1),inset=0.5,legend=c("x1","x2",...),cex=0.8,pch=char,lty=linetype)
## LinearRidge函数进行岭回归
library(ridge)
ridge <- linearRidge(y~ ,data= ,lambda="automatic",scaling=c("corrForm","scale","none"),...)
summary(ridge) #多了参数检验的功能
案例:
#### 对数据进行标准化处理
scaledata <- scale(data)
X <- scaledata[,2:3]; Y <- scaledata[,1];
mean<-attr(scaledata,'scaled:center'); sd<-attr(scaledata,'scaled:scale')
#-----------------------------------------------------
#### 1. 复共线性判别
##* 使用方差膨胀因子
library(carData);library(car)
lm1 <- lm(Y~X1+X2,data=data.frame(scaledata))
vif(lm1)
##* 使用条件数 k(lambda(1)/lambda(p-1))
# 用kappa函数直接计算
kappa(t(X)%*%X,exact=TRUE)
# 另法:手动计算矩阵的特征值并使用条件数k判别
Lambda <- eigen(t(X)%*%X)
Lambda$values[1]/Lambda$values[2]