我正在处理一个数据集有一些明显的数据错误(即小于 1 岁且信用卡余额为 50,000 美元的孩子)。我不能逐行遍历,因为设置是 >100k 行。有没有关于如何在数据集中搜索这些类型的明显问题或什至更好地在 R 中搜索任何包的正式工作?还是我应该开始做直方图?
3 回答
今年的 UserR2011 会议上有一个关于此的会议。我记得很清楚,因为我主持了它:)
http://www.warwick.ac.uk/statsdept/user-2011/schedule/thursday.html
'deducorrect' 和 'editrules' 软件包可能会对您有所帮助,该会话中的其他一些谈话也可能有一些指示。
数据管理,MS.01,主席:Barry Rowlingson
苏珊兰尼这是个男孩!使用 R 分析数以千万计的出生记录 [幻灯片]
Joanne Demmler 使用常规收集的健康数据的大型数据库的挑战:结合 SQL 和 R [幻灯片]
John Bryant 人口统计:人口数据的类别和方法
Mark van der Loo 使用 deducorrect 和 editrules 包纠正违反线性限制的数据
据我所知,没有这样的包。看来您要的内容非常专业。我认为你真的在寻找异常或异常值。尽管有一些东西可以将所有变量回归到其他变量并搜索潜在的极端异常值(可能并不难)
2个想法:
1)您将连接的变量散点图,例如年龄和收入。即使有 100k 行,其中一个(1 岁的人制作 50K)也会从其他所有行中弹出。
2)运行回归并查看模型图。那里有一些非常好的异常值检测。
3) 搜索标准化残差并查找大于 2 或最有可能是 3 sd 的值,该语句用于索引数据的观察数。
就像是: dataframe[which(rstandard(model)>3), ]
异常值检测的方法有LOF、Local Outlier Factor等。此方法尝试检测与相似对象显着偏离的对象。它超越了简单的全局直方图。所以 50000 美元的价值在全球范围内可能并不异常,但是当你寻找类似的记录时,要么年龄偏差很大,要么平衡。这就是所谓的“本地”异常值。
我不知道是否有它的 R 包。也许,也许不是。根据您的用例 - 由于年龄和平衡是非常不同的领域,欧几里得距离的天真实现可能无论如何都不会做。
对于这类任务,我喜欢使用ELKI。它是非常可定制的 - 您可以实现自定义距离函数,它在距离函数教程中进行了解释。而且由于它使用索引结构,所以速度相当快。我认为 R 没有任何好的数据索引结构。