需要根据汇总函数的结果生成R中随机分布的数据

  • 本文关键字:随机 数据 分布 结果 函数 r
  • 更新时间 :
  • 英文 :


我正在为一个耗时很长的研究项目模拟数据。我想用我的数据进行一些实验,然而,我没有足够的模拟数据来实现这一点。我想用正态分布的随机数据来补充我模拟的数据。

到目前为止,我有一个看起来像这样的数据帧:

Training_Data<-data.frame(A=runif(5(,B=runif(4(,C=runif,D=runif(5((

然后我对这个数据帧进行了汇总统计,如下所示:

Training_Data_Sum<-作为.data.frame(应用(Training_data[1:4],摘要(

我有每列数据的最小值、最大值、平均值、STD、中值等。

现在,我想做的是编写一个函数,该函数将使用Training_data数据帧中的5行数据,并使用从Training_data帧的汇总统计中获得的最小值、最大值、平均值和STD值将其扩展为50行正态分布数据。

我假设我需要使用rtruncnorm函数,如下所示:

Training_Data_50A<-rtruncnorm(n=50,A_min,A_max,A_mean,A_std(
Training_Data_50B<-rtruncnorm(n=50,B_min,B_max,B_mean,B_std(
Training_Data_50C<-rtruncnorm(n=50,C_max=,C_mean,C_std(
Training_Data_50D<-rtruncnorm(n=50,D_min、D_max、D_mean、D_std(

其中最小值、最大值、平均值和标准值是从相应的列中获得的。

有人能为我指出如何将这项任务转换为正确的R函数的正确方向吗?

我不是一个读心术的人,但我想这就是你想要的:

rtruncnorm <- function(n, min, max, mean, std){
accepted_moves <- c()
i <- 1
while(length(accepted_moves)<n){
draw <- rnorm(1, mean, std)
if(between(draw, min, max)){
accepted_moves[i] <- draw
i <- i+1
}
}
return(accepted_moves)
}

模拟:

input_data <- runif(5)
sum_data <- input_data %>% 
summary()
rtruncnorm(50, sum_data[1], sum_data[6], sum_data[5], sd(input_data))

[1] 0.5259511 0.5575217 0.6253954 0.8497881 0.8902441 0.8462771 0.4441249 0.6323441 0.9069752 0.4665141 0.4922236 0.9103832
[13] 0.6352267 0.5996836 0.5647709 0.6622921 0.4687262 0.4164213 0.1878030 0.5707349 0.8617818 0.4060878 0.7911329 0.5712865
[25] 0.8958417 0.3603563 0.5451828 0.8638422 0.7079184 0.5580455 0.9099664 0.1308865 0.8396717 0.7088652 0.7627120 0.5839610
[37] 0.7446260 0.6821685 0.4831258 0.6643238 0.4619952 0.3614351 0.5678148 0.5655968 0.5316892 0.4885681 0.6507399 0.5020127
[49] 0.5227599 0.5890428

最新更新