【问题标题】:How to extract model coeff from a list and make Plots?如何从列表中提取模型系数并制作图?
【发布时间】:2019-05-17 08:12:48
【问题描述】:

我有一个数据框 DF,其中包含 TrainStation、timeofday、Date 和 NumberOfPassenger 列

首先你会看到代码,然后是回归文件,最后是回归列表

TrainStation<-c("East","North","East","North","North","Central","North",
                "Central","East","North","East","North","Central","North",
                "Central","North","Central","North","Central","North","Central",
                "North","Central","East","North","East","North","Central","North",
                "Central","East","North","East","North","Central","East")

TimeOfday<-c(12,12,8,16,10,6,0,7,1,3,23,15,12,8,16,10,1,3,5,7,9,10,12,11,17,2,4,5,
             13,14,18,19,20,21,22,23)

Date<-sample(seq(as.Date('2019/01/01'), as.Date('2019/02/28'), by="day"), 36)
Date<-as.character(Date)

DF<-cbind(TrainStation,TimeOfday,Date)
DF<-as.data.frame(DF)

#Weekdays
DF$Date<-as.Date(DF$Date)
DF$Date<-weekdays(DF$Date)
#TimeOfday
DF$TimeOfday<-strptime(DF$TimeOfday,format = "%H")
DF$TimeOfday<-hour(DF$TimeOfday)

DF$TrainStation<-as.character(DF$TrainStation)
DF$TimeOfday<-as.factor(DF$TimeOfday)
DF$Date<-as.factor(DF$Date)

我的回归数据是这样的:

library(tidyverse)
DF2<-DF%>%
  group_by(TrainStation,Date,TimeOfday)%>%
  summarize(NumberOfPassenger = n_distinct(TrainStation))

然后我用我的数据列一个列表,然后是回归 (glm)

#List and glm
l_DF2<-split(DF2,DF2$TrainStation)
lapply(l_DF2, function(x) glm(formula = NumberOfPassenger~TimeOfday+Date,family = poisson(link = "log"), data = x))

问题:

现在我想看看系数并制作一些绘图。但是如何从列表中获取系数?

不同模型的绘图示例:

mod&lt;-glm(formula = NumberOfPassenger~TrainStation+TimeOfday+Date,family = poisson(link = "log"), data = DF2)

我可以在图中显示 TimeOfday 的系数:

barplot(coef(mod)[grep("TimeOfday",names(coef(mod)))]) 

我怎样才能在我的情况下进行绘图?

【问题讨论】:

    标签: r plot plotly glm coefficients


    【解决方案1】:

    怎么样

    res <- lapply(l_DF2,
      function(x) {
        glm(formula = NumberOfPassenger ~ TimeOfday + Date,
            family = poisson(link = "log"), data = x)
      }
    )
    lapply(res, coef)
    

    要提取模型的系数,您可以使用stats::coef()。现在您只需要遍历您的列表,您可以使用 lapply() 来完成,就像您已经为拟合模型所做的那样。

    如果您没有可用的stats::coef(),您可以使用类似的方法从列表中提取coefficients 条目

    lapply(res, `[[`, "coefficients")
    # or slightly more verbose
    lapply(res, function(x) x[["coefficients"]])
    

    【讨论】:

    • 感谢您的详细解答!我还有一个关于情节的问题。如果模型看起来像这样:
      mod&lt;-glm(formula = NumberOfPassenger~TrainStation+TimeOfday+Date,family = poisson(link = "log"), data = DF2)
      ,我可以在图中显示 TimeOfday 的系数:
      barplot(coef(mod)[grep("TimeOfday",names(coef(mod)))]) 在这种情况下如何绘制?
    • 如果你想查看第一个模型,你再次索引你的列表,例如barplot(coef(res[[1]]))。你可能想看看一些 R 介绍材料,例如 this,如果你不清楚这些基本概念。
    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2019-11-24
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2019-12-15
    相关资源
    最近更新 更多