Matlab in Python

Good time of day.

Please help me with the code in Pyton. I have the value of statistical and result should match, but it turns out the following statistic =2.14, result = 0.0214. Maybe I'm not passing the correct data to the scipy.stats.chisquare function.

MatLab

clc; % очищает окно команд
clear;% удаление элементов из рабочей области, очистка системной памяти 

%задаётся шаг
interval = 0.13;
%задаётся половинный интервал
centers = 0.065 : interval : 0.845;
%количество попаданий в интервал
counts = [6, 13, 14, 23, 19, 14, 11];
%считается сумма попаданий
sumCounts = sum(counts);
%вероятность попадания в интервал
probability = counts./sumCounts;
%строется гистограмма
bar(centers, probability./interval, 1, 'r');
hold on;
%считается ма ожидание
m = sum(centers.*probability);
%считается дисперсия
d = sum(((centers - m).^2).*probability);
%для бэта распределения вычисляется альфа и бетта
a = m*(m*(1-m)/d-1);
b = a*(1-m)/m;
%вычисление точек по закону бета
betaPlot = betapdf(centers, a, b);

centers_1 = 0.065:0.01:0.845; % новые значения по оси x (с постоянным и частым шагом)
betaPlot_1 = interp1(centers,betaPlot,centers_1,'pchip'); % получение новых значений при интерполяции
myPlot = plot(centers_1, betaPlot_1, 'k');%строим новый график после интерполяции
myPlot.LineWidth = 2;

%проверка гипотезы методом К.Пирсона
alpha = 0.025;%уровень значимости согласно варианту
%вероятность попадания СВ в заданный интервал
P = betacdf(centers+interval./2, a, b) - betacdf(centers-interval./2, a, b);
%Вычисляется наблюдаемое значение показателя согласованности гипотезы
statistic = sum(((counts-sumCounts.*P).^2)./(sumCounts.*P));
kritikal_value = chi2inv(1-alpha, 7-2-1);%Критическая граница

%проверяем гипотезу Ho
if statistic <kritikal_value
   disp('Гипотеза принимается'); 
else
   disp('Гипотеза отклоняется');
end

Python

import scipy
import numpy as np
import pylab as py
import math
from scipy.stats import chi2
from scipy.stats import beta

interval = 0.13;
centers = np.arange(0.065,0.975,interval);
counts = [6, 13, 14, 23, 19, 14, 11];
sumCounts = sum(counts);


probability = [];
for i in counts:
    probability.append(i/sumCounts);
#мат ожидание
cp =[];
for i  in range(0,len(centers)):    
    cp.append(centers[i]*probability[i]);

mat_ozhidaniye = sum(cp);

#дисперсия
cm =[]
for i in centers:
    cm.append((i-mat_ozhidaniye)**2);

cpr = []
for i in range(len(cm)):
    cpr.append(cm[i]*probability[i]);

d = sum(cpr);

#критерии для beta распределения 
a = (mat_ozhidaniye)*((mat_ozhidaniye*(1-mat_ozhidaniye))/d-1);
b = (a*(1-mat_ozhidaniye))/mat_ozhidaniye;
betaPlot = scipy.stats.beta.pdf(centers, a, b);

#проверка гипотех методом К.Пирсона
alpha = 0.025;

#вероятность попадания СВ в заданный интервал
cint = []
for i in centers:
    cint.append(i+interval/2);

cmint = []
for i in centers:
    cmint.append(i-interval/2);

P = scipy.stats.beta.cdf(cint, a, b) - scipy.stats.beta.cdf(cmint, a, b);

#Вычисляется наблюдаемое значение показателя согласованности гипотезы
cs = []
for i in range(len(counts)):
    cs.append(counts[i]-(sumCounts*P[i]));

csq = []
for i in cs:
    csq.append(i**2);

csqscp =[]
for i in range(len(csq)):
    csqscp.append(csq[i]/(sumCounts*P[i]));

u = sum(csqscp);

print ("statistic = ",u);

result = scipy.stats.chisquare(probability,P,ddof = 4);
print(result.statistic)

Author: Alex, 2020-12-25