簡單就是說「哪些預測變量對響應變量影響最大」?或者「哪些變對預測最爲重要」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