尽管采用随机数据,拟合优度始终为零?

时间:2019-06-14 17:39:13

标签: python-3.x chi-squared

我正在尝试编写可生成随机数据并计算拟合优度的代码,但我不明白为什么卡方检验始终为零,我是否可以解决这个问题?为了尝试修复,我尝试使用不同的类型,以查看是否在初始输出中得到任何结果更改,还尝试将参数更改为所讨论的循环。

from scipy import stats
import math
import random
import numpy 
import scipy 
import numpy as np

def Linear_Chi2_Generate(observed_values = [], expected_values = []):
    #===============================================================#
    #            !!!!!!! Generation of Data  !!!!!!!!!!             #
    #===============================================================#

    for i in range(0,12):
        a = random.randint(-10,10)
        b = random.randint(-10,10)
        y = a * (b + i)
        observed_values.append(y)


    #######################################################################################
    #                               !!! Array Setup !!!!                                  #
    #              ***Had the Array types converted to floats before computing Chi2***    #
    #                                                                                     #
    #######################################################################################
    t_s = 0
    o_v = np.array(observed_values)
    e_v = np.array(expected_values)
    o_v_f = o_v.astype(float)
    e_v_f = o_v.astype(float)
    z_o_e_v_f = zip(o_v.astype(float), e_v.astype(float))

    ######################################################################################
    for i in z_o_e_v_f:
        t_s += [((o_v_f)-(e_v_f))]**2/(e_v_f) # Computs the Chi2 Stat !
    ######################################################################################
    print("Observed Values ", o_v_f)
    print("Expected Values" , e_v_f)
    df=len(o_v_f)-1
    print("Our goodness of fit for our linear function", stats.chi2.cdf(t_s,df))
    return t_s

Linear_Chi2_Generate()

1 个答案:

答案 0 :(得分:1)

在您的原始代码中,e_v_f = o_v.astype(float)使得o_v_fe_v_f都一样。 for循环中也存在一些问题。我已经编辑了一些代码。查看您要查找的内容:

from scipy import stats
import math
import random
import numpy
import scipy
import numpy as np

def Linear_Chi2_Generate(observed_values = [], expected_values = []):
    #===============================================================#
    #            !!!!!!! Generation of Data  !!!!!!!!!!             #
    #===============================================================#

    for i in range(0,12):
        a_o = random.randint(-10,10)
        b_o = random.randint(-10,10)
        y_o = a_o * (b_o + i)
        observed_values.append(y_o)

#        a_e = random.randint(-10,10)
#        b_e = random.randint(-10,10)
#        y_e = a_e * (b_e + i)
        expected_values.append(y_o + 5)


    #######################################################################################
    #                               !!! Array Setup !!!!                                  #
    #              ***Had the Array types converted to floats before computing Chi2***    #
    #                                                                                     #
    #######################################################################################
    t_s = 0
    o_v = np.array(observed_values)
    e_v = np.array(expected_values)
    o_v_f = o_v.astype(float)
    e_v_f = e_v.astype(float)
    z_o_e_v_f = zip(o_v.astype(float), e_v.astype(float))

    ######################################################################################
    for o, e in z_o_e_v_f:
        t_s += (o - e) **2 / e  # Computs the Chi2 Stat !
    ######################################################################################
    print("Observed Values ", o_v_f)
    print("Expected Values" , e_v_f)
    df=len(o_v_f)-1
    print("Our goodness of fit for our linear function", stats.chi2.cdf(t_s,df))
    return t_s

Linear_Chi2_Generate()