Python 为卡方检验平滑模拟数据

Python 为卡方检验平滑模拟数据,python,statistics,precision,smoothing,graphing,Python,Statistics,Precision,Smoothing,Graphing,当我被困在家里的时候,我试着教我的学生有关卡方的知识。我制作了一个视频,它应该是最有帮助的,但是我在制作具有卡方分布特定属性的图形时遇到了困难。形状是正确的,但是有很多噪音。这是模拟数据,所以它永远不会是完全平滑的,但是这有点太多了 我一直在努力平滑数据。我甚至将数据四舍五入到最接近的十分之一,并进行移动平均(k=3),以获得如下所示的图形: 在处理这个问题时,我注意到了一些事情。首先,高峰和低谷似乎发生在可预测的位置。第二,如果没有舍入,曲线图似乎会有规律地在尖峰和低谷之间来回交替。我认为

当我被困在家里的时候,我试着教我的学生有关卡方的知识。我制作了一个视频,它应该是最有帮助的,但是我在制作具有卡方分布特定属性的图形时遇到了困难。形状是正确的,但是有很多噪音。这是模拟数据,所以它永远不会是完全平滑的,但是这有点太多了

我一直在努力平滑数据。我甚至将数据四舍五入到最接近的十分之一,并进行移动平均(k=3),以获得如下所示的图形:

在处理这个问题时,我注意到了一些事情。首先,高峰和低谷似乎发生在可预测的位置。第二,如果没有舍入,曲线图似乎会有规律地在尖峰和低谷之间来回交替。我认为这可能是由于某种二进制精度问题。我试图通过切换到使用numpy进行操作并强制数据浮动来解释这一点。这没有效果

我想知道的是:

  • 如果这个问题是由二进制精度引起的,我怎样才能适当地缓解这个问题
  • 如果不能用这种方法解决这个问题,有没有更好的平滑操作可以使用
  • 谢谢你的帮助。代码如下

    # Draw n samples of 25 and get Chi-Square list
    chiSqrList = []
    
    n = 100000
    sampleSize = 100
    
    j = 0
    
    while j < n:
    
    
    redTotal = 0
    greenTotal = 0
    yellowTotal = 0
    blueTotal = 0
    
    i = 0
    
    while i < sampleSize:
        x = random.random()
        if x < redLim:
            redTotal += 1
        elif x < greenLim:
            greenTotal += 1
        elif x < yellowLim:
            yellowTotal +=1
        else:
            blueTotal += 1
    
        i += 1
    
    observedBalls = np.array([redTotal, greenTotal, yellowTotal, blueTotal], dtype=np.float64)
    expectedBalls = np.array([sampleSize*redBalls, sampleSize*greenBalls, sampleSize*yellowBalls, sampleSize*blueBalls], dtype=np.float64)
    
    
    chiSqr = 0
    
    
    chiSqr = np.power((observedBalls - expectedBalls), 2)/expectedBalls
    chiSqr = np.sum(chiSqr)
    
    chiSqr = round(chiSqr, 1)
    
    chiSqrList.append(chiSqr)
    
    j += 1
    
    # Make count data
    
    avgSqrDist = []
    count = []
    
    i = 0
    
    for value in chiSqrList:
        if len(avgSqrDist) == 0:
            avgSqrDist.append(value)
            count.append(1)
        elif avgSqrDist[i] != value:
            avgSqrDist.append(value)
            count.append(1)
            i += 1
        else:
            count[i] += 1
    
    # Smooth curve
    
    i = 0
    smoothAvgSqrDist = []
    smoothCount = []
    
    while i < len(avgSqrDist)-2:
        smoothCount.append((count[i]+count[i+1]+count[i+2])/3)
        smoothAvgSqrDist.append(avgSqrDist[i+1])
        i += 1
    
    #从25个样本中抽取n个样本,得到卡方列表
    chiSqrList=[]
    n=100000
    样本大小=100
    j=0
    而j
    您的代码不可执行。例如,请在开始时查看您的while循环。我认为,您可能希望将此问题带到stats.stackexchange.com,因为它实际上更多地是关于问题的属性。这就是说,也许你可以通过构造一个bin width=1的直方图来得到一个更可行的表示,比如说,你的代码是不可执行的。例如,请在开始时查看您的while循环。我认为,您可能希望将此问题带到stats.stackexchange.com,因为它实际上更多地是关于问题的属性。这就是说,也许你可以通过构造一个宽度为1的柱状图得到一个更可行的表示。