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
的值
在 A1 到 A20 中输入:
=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
在 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
的值在 A1 到 A20 中输入:
=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