V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Findurway
V2EX  ›  问与答

求助统计学大神~

  •  
  •   Findurway · 2019-12-27 16:44:43 +08:00 · 2258 次点击
    这是一个创建于 1827 天前的主题,其中的信息可能已经有所发展或是发生改变。

    单位系统内部征文,领导找了多年前文章出来投稿,原始数据找不到了,需要给编一份。 已知样本数、平均值和标准差,求原始数据,哪位高手能给个 excel 公式?

    目前搜集到信息,湾湾某网站有大神做出来公式,但时间久远,网站不开放注册,下载不到。 附上网址: http://f.pil.tw/thread-48818-1-1.html 内容: [求助] 有"給平均值和標準差之後,隨機給予一群數字"的軟體嗎??

    如 aia 所說,平均數可以用平移法修正,其實標準差也可以用縮放法修正 大家別忘了,標準差的意義是距離平均值的離散程度 所以我們只要以平均值為中心對所有數據作縮放,就可以自由的操控標準差了。

    附件的 excel 檔是我試作出來的試算表,只要輸入樣本數、平均值及標準差就可以自動產生數據了,有興趣的人可以自行參考公式(有設保護,但沒設密碼) 原本只是覺得好玩,剛剛突然發現這個表格也可以用來掰數據唬爛客戶,真是不錯

    15 条回复    2019-12-28 00:03:58 +08:00
    gwy15
        1
    gwy15  
       2019-12-27 16:50:16 +08:00
    ……你自己稍微看看公式不就行了?

    随便生成一组随机数,调整平均值到 0,比例缩放调整标准差到你的要求,再加上平均值
    dbw9580
        2
    dbw9580  
       2019-12-27 16:51:11 +08:00 via Android
    需要知道是什么类型的分布,然后从平均值和标准差算出分布的参数
    NullErro
        3
    NullErro  
       2019-12-27 17:01:05 +08:00
    听我的,就算你是随便编的数,也没有人知道
    ipwx
        4
    ipwx  
       2019-12-27 17:02:57 +08:00
    你先确定一个分布族,然后根据平均值和标准差(即二阶矩)估一下分布族的参数,然后根据分布族来产生数据不就得了。标准做法,有啥神不神的。

    至于局限于使用 excel 公式,那是你自己找麻烦。
    RHxW
        5
    RHxW  
       2019-12-27 17:03:06 +08:00
    @NullErro
    hhhhhhhhhhhhhhhhhh
    gwy15
        6
    gwy15  
       2019-12-27 17:12:57 +08:00
    代码给你
    a = np.random.rand(N)
    a = avg + (a - a.mean()) * (std / (a - a.mean()).std())
    green15
        7
    green15  
       2019-12-27 17:28:11 +08:00 via iPhone   ❤️ 2
    额……经常逆( zao )推( jia )数据。
    确定随机分布类型,样本个数,标准差,均值;四个关键点就行了。像楼主这样默认正态分布就行了,真不难
    Findurway
        8
    Findurway  
    OP
       2019-12-27 18:35:14 +08:00 via iPhone
    @ipwx 本人小白,除了 excel 不会用其他软件啊,您说的这个分布族是用啥做的?
    Findurway
        9
    Findurway  
    OP
       2019-12-27 18:46:56 +08:00 via iPhone
    @green15 大哥,你用啥做的,样本数只有 8 个的话,反推的数据再次分析准确么?
    ipwx
        10
    ipwx  
       2019-12-27 19:34:20 +08:00 via Android
    @Findurway 随机分别不只有正态一种
    lithiumii
        11
    lithiumii  
       2019-12-27 19:53:08 +08:00
    import random
    import numpy as np

    # 假定你要搞的数据是
    样本数 = 50
    平均值 = 77.98
    标准差 = 10.344

    # 假定都是整数,另外有个取值范围
    取值范围 = (0, 100)

    # 随机一个看看
    数据 = [random.randint(取值范围[0], 取值范围[1]) for i in range(样本数)]

    # 准备一个函数判断随机结果对不对(回复会吞空格,缩进用下划线代替空格表示)
    def 符合条件(数据, 平均值 = 平均值, 标准差 = 标准差):
    ____实际均值 = np.mean(数据)
    ____实际标准差 = np.std(数据)
    ____if 实际均值 == 平均值 and 实际标准差 == 标准差:
    ________return True
    ____else:
    ________return False

    # 不断随机,直到数据符合条件
    while not 符合条件(数据):
    ____数据 = [random.randint(取值范围[0], 取值范围[1]) for i in range(样本数)]


    # 运气好的话,在天荒地老之前就可以得到符合条件的数据了!
    xiri
        12
    xiri  
       2019-12-27 20:01:14 +08:00 via Android
    先确定分布类型,然后按这个分布随机生成一组均值为 0 的数据,最后再根据需要的均值做偏移就行了
    yiqiok
        13
    yiqiok  
       2019-12-27 20:19:46 +08:00
    green15
        14
    green15  
       2019-12-27 21:12:31 +08:00 via iPhone
    @Findurway 看你领导要求,常用那几款统计软件都行,也可以外挂 excel 插件,不过简单的,用 minitab 就可以了。你这 8 个样本量太小,做抽样统计就无所谓准不准了→_→只能说一定程度满足分布。
    manhan9100
        15
    manhan9100  
       2019-12-28 00:03:58 +08:00 via iPhone
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:57 · PVG 05:57 · LAX 13:57 · JFK 16:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.