
翻译是为“ R上的应用分析”课程的学生准备的。
作为数据科学家,我们经常被提供一个数据集并被要求使用它来获取信息。 我们使用R进行处理,可视化,建模,准备表和图形以共享结果或发布它们。 如果我们以这种方式查看数据,那么数据来自哪里就没有关系。 样本大小,特征集及其比例是固定的。 但是,用于收集或生成数据的过程对于将来的分析以及我们最终可以获得的信息质量极为重要。 数据收集过程影响应如何分析数据。 对于衡量因果关系的研究,重要的是应考虑哪些数据而哪些则不考虑。
由于这些过程非常重要,因此我们想创建一个工具,以帮助科学家和其他研究人员在收集数据之前 展示(模拟)数据,以便可以在数据收集阶段进行任何更改,以免为时过晚。
如果已经收集了数据,则该工具可让您在分析数据之前先对其进行想象。 当我们根据每次操作获得的结果来决定数据处理和建模或使用统计模型时,我们在不知不觉中易受“偏差路径花园”或p-hacking之类的偏见的影响,这可能导致我们选择分析程序这将提供最佳结果。 我们使用实际数据是因为我们没有很好的选择:没有与我们收集的结构和特征相同的数据。
本文介绍了fabricatr软件包(来自DeclareDesign软件包套件),其作用是对数据结构和功能进行建模。 请参阅有关RView的DeclareDesign评论,以描述其理念。 Fabricatr可帮助您在开始分析甚至收集之前考虑一下数据。 什么样的数据? 它们的结构如何? 您将进行哪些测量? 它们的范围是什么,它们之间有什么关系? fabricatr可以帮助您在收集实际数据之前模拟虚拟数据并测试各种评估策略,而不必担心更改您的假设。
想象一下您的数据结构
在最简单的情况下, fabricatr将创建给定数量的单级数据结构。
library(fabricatr) fabricate(N = 100, temp_fahrenheit = rnorm(N, mean = 80, sd = 20)) ## Warning: `is_lang()` is deprecated as of rlang 0.2.0. ## Please use `is_call()` instead. ## This warning is displayed once per session. ## Warning: `lang_name()` is deprecated as of rlang 0.2.0. ## Please use `call_name()` instead. ## This warning is displayed once per session.
社会学数据通常是分层的 。 例如,在学校里有班级,在班级里有学生。 使用add_level命令, fabricatr也可以解决此问题。 默认情况下,新级别嵌套在更高级别中。
library(fabricatr) fabricate( # five schools school = add_level(N = 5, n_classrooms = sample(10:15, N, replace = TRUE)), # 10 to 15 classrooms per school classroom = add_level(N = n_classrooms), # 15 students per classroom student = add_level(N = 15) ) ## Warning: `lang_modify()` is deprecated as of rlang 0.2.0. ## Please use `call_modify()` instead. ## This warning is displayed once per session.
在现实世界中,经常会出现不稳定,重叠的层次结构。 例如,可以从高中以及高中获取学生数据。 在这种情况下,学生将在两所不同的学校中,并且这些学校将不会相互连接。 以下是如何制作此类“交叉”数据的示例。 rho参数决定应关联多少primary_rank和second_rank 。
dat <- fabricate( primary_schools = add_level(N = 5, primary_rank = 1:N), secondary_schools = add_level(N = 6, secondary_rank = 1:N, nest = FALSE), students = link_levels(N = 15, by = join(primary_rank, secondary_rank, rho = 0.9)) ) ## `link_levels()` calls are faster if the `mvnfast` package is installed. ggplot(dat, aes(primary_rank, secondary_rank)) + geom_point(position = position_jitter(width = 0.1, height = 0.1), alpha = 0.5) + theme_bw()

同样,您可以通过cross_levels生成纵向数据:
fabricate( students = add_level(N = 2), years = add_level(N = 20, year = 1981:2000, nest = FALSE), student_year = cross_levels(by = join(students, years)) )
想象你的迹象
R有许多很棒的功能建模工具。 但是,在某些情况下,通常的变量类型很难建模。 Fabricatr具有少量函数,这些函数具有用于创建常用类型的属性的简单语法。 这里我们描述两个例子,其余的在文章中 。
具有类内相关性的属性
使用上述工具,您可以构建具有块内和块间差异的数据,例如教室中的差异和教室之间的差异。 在许多情况下,有必要更准确地建立类内相关性(ICC)的级别。 在这里draw_normal_icc和draw_binary_icc会有所帮助。
dat <- fabricate( N = 1000, clusters = sample(LETTERS, N, replace = TRUE), Y1 = draw_normal_icc(clusters = clusters, ICC = .2), Y2 = draw_binary_icc(clusters = clusters, ICC = .2) ) ICC::ICCbare(clusters, Y1, dat) ## [1] 0.09726701 ICC::ICCbare(clusters, Y2, dat) ## [1] 0.176036
有序结果
我们还提供用于离散随机变量(包括有序结果)的工具。 我们将一个潜在变量(例如test_ability )转换为有序属性( test_score )。
dat <- fabricate( N = 100, test_ability = rnorm(N), test_score = draw_ordered(test_ability, breaks = c(-.5, 0, .5)) ) ggplot(dat, aes(test_ability, test_score)) + geom_point() + theme_bw()

fabricatr与几乎所有R变量创建函数兼容。 在本文中,我们描述了一些很棒的R程序包,它们可以模拟社会学相关的属性。
接下来要去哪里
本文是fabricatr功能的高级概述。 要更深入地了解,请参阅文章fabricatr入门 。
您可以通过CRAN安装fabricatr :
install.packages("fabricatr") library(fabricatr)
有问题吗? 写评论!