首页 > 解决方案 > 如何从 EcosimR 输出的摘要中提取 SES

问题描述

我正在尝试从摘要函数的输出中自动提取标准化效应大小,以便我可以自动绘制下游。

具体来说,我正在总结输出,cooc_null_model(x=co-occurrence_data)我想输出“标准化效果大小 (SES)”,这是打印结果中的最终值。

我该怎么做呢?

帮助部分的示例代码:

library(EcoSimR)

## Run the null model 
finchMod <- cooc_null_model(dataWiFinches, algo = "sim9", nReps = 10000, burn_in = 500)

## Summary and plot info 
summary(finchMod)

我希望它会是这样的:finchMod$Standardized_Effect_Size但我似乎无法通过这些方式找到目标值。

任何和所有的帮助表示赞赏!

标签: r

解决方案


这是我为找出您感兴趣的统计数据 SES 所做的工作的说明。

第一步:

运行模型并检查

class(finchMod)
#[1] "coocnullmod"

str(finchMod)
#List of 13
# $ Obs            : num 3.79
# $ Sim            : num [1:10000] 2.59 2.59 2.59 2.59 2.6 ...
# $ Elapsed.Time   : chr "1.7 secs"
# $ Time.Stamp     : chr "Fri Jun 22 18:35:52 2018"
# $ Metric         : chr "c_score"
# $ Algorithm      : chr "sim9"
# $ N.Reps         : num 10000
# $ SaveSeed       : logi FALSE
# $ RandomSeed     : NULL
# $ Randomized.Data: num [1:17, 1:19] 0 0 0 0 0 0 0 1 0 1 ...
#  ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr [1:19] "Cuba" "Hispaniola" "Jamaica" "Puerto_Rico" #...
# $ Data           : num [1:17, 1:19] 0 0 0 0 1 0 0 0 0 1 ...
#  ..- attr(*, "dimnames")=List of 2
#  .. ..$ : NULL
#  .. ..$ : chr [1:19] "Cuba" "Hispaniola" "Jamaica" "Puerto_Rico" #...
# $ burn.in        : num 500
# $ burn.in.metric : num [1:500] 3.68 3.68 3.65 3.65 3.65 ...
# - attr(*, "class")= chr "coocnullmod"

如您所见,没有 SES。这意味着它的值是由方法summary.coocnullmod或该方法调用的某个函数计算的。例如,参见R FAQ 8.1

第二步:

检查代码summary.coocnullmod。在 R 提示符下,不带括号的函数名称将打印其主体。

summary.coocnullmod
Error: object 'summary.coocnullmod' not found

所以使用getAnywhere.

getAnywhere(summary.coocnullmod)
A single object matching ‘summary.coocnullmod’ was found
It was found in the following places
  registered S3 method for summary from namespace EcoSimR
  namespace:EcoSimR
with value

function (object, ...) 
{
   nullmodObj <- object

   [...etc...]
   [...last code line...]

    cat("Standardized Effect Size (SES): ", format((nullmodObj$Obs - 
        mean(nullmodObj$Sim))/sd(nullmodObj$Sim), digits = 5), 
        "\n")
}
<environment: namespace:EcoSimR>

第三步:

因此,现在您拥有了自动计算 SES 所需的一切。

ses <- function(object){
  (object$Obs - mean(object$Sim))/sd(object$Sim)
}

ses(finchMod)
#[1] 5.69756

推荐阅读