简单就是说“哪些预测变量对响应变量影响最大”?或者“哪些变对预测最为重要”git
直接计算预测变量与响应变量之间的相关系数,进行排序便可函数
标准化回归系数:在回归分析前,用scale()函数将数据标准化为均值为0,标准差为1的数据集,这样用R回归便可获得标准化的回归系数。注意:scale()函数返回的是一个矩阵,而lm()函数要求一个数据框,须要用一个中间步骤转换下。code
它表示当其余预测变量不变时,该预测变量一个标准差的变化可引发的响应变量的预期变化(以标准差单位度量)排序
> 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平方平均增长量的一个近似值it
> 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) + }
也能够使用这种方法,较为直观io
#以下图 > 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") Weights Income 5.488962 Population 14.723401 Frost 20.787442 Illiteracy 59.000195
从图中能够看出各个预测变量对模型方差的解释程度(R平方=0.567),Illiteracy解释了59%的R平方。。。根据相对权重Illiteracy具备最大的相对重要性,依次是Frost、Population、Incomeast