- 概念
简单就是说“哪些预测变量对响应变量影响最大”?或者“哪些变对预测最为重要”
- 预测变量不相关
直接计算预测变量与响应变量之间的相关系数,进行排序即可
- 预测变量有相关性
- 利用比较标准化回归系数得出
标准化回归系数:在回归分析前,用scale()函数将数据标准化为均值为0,标准差为1的数据集,这样用R回归即可得到标准化的回归系数。注意:scale()函数返回的是一个矩阵,而lm()函数要求一个数据框,需要用一个中间步骤转换下。
它表示当其他预测变量不变时,该预测变量一个标准差的变化可引起的响应变量的预期变化(以标准差单位度量)
> states <- as.data.frame(state.x77[,c("Murder", "Population",+ "Illiteracy", "Income", "Frost")])> zstates <- as.data.frame(scale(states))> zfit <- lm(Murder~Population + Income + Illiteracy + Frost, data=zstates)> coef(zfit) #提取模型的系数 (Intercept) Population Income Illiteracy Frost -2.054026e-16 2.705095e-01 1.072372e-02 6.840496e-01 8.185407e-03 #可以看出 Illiteracy最大,Frost最小
- 相对权重方法
一种比较有前景的新方法,它是对所有可能子模型添加一个预测变量引起的R平方平均增加量的一个近似值
> relweights <- function(fit,...){+ R <- cor(fit$model)+ nvar <- ncol(R)+ rxx <- R[2:nvar, 2:nvar]+ rxy <- R[2:nvar, 1]+ svd <- eigen(rxx)+ evec <- svd$vectors+ ev <- svd$values+ delta <- diag(sqrt(ev))+ lambda <- evec %*% delta %*% t(evec)+ lambdasq <- lambda ^ 2+ beta <- solve(lambda) %*% rxy+ rsquare <- colSums(beta ^ 2)+ rawwgt <- lambdasq %*% beta ^ 2+ import <- (rawwgt / rsquare) * 100+ import <- as.data.frame(import)+ row.names(import) <- names(fit$model[2:nvar])+ names(import) <- "Weights"+ import <- import[order(import),1, drop=FALSE]+ dotchart(import$Weights, labels=row.names(import),+ xlab="% of R-Square", pch=19,+ main="Relative Importance of Predictor Variables",+ sub=paste("Total R-Square=", round(rsquare, digits=3)),+ ...)+ return(import)+ }
- relweights()函数的应用
也可以使用这种方法,较为直观
#如下图> states <- as.data.frame(state.x77[,c("Murder", "Population",+ "Illiteracy", "Income", "Frost")])> fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)> relweights(fit, col="blue") WeightsIncome 5.488962Population 14.723401Frost 20.787442Illiteracy 59.000195
从图中可以看出各个预测变量对模型方差的解释程度(R平方=0.567),Illiteracy解释了59%的R平方。。。根据相对权重Illiteracy具有最大的相对重要性,依次是Frost、Population、Income