首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将列添加到基于lm的挠性表中

如何将列添加到基于lm的挠性表中
EN

Stack Overflow用户
提问于 2022-05-16 20:56:24
回答 1查看 154关注 0票数 2

假设我用lm做了一个模型,比如

代码语言:javascript
运行
复制
library(flextable)
set.seed(123)

mydata <- data.frame(y=runif(100,1,100), x1=runif(100,1,100), x2=runif(100,1,100))
model <- lm(y~x1+x2, data=mydata)
as_flextable(model)

这给了我一个可弯曲的估计值,标准误差,t值,和Pr(>_t_例如,如果我的y被记录,我想要一个显示exp(model$coefficients)-1的列。

是否有一种简单的方法可以做到这一点,还是我必须从头开始重新创建这个表?

EN

Stack Overflow用户

回答已采纳

发布于 2022-05-18 13:34:35

在引用flextableas_flextable.lm函数的源代码时,显然没有内置的方法来实现它,我通过从源代码中复制来创建了一个“新”函数。

代码语言:javascript
运行
复制
pvalue_format <- function(x){
  z <- cut(x, breaks = c(-Inf, 0.001, 0.01, 0.05, 0.1, Inf), labels = c("***", "**", "*", ".", ""))
  as.character(z)
}

as_flextable_newcol<-function(x,new_cols=NULL) {
  data_t <- broom::tidy(x)
  data_g <- broom::glance(x)
  ##this is my addition
  if(!is.null(new_cols)&is.list(new_cols)) {
    for(i in names(new_cols)) {
      data_t <- data_t %>% mutate("{i}":=new_cols[[i]](term, estimate, std.error, p.value))
    }
  }
  ##end of my addition
  ft <- flextable(data_t, col_keys = c("term", "estimate", "std.error", "statistic", "p.value", "signif"))
  ft <- colformat_double(ft, j = c("estimate", "std.error", "statistic"), digits = 3)
  ft <- colformat_double(ft, j = c("p.value"), digits = 4)
  ft <- compose(ft, j = "signif", value = as_paragraph(pvalue_format(p.value)) )

  ft <- set_header_labels(ft, term = "", estimate = "Estimate",
                          std.error = "Standard Error", statistic = "t value",
                          p.value = "Pr(>|t|)", signif = "" )
  dimpretty <- dim_pretty(ft, part = "all")

  ft <- add_footer_lines(ft, values = c(
    "Signif. codes: 0 <= '***' < 0.001 < '**' < 0.01 < '*' < 0.05 < '.' < 0.1 < '' < 1",
    "",
    sprintf("Residual standard error: %s on %.0f degrees of freedom", formatC(data_g$sigma), data_g$df.residual),
    sprintf("Multiple R-squared: %s, Adjusted R-squared: %s", formatC(data_g$r.squared), formatC(data_g$adj.r.squared)),
    sprintf("F-statistic: %s on %.0f and %.0f DF, p-value: %.4f", formatC(data_g$statistic), data_g$df.residual, data_g$df, data_g$p.value)
  ))
  ft <- align(ft, i = 1, align = "right", part = "footer")
  ft <- italic(ft, i = 1, italic = TRUE, part = "footer")
  ft <- hrule(ft, rule = "auto")
  ft <- autofit(ft, part = c("header", "body"))
  ft
}

该函数的new_cols参数需要是一个命名的函数列表,其中列表中每个函数的名称将成为新的列名。列表中的函数将以term, estimate, std.error, p.value作为输入,因为它们是data_t tibble的名称。

例如:

代码语言:javascript
运行
复制
new_cols=list(perc_change=function(term, estimate, std.error, p.value) {
  ifelse(term=="(Intercept)","", paste0(round(100*(exp(estimate)-1),0),"%"))
})
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72265534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档