【问题标题】:achieved convergence tolerance (and other outputs) from nls从 nls 实现收敛容差(和其他输出)
【发布时间】:2016-01-25 18:16:06
【问题描述】:

所以,我使用 nls() 在 R 中进行非线性回归。

我现在有一些代码可以为我完成它并且我得到了正确的输出(呸!)。 我可以使用

这是我运行 summary(Power.model) 时得到的结果

Formula: Power.mean ~ a + (b * (Power.rep^-c))

Parameters:
  Estimate Std. Error t value Pr(>|t|)    
a 1240.197      4.075 304.358   <2e-16 ***
b   10.400     14.550   0.715    0.490    
c    6.829    230.336   0.030    0.977    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 13.97 on 11 degrees of freedom

Number of iterations to convergence: 17 
Achieved convergence tolerance: 4.011e-06

我可以获得估计值并计算残差平方和,但我真的很想存储 std.error、t 值、残差 std 误差、迭代次数和(最重要的是)实现的收敛容差桌子也是。

我知道我可以使用 capture.output(summary(Power.model)) 来捕获这些,但我最终会得到一堆字符串。我真正想要的是只捕获数字(理想情况下是数字),而不需要(a)所有额外内容(例如,字符串“实现收敛容差:”)和(b)而不必将字符串转换为常规(单个/ double) 数字(例如,将 4.011e-06 转换为 0.000004011)。

我似乎找不到可以在我的 nls 输出上运行的所有函数的列表。到目前为止,我发现的只有 coeff() 和 resid()。一个列表将是理想的,但对于访问摘要中的数据而不诉诸于 capture.output() 以及不可避免地遵循的字符串编辑/转换的任何其他建议将非常感激。

【问题讨论】:

    标签: r nls


    【解决方案1】:

    coef(summary(Power.model)) 将给出一个包含其中一些项目的矩阵,Power.model$convInfo 将给出一个列表,其组件包含其他这些项目。残差平方和可以使用deviance(Power.model)得到。

    methods(class = "nls") 将给出作用于"nls" 对象的函数列表,str(Power.model)str(summary(Power.model)) 将显示"nls""summary.nls" 对象的内部组件。

    例如使用内置的BOD数据框:

    > fm <- nls(demand ~ a + b * Time, BOD, start = list(a = 1, b = 1))
    > coef(summary(fm))
      Estimate Std. Error  t value   Pr(>|t|)
    a 8.521429  2.6589490 3.204811 0.03275033
    b 1.721429  0.6386589 2.695380 0.05435392
    > fm$convInfo
    $isConv
    [1] TRUE
    
    $finIter
    [1] 1
    
    $finTol
    [1] 3.966571e-09
    
    $stopCode
    [1] 0
    
    $stopMessage
    [1] "converged"
    
    > deviance(fm)
    [1] 38.06929
    
    > sum(resid(fm)^2) # same
    [1] 38.06929
    

    您可能还对 broom 包感兴趣,它将提供nls 输出的数据框表示,如下所示:

    > library(broom)
    > tidy(fm)
      term estimate std.error statistic    p.value
    1    a 8.521429 2.6589490  3.204811 0.03275033
    2    b 1.721429 0.6386589  2.695380 0.05435392
    
    > glance(fm)
         sigma isConv       finTol    logLik      AIC      BIC deviance df.residual
    1 3.085016   TRUE 3.966571e-09 -14.05658 34.11315 33.48843 38.06929           4
    

    【讨论】:

      【解决方案2】:

      使用names(Power.model),它将返回对象的名称,您也可以使用names(Power.model$...),加上... Power.model 的名称之一。 例如,Power.model$convInfo$finTol 返回实现的收敛容差。

      如果您使用的是 RStudio,您可以单击 Environment 窗口中 Power.model 附近的箭头,它将显示 Power.model 的所有名称及其值,以便您选择正确的名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2016-07-10
        相关资源
        最近更新 更多