代码之家  ›  专栏  ›  技术社区  ›  twk Mark Adler

确定分布以便生成测试数据

r
  •  3
  • twk Mark Adler  · 技术社区  · 15 年前

    我在Linux机器上的一个文本文件中有大约100万个值/计数对。我想弄清楚我会用什么样的公式来生成更多遵循相同分布的对。

    3 回复  |  直到 8 年前
        1
  •  4
  •   Alex Martelli    15 年前

    虽然有点贵,但您可以精确地模拟样本的分布(无需对潜在的总体分布进行任何假设),如下所示。

    您需要一个文件结构,它可以快速搜索“最高的条目,键为<=X”—Sleepycat的Berkeley数据库有一个btree结构,例如,SQLite甚至更简单,尽管可能没有那么快(但是在键上有索引,应该没问题)。

    将数据以成对的形式放置,其中键是到该点的累计计数(按递增值排序)。称K为最高键。

    不知道如何在R中实现所有这些——在您的情况下,我会尝试使用Python/R桥,在Python中执行逻辑和控制,并且只在R中进行统计,但是,这是个人的选择!

        2
  •  4
  •   John D. Cook    15 年前
        3
  •  1
  •   medriscoll    15 年前

    我假设你对理解你的分类值的分布感兴趣。

    生成“新”数据的最佳方法是使用R的sample()函数从现有数据中进行采样。这将为您提供遵循现有计数所指示的概率分布的值。

    举一个小例子,假设你有一个小镇的选民数据文件,其中的值是选民的政治派别,计数是选民人数:

    affils <- as.factor(c('democrat','republican','independent'))
    counts <- c(552,431,27)
    ## Simulate 20 new voters, sampling from affiliation distribution
    new.voters <- sample(affils,20, replace=TRUE,prob=counts)
    new.counts <- table(new.voters)
    

    在实践中,您可能会使用R来输入100米行的值和计数读取.csv()功能。假设有一个标题行标记为“values\t counts”,则该代码可能如下所示:

    dat <- read.csv('values-counts.txt',sep="\t",colClasses=c('factor','numeric'))
    new.dat <- sample(dat$values,100,replace=TRUE,prob=dat$counts)