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