Excel 如何从均值和标准差中找到真正的随机数据集?

Excel how to find real random data set from mean and standard deviation?

在 Excel 中,很容易找到给定 10 个单个数据点的均值和标准差。但是,在给定均值和标准差的情况下,是否可以在 Excel 中生成 10 个随机数据点?

在 Excel 中,我可以右键单击 "View Code" 并访问宏以使用宏编码,但我将如何编码呢?​​

Sub rand()
  Range("B4").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B4").Calculate
  Range("B4").Value = Range("B4").Value
  Range("B5").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B5").Calculate
  Range("B5").Value = Range("B5").Value
  Range("B6").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B6").Calculate
  Range("B6").Value = Range("B6").Value
  Range("B7").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B7").Calculate
  Range("B7").Value = Range("B7").Value
  Range("B8").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B8").Calculate
  Range("B8").Value = Range("B8").Value
  Range("B9").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B9").Calculate
  Range("B9").Value = Range("B9").Value
  Range("B10").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B10").Calculate
  Range("B10").Value = Range("B10").Value
  Range("B11").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B11").Calculate
  Range("B11").Value = Range("B11").Value
  Range("B12").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B12").Calculate
  Range("B12").Value = Range("B12").Value
  Range("B13").Formula = "=NORMINV(RAND(),$B,$B)"
  Range("B13").Calculate
  Range("B13").Value = Range("B13").Value
End Sub

这是我根据均值和标准差生成的随机数据,然后我将使用此数据来查找均值和标准差,如果均值和标准差不是我想要的值,则重做直到正确为止,那么我需要添加什么代码才能重做?

没有VBA:

假设我们想要一组平均值为 7 且标准差为 .005

的值

A1A20 中输入:

=RAND()

这是我们必须转换以满足我们要求的数据。在 B1 中输入:

=A1*0.005/STDEVP(A:A)

并通过 B20 向下复制。 B 列中的值将具有所需的标准偏差。

C1中输入:

=B1+7-AVERAGE(B:B)

并通过 C20.

向下复制

C 将具有正确的标准偏差和正确的均值:

与VBA:

执行完全相同的技术,但使用数组而不是单元格列。生成泊松分布、对数正态分布等分布的样本数据同样容易。这是一些将 20 个值放入 G 列的简单代码:

Sub ForcedDistribution()
    Dim ary(1 To 20) As Double
    Dim bry(1 To 20) As Double
    Dim cry(1 To 20) As Double
    Dim mean As Double, std As Double
    Dim i As Long, wf As WorksheetFunction
    Set wf = Application.WorksheetFunction

    Randomize
    mean = 7#
    std = 0.005

    For i = 1 To 20
        ary(i) = Rnd
    Next i

    For i = 1 To 20
        bry(i) = ary(i) * std / wf.StDevP(ary)
    Next i

    For i = 1 To 20
        cry(i) = bry(i) - wf.Average(bry) + mean
    Next i

    For i = 1 To 20
        Cells(i, 7).Value = cry(i)
    Next i
End Sub