根据重要性绘制系数
Plot coefficients depending on their significance
我尝试将 DiD 模型的每个 variable/combination 的重要性可视化。
attach(mtcars)
M=lm(mpg ~ hp + wt * gear , data =mtcars)
summary(M)
coef(M)
confint(M, level = 0.9)
因此我想创建一个条形图以按排序顺序列出(最)重要的系数。 summary(M)
命令列出系数和相应的重要性代码。每个具有高重要性代码 (***) 的系数应该首先被监听,然后是 **,然后是 *。不应包含点和 ''。
所以,首先,我如何才能得到每个系数对应的显着性codes/values。我如何 include/exclude 取决于重要性的系数?
在回答这个问题之前,我想质疑它的部分前提。我认为最好 而不是 根据效果是落在传统阈值的一侧还是另一侧来二分(三分)效果——如果你真的需要这样做,我会建议着色(如下图)。拜托,拜托,请不要 suppose that the difference between 'significant' and 'not significant' is statistically significant ...
## never attach if you can help it! attach(mtcars)
M <- lm(mpg ~ hp + wt * gear , data=mtcars)
coef(summary(M))
提取系数 table,这就是我们要处理的。为了方便起见,我们也将重新排列:
efftab <- function(model) {
ss <- coef(summary(model))
ss <- data.frame(var=rownames(ss),ss,
stringsAsFactors=FALSE) ## add variable names
rownames(ss) <- NULL ## cosmetic
ss <- ss[-1,] ## generally makes sense to drop the intercept
names(ss)[5] <- "pval" ## rename
## p-value categories
ss$pval_cat <- cut(ss$pval,c(0,0.001,0.01,0.05,0.1,1),
labels=c("***","**","*",".","_"))
ss <- ss[order(ss$pval),] ## order by p-value
ss
}
试试看:
print(ss <- efftab(M),digits=3)
## var Estimate Std..Error t.value pval pval_cat
## 2 hp -0.0335 0.00962 -3.486 0.00169 **
## 4 gear 5.3656 2.44437 2.195 0.03693 *
## 5 wt:gear -1.4791 0.78439 -1.886 0.07013 .
## 3 wt 1.7814 2.76202 0.645 0.52439 _
library("plotrix")
colvec <- c("red","orange","blue","gray","white")
par(las=1,bty="l")
with(ss,plotCI(1:4,Estimate,1.96*Std..Error,pch=23,cex=3,
pt.bg=colvec[pval_cat],axes=FALSE,xlab="",ylab="estimate"))
axis(side=2)
axis(side=1,at=1:4,ss$var)
abline(h=0,lty=2)
然而,如果我们对变量进行标准化(参见 Schielzeth 2010 生态学与进化方法),这将更有意义,因此系数大小的差异实际上代表了效果的差异,而不是效应大小和变量测量单位之间的混淆:
scdat <- mtcars
vars <- c("mpg","hp","wt","gear")
scdat[vars] <- scale(as.matrix(scdat[vars]),center=FALSE)
M2 <- update(M,data=scdat)
ss2 <- efftab(M2)
with(ss2,plotCI(1:4,Estimate,1.96*Std..Error,pch=23,cex=3,
pt.bg=colvec[pval_cat],axes=FALSE,xlab="",ylab="estimate"))
axis(side=2)
axis(side=1,at=1:4,ss$var)
abline(h=0,lty=2)
例如,
wt:gear
交互对 mpg 的影响与 gear
大致相同(尽管您确实需要小心比较交互项与主效应——另一个潜在的蠕虫),即使gear
的 p<0.05 和 wt:gear
. 的 p>0.05
hp
对 mpg
的影响最小 (或者可能与 wt
的 not-nearly-significant 影响相关),即使它有最小的 p-value.
我尝试将 DiD 模型的每个 variable/combination 的重要性可视化。
attach(mtcars)
M=lm(mpg ~ hp + wt * gear , data =mtcars)
summary(M)
coef(M)
confint(M, level = 0.9)
因此我想创建一个条形图以按排序顺序列出(最)重要的系数。 summary(M)
命令列出系数和相应的重要性代码。每个具有高重要性代码 (***) 的系数应该首先被监听,然后是 **,然后是 *。不应包含点和 ''。
所以,首先,我如何才能得到每个系数对应的显着性codes/values。我如何 include/exclude 取决于重要性的系数?
在回答这个问题之前,我想质疑它的部分前提。我认为最好 而不是 根据效果是落在传统阈值的一侧还是另一侧来二分(三分)效果——如果你真的需要这样做,我会建议着色(如下图)。拜托,拜托,请不要 suppose that the difference between 'significant' and 'not significant' is statistically significant ...
## never attach if you can help it! attach(mtcars)
M <- lm(mpg ~ hp + wt * gear , data=mtcars)
coef(summary(M))
提取系数 table,这就是我们要处理的。为了方便起见,我们也将重新排列:
efftab <- function(model) {
ss <- coef(summary(model))
ss <- data.frame(var=rownames(ss),ss,
stringsAsFactors=FALSE) ## add variable names
rownames(ss) <- NULL ## cosmetic
ss <- ss[-1,] ## generally makes sense to drop the intercept
names(ss)[5] <- "pval" ## rename
## p-value categories
ss$pval_cat <- cut(ss$pval,c(0,0.001,0.01,0.05,0.1,1),
labels=c("***","**","*",".","_"))
ss <- ss[order(ss$pval),] ## order by p-value
ss
}
试试看:
print(ss <- efftab(M),digits=3)
## var Estimate Std..Error t.value pval pval_cat
## 2 hp -0.0335 0.00962 -3.486 0.00169 **
## 4 gear 5.3656 2.44437 2.195 0.03693 *
## 5 wt:gear -1.4791 0.78439 -1.886 0.07013 .
## 3 wt 1.7814 2.76202 0.645 0.52439 _
library("plotrix")
colvec <- c("red","orange","blue","gray","white")
par(las=1,bty="l")
with(ss,plotCI(1:4,Estimate,1.96*Std..Error,pch=23,cex=3,
pt.bg=colvec[pval_cat],axes=FALSE,xlab="",ylab="estimate"))
axis(side=2)
axis(side=1,at=1:4,ss$var)
abline(h=0,lty=2)
然而,如果我们对变量进行标准化(参见 Schielzeth 2010 生态学与进化方法),这将更有意义,因此系数大小的差异实际上代表了效果的差异,而不是效应大小和变量测量单位之间的混淆:
scdat <- mtcars
vars <- c("mpg","hp","wt","gear")
scdat[vars] <- scale(as.matrix(scdat[vars]),center=FALSE)
M2 <- update(M,data=scdat)
ss2 <- efftab(M2)
with(ss2,plotCI(1:4,Estimate,1.96*Std..Error,pch=23,cex=3,
pt.bg=colvec[pval_cat],axes=FALSE,xlab="",ylab="estimate"))
axis(side=2)
axis(side=1,at=1:4,ss$var)
abline(h=0,lty=2)
例如,
wt:gear
交互对 mpg 的影响与gear
大致相同(尽管您确实需要小心比较交互项与主效应——另一个潜在的蠕虫),即使gear
的 p<0.05 和wt:gear
. 的 p>0.05
hp
对mpg
的影响最小 (或者可能与wt
的 not-nearly-significant 影响相关),即使它有最小的 p-value.