Excel如何从均值和标准差中find真正的随机数据集?
在Excel中,很容易find10个单一数据点的均值和标准差。 但是,如果给出了平均值和标准偏差,是否可以在Excel中生成10个随机数据点?
在Excel中,我可以右键单击“查看代码”,并访问macros使用macros编码,但我怎么去编码呢?
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
这是我的随机数据生成基于平均值和标准开发,然后我会用这个数据来find平均值和标准开发,如果平均值和标准开发并不意味着我想要的价值,然后重做,直到它正确,所以我需要什么代码添加到重做?
没有VBA:
假设我们需要一组平均值为7的值和一个0.005的std-dev值
在A1到A20中input:
=RAND()
这是我们必须改变以符合我们要求的数据。 在B1中input:
=A1*0.005/STDEVP(A:A)
并通过B20复制下来。 B列中的值将具有所需的std-dev。
在C1中input:
=B1+7-AVERAGE(B:B)
并通过C20复制。
C列将具有正确的std-dev和正确的意思:
用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