根据我现有的数据集生成其他随机数据样本

g

我试图从现有的样本数据中生成更大的数据样本。例如irisN = 150,我想将其重新缩放4500(1500每个物种)。https://seslezak.github.io/IrisData/上的帖子中描述了一个示例我不想,resample或者bootstrap我对使用例如生成新值感兴趣,rnorm这是到目前为止我尝试过的。

muSepal.Length = mean(iris$Sepal.Length)
sdSepal.Length = sd(iris$Sepal.Length)
muSepal.Width= mean(iris$Sepal.Width)
sdSepal.Width = sd(iris$Sepal.Width)

N = 5000
simulated_data = data.frame(Sepal.Length = rnorm(N, muSepal.Length,sdSepal.Length),Sepal.Width =rnorm(N,muSepal.Width,sdSepal.Width))

在这里,我从样本分布中提取了值,但是我在努力了解如何有效地构建整个“新”数据集?

卡盘P

正如@db在几个小时前指出的那样,您面临选择采样现有数据或假定它适合于诸如理论分布的选择rnorm很显然,您要模拟的文章的作者选择了后者。新数据集的摘要清楚地显示了一些setosa Petal.Width不在原始值irisNAs中的值,因为在一个较大的样本中,对于测量而言,我们必然会低于0。

这是一组快速而肮脏的代码,您应该能够对自己的数据进行处理。

set.seed(2020)
library(dplyr)

testing <- iris %>% 
  group_by(Species) %>% 
  summarise_at(vars(Sepal.Length:Petal.Width), list(mean = mean, 
                                                    sd = sd)) %>%
  rowwise() %>%
  group_by(Species) %>%
  summarise(Sepal.Length = rnorm(1500, 
                                 mean = Sepal.Length_mean, 
                                 sd = Sepal.Length_sd),
            Sepal.Width = rnorm(1500, 
                                mean = Sepal.Width_mean, 
                                sd = Sepal.Width_sd),
            Petal.Length = rnorm(1500, 
                                 mean = Petal.Length_mean, 
                                 sd = Petal.Length_sd),
            Petal.Width = rnorm(1500, 
                                mean = Petal.Width_mean, 
                                sd = Petal.Width_sd)) %>%
  ungroup %>% # so we stop being rowwise
  filter_at(vars(Sepal.Length:Petal.Width), ~ . > .1) # to eliminate ridiculously small or negative values


summary(testing)
#>        Species      Sepal.Length    Sepal.Width     Petal.Length   
#>  setosa    :1368   Min.   :3.784   Min.   :1.719   Min.   :0.8857  
#>  versicolor:1500   1st Qu.:5.168   1st Qu.:2.746   1st Qu.:1.6116  
#>  virginica :1500   Median :5.834   Median :3.014   Median :4.2998  
#>                    Mean   :5.855   Mean   :3.047   Mean   :3.8148  
#>                    3rd Qu.:6.443   3rd Qu.:3.322   3rd Qu.:5.2312  
#>                    Max.   :8.304   Max.   :4.547   Max.   :7.5825  
#>   Petal.Width    
#>  Min.   :0.1001  
#>  1st Qu.:0.3373  
#>  Median :1.3439  
#>  Mean   :1.2332  
#>  3rd Qu.:1.8460  
#>  Max.   :3.0523

比我能流利的人可以通过ivot_longer或一个避免4个重复调用的自定义函数来做更好的工作rnorm您需要寻找不合理的值,并证明为什么rnorm它非常适合您的数据。

添加一个更复杂的解决方案来解决MASS::mvrnormRemi在他的回答中提到的相关性。对不起,懒得思考更好的代码,只是在这里强行重复。

library(dplyr)

# Get the covariance matrix by species
sigma.setosa <- iris %>% 
   filter(Species == "setosa") %>% 
   select(-Species) %>% 
   cov
sigma.versicolor <- iris %>% 
   filter(Species == "versicolor") %>% 
   select(-Species) %>% 
   cov
sigma.virginica <- iris %>% 
   filter(Species == "virginica") %>% 
   select(-Species) %>% 
   cov

# generate samples based on those covariance matricies
set.seed(2020)

setosa.rows <- MASS::mvrnorm(n = 1500, 
                             c(mean(iris$Sepal.Length), mean(iris$Sepal.Width), mean(iris$Petal.Length), mean(iris$Petal.Width)), 
                             sigma.setosa, 
                             empirical = TRUE)
versicolor.rows <- MASS::mvrnorm(n = 1500, 
                             c(mean(iris$Sepal.Length), mean(iris$Sepal.Width), mean(iris$Petal.Length), mean(iris$Petal.Width)), 
                             sigma.versicolor, 
                             empirical = TRUE)
virginica.rows <- MASS::mvrnorm(n = 1500, 
                                 c(mean(iris$Sepal.Length), mean(iris$Sepal.Width), mean(iris$Petal.Length), mean(iris$Petal.Width)), 
                                 sigma.virginica, 
                                 empirical = TRUE)

# convert to dataframes
setosa.df <- data.frame(setosa.rows, Species = "setosa")
versicolor.df <- data.frame(setosa.rows, Species = "versicolor")
virginica.df <- data.frame(setosa.rows, Species = "virginica")

