python中的无偏方差估计(n1)模拟失败

2024-05-28 20:58:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着写一个小程序来模拟Python3中随机数的采样。但这似乎与我的意图背道而驰。我做错什么了?一定很简单,但我不明白。你知道吗

import random
import statistics
import math

pcounter = 0
counter = 0
for loop in range(1000):
    l = []
    for x in range(500):
        l.append(random.randint(1,1000))

    m = statistics.mean(l)
    v = list(l)
    v[:] = [(x-m)**2 for x in v]
    realvariance = sum(v)/len(v)
    #print("Real Variance: " + str( sum(v)/len(v)))
    #print("Real Mean: " + str(m))


    sample = random.sample(l, 10)
    v = list(sample)
    #print(v)
    v[:] = [(x-m)**2 for x in v]
    samplem = statistics.mean(sample)
    samplebiasedvariance = sum(v)/len(v)
    samplevariance = sum(v)/(len(v)-1)

    print(samplebiasedvariance)
    print(samplevariance)
    print(realvariance)
    print((samplebiasedvariance - realvariance)**2 < (samplevariance - realvariance)**2)
    if (samplebiasedvariance - realvariance)**2 < (samplevariance - realvariance)**2:
        pcounter = pcounter + 1     
        print("biased Variance wins: " + str(pcounter))

    else:
        counter = counter + 1
        print("Variance wins: " + str(counter))

print("biased Variance wins: " + str(pcounter))
print("Variance wins: " + str(counter))

这将导致:

biased Variance wins: 563
Variance wins: 437

但应该是相反的:我希望有偏方差比用(n-1)计算的无偏方差更差。因此,它应该更接近真实的总体方差(realvariance),而不是有偏差的方差。你知道吗


Tags: sampleinimportforlencountersumprint
1条回答
网友
1楼 · 发布于 2024-05-28 20:58:27

“偏见”是一个误导性的术语,它暗示了数学公式中的某种道德问题。你知道吗

你看到的基本上是两个方差估计的均方误差。结果表明,无偏样本方差比通常的有偏样本方差具有更大的均方误差,而通常的有偏样本方差又比用1/(n+1)而不是1/n或1/(n-1)计算的样本方差具有更大的均方误差。你知道吗

如果我理解正确,如果你把1/(n+1)估计放进你的程序,你会发现它比其他两个更接近实际值。你知道吗

维基百科页面上的variance在“总体方差和样本方差”标题下讨论了这个主题。毫无疑问,还有许多其他资源。你知道吗

相关问题 更多 >

    热门问题