R

时间:2019-01-05 15:32:36

标签: r

我正在用glm()拟合训练数据,并希望绘制系数。但是,我不知道如何给出正确的图,如下所示:

enter image description here

set.seed(1)
trn_index = createDataPartition(y = development$EQUAL_PAY, p = 0.80, list = FALSE)
trn_pay = development[trn_index, ]
tst_pay = development[-trn_index, ]

trn_pay_f <- trn_pay %>%
  mutate(EQUAL_PAY = relevel(factor(EQUAL_PAY),ref = "YES"))

pay_lgr = train(EQUAL_PAY ~ .- EQUAL_WORK - COUNTRY, method = "glm", family = binomial(link = "logit"), data = trn_pay_f,trControl = trainControl(method = 'cv', number = 10))

summary(pay_lgr)
##Coefficients:
                             Estimate Std. Error z value Pr(>|z|)  
(Intercept)                -2.560e+00  2.552e+00  -1.003   0.3158  
GDP_PER_CAP                -5.253e-05  3.348e-05  -1.569   0.1167  
CO2_PER_CAP                 1.695e-01  7.882e-02   2.151   0.0315 *
PERC_ACCESS_ELECTRICITY    -7.833e-03  1.249e-02  -0.627   0.5304  
ATMS_PER_1E5               -2.473e-03  8.012e-03  -0.309   0.7576  
PERC_INTERNET_USERS        -2.451e-02  2.047e-02  -1.198   0.2310  
SCIENTIFIC_ARTICLES_PER_YR  2.698e-05  1.519e-05   1.776   0.0757 .
PERC_FEMALE_SECONDARY_EDU   1.126e-01  5.934e-02   1.897   0.0578 .
PERC_FEMALE_LABOR_FORCE    -6.559e-03  1.477e-02  -0.444   0.6569  
PERC_FEMALE_PARLIAMENT     -4.786e-02  2.191e-02  -2.184   0.0289 *

## extract all parameters in a dataframe
pay_lgrFrame <- data.frame(COEFFICIENT = rownames(summary(pay_lgr)$coef),
p_value = summary(pay_lgr)$coef[,4],
z_value = summary(pay_lgr)$coef[,3],
SE = summary(pay_lgr)$coef[,2],
Estimate = summary(pay_lgr)$coef[,1])

## and I was stuck in making a plot as the image I posted the link above.

1 个答案:

答案 0 :(得分:1)

放入汇总表中(您可以直接以ss <- coef(summary(pay_lgr))的形式获取它,但我没有设置数据):

ss <- read.delim(header=TRUE,check.names=FALSE,text="
Estimate    Std. Error  z value Pr(>|z|)  
(Intercept) -2.560e+00  2.552e+00   -1.003  0.3158
GDP_PER_CAP -5.253e-05  3.348e-05   -1.569  0.1167
CO2_PER_CAP 1.695e-01   7.882e-02   2.151   0.0315
PERC_ACCESS_ELECTRICITY -7.833e-03  1.249e-02   -0.627  0.5304
ATMS_PER_1E5    -2.473e-03  8.012e-03   -0.309  0.7576
PERC_INTERNET_USERS -2.451e-02  2.047e-02   -1.198  0.2310
SCIENTIFIC_ARTICLES_PER_YR  2.698e-05   1.519e-05   1.776   0.0757
PERC_FEMALE_SECONDARY_EDU   1.126e-01   5.934e-02   1.897   0.0578
PERC_FEMALE_LABOR_FORCE -6.559e-03  1.477e-02   -0.444  0.6569
PERC_FEMALE_PARLIAMENT  -4.786e-02  2.191e-02   -2.184  0.0289")

将行名转换为名为term的列:

ss2 <- tibble::rownames_to_column(ss,"term")

绘制地物:

library(ggplot2)
ggplot(ss2, aes(term,Estimate))+
      geom_bar(stat="identity")+
      coord_flip()
ggsave("bar.png")

exec

正如其他人所评论的那样,可能有更好的方法(在视觉传达方面既容易又可取)来绘制系数。 dotwhisker::dwplot()函数可做一些方便的事情:

  • 自动提取系数并将其绘制
  • 通过2 * std开发人员自动缩放连续预测变量,以实现系数之间的比较(如果不希望,请使用by_2sd=FALSE
  • 自动排除截距,该截距与其他参数的范围不同,并且很少具有推论性意义
library(dotwhisker)
dwplot(lm(Murder/Population ~ ., data=as.data.frame(state.x77)))

enter image description here