1

如果我在 R 中运行 semPLS 包的 bootsempls() 函数,我会得到一个“bootsempls”类的对象,“boot”,让我们将对象命名为“mymodel_boot”。

如果我跑

>mymodel_boot

         Estimate      Bias Std.Error Lower Upper
lam_1_1     0.923 -0.000188   0.01400 0.892 0.946
lam_1_2     0.918 -0.000971   0.01778 0.876 0.945
lam_2_1     0.860 -0.001325   0.02647 0.799 0.903
lam_2_2     0.897  0.000579   0.01604 0.864 0.926
lam_2_3     0.799 -0.000253   0.03476 0.723 0.859
lam_3_1     0.793 -0.003462   0.06742 0.636 0.897
lam_3_2     0.942  0.001877   0.00892 0.927 0.963
beta_1_3    0.429  0.003359   0.07722 0.280 0.579
beta_2_3    0.294 -0.000880   0.07339 0.147 0.435

我得到了上面的表格。

为了计算 t 值,我现在想将原始系数除以相应的标准误差。

原始系数可以通过

> mymodel_boot$t0
[1] 0.9227120 0.9180390 0.8599884 0.8973823 0.7993398 0.7927142 0.9424423 0.4292315 0.2941801

有没有办法像这样针对 Std.Error ,它打印在前面的代码块中,所以我可以将它们除以得到一个 t 值向量?

我已阅读 bootsempls 的帮助页面,但找不到仅返回 Std.Err 的组件,现在我很困惑,因为我认为这是估计 t 值的常用程序,没有比复制更聪明的方法了从控制台粘贴每个 Std.Err?我不敢相信。

如果 Std.Err 无法通过 $ 运算符定位,有什么方法可以将控制台输出中的 Std.Err 列转换为向量?

4

1 回答 1

2

好问题。通常的方法是使用attributesandstr以便在未知类中找到此类属性(我想这就是您找到的方式t0?),但这对我来说没有任何结果。所以我决定检查打印方法。快速浏览

methods(print)

给我看了print.bootsempls*

下一步是:

getAnywhere(print.bootsempls)

结果是:

A single object matching ‘print.bootsempls’ was found
It was found in the following places
  registered S3 method for print from namespace semPLS
  namespace:semPLS
with value

function (x, digits = 3, ...) 
{
    t <- x$t
    t0 <- x$t0
    result <- data.frame(Estimate = t0, Bias = colMeans(t, ...) - 
        t0, Std.Error = apply(t, 2, sd, ...))
    rownames(result) <- attr(t, "path")
    cat("Call: ")
    dput(x$call)
    cat("\n")
    print(result, digits = digits, ...)
    invisible(x)
}
<environment: namespace:semPLS>

从而解开了谜团。所以显然 print 方法计算 SE 并且它没有存储在任何地方。为了复制您显示的输出并将其存储为data.frmae对象(以及计算 SE),您只需执行以下操作:

t <- mymodel_boot$t
t0 <- mymodel_boot$t0
result <- data.frame(Estimate = t0, 
                     Bias = colMeans(t) - t0,
                     Std.Error = apply(t, 2, sd))
于 2014-12-24T19:25:33.213 回答