当前位置: 首页 > 知识库问答 >
问题:

从R中具有精确均值和sd的截断正态分布生成数据

方宏富
2023-03-14
    mean <- 100
    sd <- 5
    lower <- 40
    upper <- 120
    n <- 100   

    library(msm)    
    data <- as.numeric(mean+sd*scale(rtnorm(n, lower=40, upper=120)))

共有1个答案

郝玄天
2023-03-14

您可以使用迭代的答案。这里,我一个接一个地将样本添加到向量中,但前提是得到的缩放数据集保持在您设置的边界内。它需要更长的时间,但它有效:

n <- 10000
mean <- 100
sd <- 15
lower <- 40
upper <- 120

data <- rtnorm(1, lower=((lower - mean)/sd), upper=((upper - mean)/sd))
while (length(data) < n) {
  sample <- rtnorm(1, lower=((lower - mean)/sd), upper=((upper - mean)/sd))
  data_copy = c(data, sample)
  data_copy_scaled = mean + sd * scale(data_copy)
  if (min(data_copy_scaled) >= lower & max(data_copy_scaled) <= upper) {
    data = c(data, sample)
  }
}

scaled_data = as.numeric(mean + sd * scale(data))

summary(scaled_data)

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  40.38   91.61  104.35  100.00  111.28  120.00

sd(scaled_data)

15

在我以前的答案下面,这不太奏效

用您想要的平均值和sd来缩放RTNorm的下限和上限怎么样?

n <- 1000000
mean <- 100
sd <- 5

library(msm)

data <- as.numeric(mean+sd*scale(rtnorm(n, lower=((40 - mean)/sd), upper=((120 - mean)/sd))))

summary(data)

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  76.91   96.63  100.00  100.00  103.37  120.00 

sd(data)

5
 类似资料:
  • 如果正确,则当 Z来自mu'=0,sigma'=1的标准正态分布Z时,我的y将从对数正态分布中提取。 最后,如果 y=exp^(ln((mean^2)/(sqrt(variance+mean^2))+sqrt(ln(1+(variance)/(mean^2)))*Z),y来自具有均值和方差的对数正态分布是否正确? 我的SAS代码是: 参考资料: Rick Wicklin的函数:http://blo

  • 我试着增加平局的数量--仍然导致sd在96左右。

  • 我想生成一个均值为120,标准差为20的正态分布。但是我需要将这些值限制在[0,150]。我该怎么办?

  • 从平均值0.5和标准差0.1的正态分布中得出伪随机数。 既然如此,下面的Matlab代码是否等价于从一个在0处截断的正态分布在1处进行采样?

  • 在随机收集来自独立来源的数据中,通常观察到数据的分布是正常的。 这意味着,在绘制水平轴上的变量的值和垂直轴中的值的计数时,我们得到一个钟形曲线。 曲线的中心代表数据集的平均值。 在图中,百分之五十的值位于平均值的左侧,另外五十分之一位于图的右侧。 统称为正态分布。 R有四个内置函数来生成正态分布。它们在下面描述 - 以下是上述函数中使用的参数的描述 - x - 是数字的向量。 p - 是概率向量。

  • 我想生成一个截断的正态分布,其中任何一个R中都有已知的参数。注意,我不是在寻找伪随机数生成器。 假设I有一个均值为5,标准差为1的正态分布。我能画出一个截断正态分布的值吗,在点1和点10截断?