R实操:如何判断回归模型中变量的相对重要性
回归模型肯定会纳入很多自变量
那么如何对这些自变量进行排序呢?
这对我们临床实践也是至关重要的,例如利用回归寻找某个疾病的危险因素,我们就需要找出危险因素中,作用最大的那个因变量。
如何进行排序呢?今天我们就介绍利用R软件的两种方法。
一种是通过标准回归系数,就是在其他自变量不变的情况下,某个自变量改变一个标准差所引起的因变量的预期变化(以标准差为度量单位)代码如下:
> 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)
-2.054026e-16
Income
2.705095e-01
Population
1.072372e-02
Illiteracy
6.840496e-01
Frost
8.185407e-03
最终可以看出Illiteracy这个自变量的标准化回归系数最大。
还有一种方法就是相对权重,也就是所有可能子模型添加一个预测变量引起的R平方平均增加量的一个近似值。这里需要创建一个函数,relweights()函数。代码如下:
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
lbls <- names(fit$model[2:nvar])
rownames(import) <- lbls
colnames(import) <- "Weights"
barplot(t(import),names.arg=lbls,
ylab="% of R-Square",
xlab="Predictor Variables",
main="Relative Importance of Predictor Variables",
sub=paste("R-Square=", round(rsquare, digits=3)),
...)
return(import)
}
到此函数就建立成功了,然后呢进行使用:
> fit<-lm(Murder~Income+Population+Illiteracy+Frost,data=states)> relweights(fit,col="red") Weights Income 5.488962 Population 14.723401 Illiteracy 59.000195 Frost 20.787442结果与第一种方法是一致的。
号外,号外,号外。。。。。。。
你想和高手请教临床科研的知识吗?
你想要认识更多的临床科研朋友吗?
现在有这么一个微信群等着你的加入,赶快行动吧!
请加13738062354或者pj1989zzj为好友,注明加群,就会拉你进群了。