查看原文
其他

R实操:如何判断回归模型中变量的相对重要性

2017-08-06 miffery 临床科研与meta分析


回归模型肯定会纳入很多自变量


那么如何对这些自变量进行排序呢?


这对我们临床实践也是至关重要的,例如利用回归寻找某个疾病的危险因素,我们就需要找出危险因素中,作用最大的那个因变量。


如何进行排序呢?今天我们就介绍利用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为好友,注明加群,就会拉你进群了。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存