代码之家  ›  专栏  ›  技术社区  ›  Jordan

如何使用r提取分段包生成的斜率和截距变量并将其放入数据帧中?

  •  1
  • Jordan  · 技术社区  · 8 年前

    谁能告诉我如何获得分段包产生的斜率和截距,并将其放置在数据框中?这最终将用于排列坡度和拦截器,使其恢复到原始值。请参阅下面的数据(我从另一篇文章中获得)。

    #加载程序包 库(分段) 图书馆(tidyverse)

    #set seed and develop data
    set.seed(1)
    Y<-c(13,21,12,11,16,9,7,5,8,8)
    X<-c(74,81,80,79,89,96,69,88,53,72)
    age<-c(50.45194,54.89382,46.52569,44.84934,53.25541,60.16029,50.33870,
       51.44643,38.20279,59.76469)
    dat=data.frame(Y=Y,off.set.term=log(X),age=age)
    
    #run initial GLM
    glm.fit=glm(Y~age+off.set.term,data=dat,family=poisson)
    summary(glm.fit)
    
    #run segmented glm
    glm.fitted.segmented <- segmented(glm.fit, seg.Z=~age + off.set.term, psi = 
    list(age = c(50,53), off.set.term = c(4.369448)))
    
    #Get summary, slopes and intercepts
    summary(glm.fitted.segmented)
    slope(glm.fitted.segmented)
    intercept(glm.fitted.segmented)
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   troh    8 年前
    library(broom)
    library(dplyr)
    library(tidyr)
    library(stringr)
    
    slopes <-
      bind_rows(lapply(slope(glm.fitted.segmented), tidy), .id = "variable") %>%
      mutate(type = str_extract(.rownames, "^[a-z]+"),
             model = str_extract(.rownames, "[0-9]+$")) %>%
      select(variable, model, type, estimate = "Est.")
    intercepts <-
      bind_rows(lapply(intercept(glm.fitted.segmented), tidy), .id = "variable") %>%
      mutate(type = str_extract(.rownames, "^[a-z]+"),
             model = str_extract(.rownames, "[0-9]+$")) %>%
      select(variable, model, type, estimate = "Est.")
    
    bind_rows(slopes, intercepts) %>%
      spread(type, estimate)
    

    使用 tidy 功能,您可以轻松拉出数据。为每个变量设置框架,然后提取单元的模型和类型。将其绑定在一起,并将类型和估计值扩展到变量、模型、截距和斜率。