【问题标题】:Extract part of a regression type output提取回归类型输出的一部分
【发布时间】:2021-04-07 10:16:42
【问题描述】:

下面,我想知道如何提取标题为Likelihood Ratio Testresult 输出的最后一部分?

library(weightr)

y <- dat.bangertdrowns2004$yi
v <- dat.bangertdrowns2004$vi

(result <- weightfunct(y, v))
# .
# .
# .
Likelihood Ratio Test:                     ## This part
X^2(df = 1) = 1.163544, p-val = 0.28073    ## This part

【问题讨论】:

    标签: r list function dataframe regression


    【解决方案1】:

    一个选项是

    out <- capture.output(result)
    out[cumsum(grepl("Likelihood", out)) > 0]
    #[1] "Likelihood Ratio Test:"                 
    #[2] "X^2(df = 1) = 1.163544, p-val = 0.28073"
    

    【讨论】:

      【解决方案2】:

      另一种选择是查看产生输出的函数。在这种情况下,它是weightr:::print.weightfunct,相关行是

      <snip>
              cat("\n")
              cat("Likelihood Ratio Test:")
              cat("\n")
              df <- length(x[[2]]$par) - length(x[[1]]$par)
              lrchisq <- 2 * (abs(x[[1]]$value - x[[2]]$value))
              pvalue <- 1 - pchisq(lrchisq, df)
              cat("X^2(df = ", df, ") = ", lrchisq, ", p-val = ", format.pval(pvalue), 
                  sep = "")
      </snip>
      

      所以你可以用

      获取值
      x = result
      df <- length(x[[2]]$par) - length(x[[1]]$par)
      lrchisq <- 2 * (abs(x[[1]]$value - x[[2]]$value))
      pvalue <- 1 - pchisq(lrchisq, df)
      
      > lrchisq
      #[1] 1.163544
      > pvalue
      #[1] 0.2807317
      

      【讨论】:

        【解决方案3】:

        指示的输出是在print.weightfunct 中计算的,因此我们可以复制打印方法,然后向其添加一个跟踪,该跟踪捕获所需的信息并将其输出到单行数据帧.W

        print.weightfunct <- weightr:::print.weightfunct
        trace(print.weightfunct, exit = quote(.W <<- data.frame(df, lrchisq, pvalue)))
        (result <- weightfunct(y, v))
        ## ...snip ## 
        .W
        ##   df  lrchisq    pvalue
        ## 1  1 1.163544 0.2807317
        

        【讨论】:

        • 这很整洁。并且比我的答案更通用,因为可以用来获取在打印调用和输出中计算的所有许多不同的统计数据
        • 但我认为这是一种危险的方法(不过我赞成)。我打算在函数中使用该解决方案,并且在对三组不同的数据集进行测试时,即使我输入了不同的数据集,该函数也仅输出第一个数据集的结果!我认为罪魁祸首是&lt;&lt;-
        • 它是通过打印功能发生的,所以您可能忘记打印了。要在函数中使用它并让函数捕获 .W,您需要将 .W 初始化为任何值(NULL 可以),然后将 print 方法的环境设置为函数内部的环境,如下所示(在答案):f &lt;- function(x) { .W &lt;- NULL; environment(print.weightfunct) &lt;- environment(); print(x); print(.W) }; f(result)
        猜你喜欢
        • 1970-01-01
        • 2014-01-07
        • 2020-09-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2015-11-23
        • 2021-06-06
        • 2012-04-28
        相关资源
        最近更新 更多