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

Я пытаюсь использовать модуль 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))

, что приводит к значению 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, и вы увидите числа, на которые я ссылаюсь (воспроизведено выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...