【问题标题】:Where can I find the limiting distribution of the Kolmogorov-Smirnov distance in R?我在哪里可以找到 R 中 Kolmogorov-Smirnov 距离的极限分布?
【发布时间】:2014-09-02 01:51:48
【问题描述】:

在进行重要性抽样实验时,我模拟了 Kolmogorov-Smirnov 距离的值

$$ D_n = \max_x |\hat{F}_n(x)-F(x)| $$

其中 $n$ 是原始重要性样本的大小,我想将这些值与 the asymptotic distribution of the Kolmogorov-Smirnov testKolmogorov distribution 进行比较,即

$$ \sqrt{N} D_n \longrightarrow \sup_{t\in[0,1]}|B(t)| $$

其中 $B$ 是布朗桥。

由于ks.test 依赖于这种渐近分布,它的 cdf 已经存在于 R 中的某个地方,我想知道如何访问它。 R 函数ks.test 包含指令

PVAL <- 1 - if (alternative == "two.sided") 
                .Call(C_pKolmogorov2x, STATISTIC, n)

但我自己拨打C_pKolmogorov2x 不起作用。

【问题讨论】:

  • 在我看来,kolmim 包中的函数pkolmpKolmogorov2x 提供了一个包装器。
  • 确实,这解决了我的问题!谢谢。
  • 不客气。不能直接调用 C-Function 似乎很奇怪。只是用谷歌搜索了一下,但没有找到关于如何直接访问pKolmogorov2x 的解决方案。
  • 确实很奇怪。如果我完全按照包中的方式重新定义pkolm,它不会识别pKolmogorov2x...
  • 好的,知道了!尝试以下操作,例如:.Call(stats:::C_pKolmogorov2x, STATISTIC = 0.04, n = 200),这对我来说产生了 0.1067137 美元。

标签: r


【解决方案1】:

“编写 R 扩展”manual 的相关摘录

然后,NAMESPACE 文件中的指令

useDynLib(myDLL, .registration = TRUE)

导致加载 DLL 以及 R 变量 foo、bar_sym、 R_call_sym 和 R_version_sym 被定义在包的命名空间中。

翻译成人类语言,这意味着(大致)所有非 R 代码的默认位置都在包命名空间中。因此需要三重结肠。

因此,如果您在代码中找到.Call(something,args),您可以通过.Call(package:::something,args) 从命令行调用它。这就是为什么对C_pKolmogorovx 的简单调用不起作用的原因。 R 没有找到它,因为包命名空间是为包而不是用户设计的。

如果您想找出外部代码所在的位置,您需要查看 2 个文件。首先查看包的NAMESPACE,看看useDynLib 是否用于注册外部代码功能,然后查看src/init.c 文件,其中注册了包中所有可用的外部代码功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多