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

时间:2009-06-17 14:44:05

标签: r

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

从一次随意的检查来看,它看起来很强大,但我需要比这更严格。 R可以轻松做到吗?如果是这样,怎么样?还有其他更好的东西吗?

3 个答案:

答案 0 :(得分:4)

虽然成本有点高,但您可以完全模仿样本的分布(不需要对基础人口分布进行任何假设),如下所示。

你需要一个可以快速搜索“key with< = X”的最高条目的文件结构 - 例如,Sleepycat的Berkeley数据库有一个btree结构; SQLite更容易,但可能不是那么快(但是在键上有一个索引应该没问题)。

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

要生成一个跟随与样本完全相同的分布的随机对,生成0到K之间的随机整数X,并在该文件结构中使用提到的“最高值< =”查找它并使用相应的值

不知道如何在R中完成所有这些 - 在你的鞋子里我会尝试使用Python / R桥接器,在Python中执行逻辑和控制,只使用R本身的统计数据,但是,这是个人选择!< / p>

答案 1 :(得分:4)

要查看您是否具有真实的幂律分布,请绘制频率的对数 - 对数图并查看它们是否大致在直线上排列。如果您有直线,可能需要阅读Pareto distribution上的这篇文章,了解有关如何描述数据的更多信息。

答案 2 :(得分:1)

我假设您有兴趣了解分类值的分布。

生成“新”数据的最佳方法是使用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的read.csv()函数引入您的100米行值和计数。假设您有标题为“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)

有一点需要注意:正如您所知,R将所有对象保留在内存中,因此请确保已经为100米行数据释放了足够的空间(将字符串存储为因子有助于减少占用空间)。