已知均值、标准差和样本个数如何模拟一组数据?

已知均值、标准差和样本个数如何模拟一组数据?

朋友要模拟这种数据,她自己查了一个r语言函数rnorm,不懂代码让我帮他模拟一下,我运行完之后发现生成的并不是完全按要求指定均值和标准差的数组,所以我又自己找了一个python代码。在原博主的代码上又改了一下。可以肯定的是我看到的网站是用爬虫在Stack Overflow上爬下来机翻成中文发布的,原Stack Overflow网址:https://stackoverflow.com/questions/51515423/generate-sample-data-with-an-exact-mean-and-standard-deviation

他的做法是:先生成一些具有所需标准偏差的虚假的零均值样本(此时只是接近0但是并不为0)。然后样本数组所有数减去样本均值,使其变成真正为零均值数组。然后缩放样本,使标准偏差准确无误,然后添加所需的平均值。这样就得到了最终所需要的模拟出的数据组。

和原回答不同的是,原回答使用的标准差计算法是np.std(samples),也就是整体标准差。
公式:
在这里插入图片描述

然而我们一般需要的是样本标准差,
公式:
在这里插入图片描述
所以我改成了np.std(samples,ddof=1),这样就可以指定为样本标准差。最终能够得到精确结果。

import numpy as np

num_samples = 3
desired_mean = 0.571
desired_std_dev = 0.045

samples = np.random.normal(loc=0.0, scale=desired_std_dev, size=num_samples)

actual_mean = np.mean(samples)
actual_std = np.std(samples,ddof=1)
print("Initial samples stats   : mean = {:.4f} stdv = {:.4f}".format(actual_mean, actual_std))

zero_mean_samples = samples - (actual_mean)

zero_mean_mean = np.mean(zero_mean_samples)
zero_mean_std = np.std(zero_mean_samples,ddof=1)
print("True zero samples stats : mean = {:.4f} stdv = {:.4f}".format(zero_mean_mean, zero_mean_std))

scaled_samples = zero_mean_samples * (desired_std_dev/zero_mean_std)
scaled_mean = np.mean(scaled_samples)
scaled_std = np.std(scaled_samples,ddof=1)
print("Scaled samples stats    : mean = {:.4f} stdv = {:.4f}".format(scaled_mean, scaled_std))

final_samples = scaled_samples + desired_mean
final_mean = np.mean(final_samples)
final_std = np.std(final_samples,ddof=1)
print("Final samples stats     : mean = {:.4f} stdv = {:.4f}".format(final_mean, final_std))

print(final_samples)
print(np.mean(final_samples))
print(np.std(final_samples,ddof=1))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值