Дискретное тестирование Колмогорова-Смирнова: получение неверного значения при использовании rpy2 по сравнению с чистым R

Я пытаюсь использовать 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)) но родной dgof):

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

что приводит к р-значению 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)

Но в этом примере р-значение, которое я нахожу, 0.517551, Сама KS-статистика рассчитана правильно. Но почему моделируемое значение p отличается? Снова, чтобы увидеть выход dgof пример в ссылке, нажмите Run this example и вы увидите числа, на которые я ссылаюсь (воспроизведенные выше).

0 ответов

Другие вопросы по тегам