【问题标题】:Excel how to find real random data set from mean and standard deviation?Excel如何从均值和标准差中找到真正的随机数据集?
【发布时间】:2015-06-03 01:47:01
【问题描述】:

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

在 Excel 中,我可以右键单击“查看代码”并访问宏以使用宏编码,但我将如何进行编码呢?

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

这是我根据均值和标准偏差生成的随机数据,然后我将使用这些数据来找到均值和标准偏差,如果均值和标准偏差不代表我想要的值,那么重做直到它正确为止,那又如何我需要添加代码以使其重做?

【问题讨论】:

  • 一般情况下,您不能仅根据标准差和均值对 10 个数据点进行逆向工程。
  • 我知道如何在 JAVA 等其他编程中做到这一点,但在 excel 中我不知道,在 java 中可以使用随机生成数据,直到它满足正确的平均值和标准开发......然后接受

标签: excel random mean


【解决方案1】:

没有 VBA:

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

的值

A1A20输入:

=RAND()

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

=A1*0.005/STDEVP(A:A)

并通过 B20 向下复制。 B 列中的值将具有所需的 std-dev。

C1中输入:

=B1+7-AVERAGE(B:B)

并通过 C20 向下复制。

C 将具有正确的 std-dev 和正确的均值:

使用 VBA:

执行完全相同的技术,但使用数组而不是单元格列。为 Poisson、LogNormal 等分布生成样本数据同样容易。这是一些将 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

【讨论】:

    最近更新 更多