小编cha*_*lie的帖子

R中用于大型复杂调查数据集的方法?

我不是调查方法学家或人口统计学家,但我是 Thomas Lumley 的 R 调查包的狂热粉丝。我一直在处理一个相对较大的复杂调查数据集,即医疗保健成本和利用项目 (HCUP) 国家急诊部样本 ( NEDS )。正如医疗保健研究和质量机构所描述的那样,它是“来自 30 个州的 947 家医院的急诊就诊的出院数据,大约是美国医院急诊分层样本的 20%”

2006 年至 2012 年的完整数据集包含 198,102,435 个观测值。我已将数据细分为 40,073,358 次与外伤相关的出院,其中包含 66 个变量。对这些数据运行即使是简单的调查程序也需要非常长的时间。我曾尝试将 RAM 投入其中(2013 年末 Mac Pro,3.7GHz 四核,128GB(!)内存),在可用时使用多核子集,使用像MonetDB这样的内存不足的 DBMS。基于设计的调查程序仍然需要数小时。有时好几个小时。一些适度复杂的分析需要 15 个小时以上。我猜大部分计算工作都与必须是庞大的协方差矩阵有关?

正如人们所料,处理原始数据的速度要快几个数量级。更有趣的是,根据程序,对于如此大的数据集,未经调整的估计值可能与调查结果非常接近。(见下面的例子)基于设计的结果显然更精确和更受欢迎,但几个小时的计算时间与几秒钟相比,对于增加的精度来说是一个不可忽视的成本。它开始看起来像是绕着街区走很长一段路。

有没有人有这方面的经验?有没有办法优化大型数据集的 R 调查程序?也许更好地利用并行处理?使用INLA 的贝叶斯方法或像 Stan 这样的哈密​​顿方法是一种可能的解决方案吗?或者,当调查规模大且具有足够的代表性时,一些未经调整的估计值,尤其是相对测量值,是否可以接受?

以下是几个近似调查结果的未经调整的估计示例。

在第一个示例中,内存中的 svymean 用了不到一个小时,内存不足需要 3 多个小时。直接计算耗时不到一秒。更重要的是,点估计值(svymean 为 34.75,未调整为 34.77)以及标准误差(0.0039 和 0.0037)非常接近。

    # 1a. svymean in memory 

    svydes<- svydesign(
        id = ~KEY_ED ,
        strata = ~interaction(NEDS_STRATUM , …
Run Code Online (Sandbox Code Playgroud)

r survey large-data

7
推荐指数
1
解决办法
1465
查看次数

标签 统计

large-data ×1

r ×1

survey ×1