0

我正在尝试使用dgof来自 R 的模块,在 Python 3 中通过rpy2.

我在 python 中使用它:

# import rpy2's package module
import rpy2.robjects.packages as rpackages

# Import R's utility package
utils = rpackages.importr('utils')

# Select a mirror for R packages
utils.chooseCRANmirror(ind=1) # select the first mirror in the list

# R vector of strings
from rpy2.robjects.vectors import StrVector

# Install R package name: 'dgof' (discrete goodness-of-fit) is what we're interested in
if rpackages.isinstalled('dgof') is False:
    utils.install_packages(StrVector('dgof'))

# Import dgof
dgof = rpackages.importr('dgof')

很有魅力(即我可以导入它,这本身就是一个巨大的胜利)。现在作为测试,我想从 API 文档中重现示例结果。

为了清楚起见,在纯 R 中,示例是(并且要清楚,这个函数不是stats::ks.test(rep(1, 3), ecdf(1:3))native dgof):

ks.test(rep(1, 3), ecdf(1:3))

这导致 p 值0.07407(要验证这一点,请单击此链接中的绿色“运行此代码”按钮)。注意:

> ecdf(1:3)
Empirical CDF 
Call: ecdf(1:3)
 x[1:3] =      1,      2,      3
> rep(1,3)
[1] 1 1 1

在 Python 中,复制的示例是:

import numpy as np
a = np.array([1,1,1])
b = np.arange(1,4)
dgof.ks_test(a,b)

但在示例中,我找到的 p 值为0.517551. KS 统计量本身已正确计算。但是为什么模拟的 p 值不同呢?再次查看dgof链接中示例的输出,按一下Run this example,您将看到我所指的数字(上面转载)。

4

0 回答 0