# bind them return species to a factor
newiris <- rbind(setosa.df, versicolor.df, virginica.df) 
newiris$Species <- factor(newiris$Species)

summary(newiris)
#>   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
#>  Min.   :4.669   Min.   :1.759   Min.   :3.183   Min.   :0.820  
#>  1st Qu.:5.598   1st Qu.:2.805   1st Qu.:3.637   1st Qu.:1.130  
#>  Median :5.848   Median :3.064   Median :3.761   Median :1.199  
#>  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
#>  3rd Qu.:6.083   3rd Qu.:3.306   3rd Qu.:3.878   3rd Qu.:1.267  
#>  Max.   :6.969   Max.   :4.288   Max.   :4.342   Max.   :1.578  
#>        Species    
#>  setosa    :1500  
#>  versicolor:1500  
#>  virginica :1500  
#>                   
#>                   
#> 
summary(iris)
#>   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
#>  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
#>  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
#>  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
#>  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
#>  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
#>  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
#>        Species  
#>  setosa    :50  
#>  versicolor:50  
#>  virginica :50  
#>                 
#>                 
#> 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从现有数据集中生成随机数据集的最佳方法是什么?

来自分类Dev

我想根据我在Pandas中的其他专栏对数据透视表进行分类

来自分类Dev

将更多数据集添加到现有的Hdf5文件中,而不删除其他组和数据集

来自分类Dev

生成具有大数据集的样本

来自分类Dev

根据我的数据生成平均值

来自分类Dev

随机样本数据集生成器

来自分类Dev

根据等级在Oracle中生成随机数据

来自分类Dev

使用 Pandas 使用现有数据帧中的唯一元素生成随机数据帧

来自分类Dev

如何根据其他2个现有数据框创建数据框?

来自分类Dev

发送其他JSON数据以及现有的发送序列化表单数据的AJAX帖子

来自分类Dev

生成具有定义的数据类型的随机数

来自分类Dev

根据现有数据框中的其他列创建一个新列

来自分类Dev

允许他人下载我拥有的数据集的最便宜方法是什么?

来自分类Dev

无法根据我的 ID 获取值获取所有数据库数据

来自分类Dev

如何根据我的规则生成数据中心和机器组合?

来自分类Dev

根据我单击的次数从数据库加载数据

来自分类Dev

通过随机采样现有数据来生成n个新数据集,然后将函数应用于新数据集

来自分类Dev

根据其他列添加具有随机数的列

来自分类Dev

生成相同随机数据的简便方法

来自分类Dev

为Cassandra DB生成随机数据

来自分类Dev

素数生成中的随机数据

来自分类Dev

SAS-根据其他数据集重命名变量

来自分类Dev

根据其他数据集的条件对变量进行分类

来自分类Dev

SAS-根据其他数据集重命名变量

来自分类Dev

根据python中的随机数调用其他函数

来自分类Dev

如何遍历熊猫数据框和随机数到现有行的每个元素

来自分类Dev

如何将冯·米斯分布适合我的数据以生成随机样本

来自分类Dev

根据我遵循的课程连接到数据库

来自分类Dev

如何从现有的写入数据库中生成CQRS中的读取数据?

Related 相关文章

  1. 1

    从现有数据集中生成随机数据集的最佳方法是什么?

  2. 2

    我想根据我在Pandas中的其他专栏对数据透视表进行分类

  3. 3

    将更多数据集添加到现有的Hdf5文件中,而不删除其他组和数据集

  4. 4

    生成具有大数据集的样本

  5. 5

    根据我的数据生成平均值

  6. 6

    随机样本数据集生成器

  7. 7

    根据等级在Oracle中生成随机数据

  8. 8

    使用 Pandas 使用现有数据帧中的唯一元素生成随机数据帧

  9. 9

    如何根据其他2个现有数据框创建数据框?

  10. 10

    发送其他JSON数据以及现有的发送序列化表单数据的AJAX帖子

  11. 11

    生成具有定义的数据类型的随机数

  12. 12

    根据现有数据框中的其他列创建一个新列

  13. 13

    允许他人下载我拥有的数据集的最便宜方法是什么?

  14. 14

    无法根据我的 ID 获取值获取所有数据库数据

  15. 15

    如何根据我的规则生成数据中心和机器组合?

  16. 16

    根据我单击的次数从数据库加载数据

  17. 17

    通过随机采样现有数据来生成n个新数据集,然后将函数应用于新数据集

  18. 18

    根据其他列添加具有随机数的列

  19. 19

    生成相同随机数据的简便方法

  20. 20

    为Cassandra DB生成随机数据

  21. 21

    素数生成中的随机数据

  22. 22

    SAS-根据其他数据集重命名变量

  23. 23

    根据其他数据集的条件对变量进行分类

  24. 24

    SAS-根据其他数据集重命名变量

  25. 25

    根据python中的随机数调用其他函数

  26. 26

    如何遍历熊猫数据框和随机数到现有行的每个元素

  27. 27

    如何将冯·米斯分布适合我的数据以生成随机样本

  28. 28

    根据我遵循的课程连接到数据库

  29. 29

    如何从现有的写入数据库中生成CQRS中的读取数据?

热门标签

归档