跳转到内容

R 语言生物统计学/有序数组

来自维基教科书,开放的书籍,开放的世界

频数分布

[编辑 | 编辑源代码]

示例 2.2.1 详细说明了排序数组的步骤。该数组是一系列接受两种戒烟计划的受试者的年龄。假设您已经使用以下命令导入数据集

> SmokeCProg <- read.csv("/EXA_C01_S04_01.csv", header=T, na.strings=NA)

最好使用描述性名称(例如 SmokeCProg 代表戒烟计划)而不是常用的占位符名称,例如 x、y。我们可以使用以下命令获得年龄的排序数组

> sort(SmokeCProg$AGE)

如表 2.3.1 所示,年龄的频率分布可以使用以下方法获得

> table(cut(SmokeCProg$AGE, b=c(0,39,49,59,69,79,89)))
(0,39] (39,49] (49,59] (59,69] (69,79] (79,89] 
    11      46      70      45      16       1 

cut 命令根据提供的断点(0,39,49,59,69,79,89)划分 AGE 变量。在表 2.3.2 中,提供了年龄的频数表。正如 Venables 等人在“R 语言入门”一书中所建议的那样,统计分析通常作为一系列步骤进行,中间结果存储在对象中。与其他统计软件包相比,R 语言仅提供最少的输出。我们将在此示例中演示此重要特性。在前面的示例中,我们使用 table()cut() 命令计算了年龄的频率分布。我们可以使用以下方法将结果存储在名为“AgeFreqTable”的对象中

> AgeFreqTable <- table(cut(SmokeCProg$AGE, b=c(0,39,49,59,69,79,89)))

您将不会获得任何输出。直到您调用对象“AgeFreqTable”

> AgeFreqTable
(0,39] (39,49] (49,59] (59,69] (69,79] (79,89] 
    11      46      70      45      16       1

为了获得累积频率,我们可以使用 cumsum() 命令处理对象“AgeFreqTable”

> cumsum(AgeFreqTable)
(0,39] (39,49] (49,59] (59,69] (69,79] (79,89] 
    11      57     127     172     188     189

在我们跳到相对频率的计算之前,我们可以使用 length() 函数获得变量中的观测总数

> length(SmokeCProg$AGE)
[1] 189

我们可以通过将对象“AgeFreqTable”中的每个项目除以观测总数来计算相对频率

> AgeFreqTable/length(SmokeCProg$AGE)
    (0,39]     (39,49]     (49,59]     (59,69]     (69,79]     (79,89] 
0.058201058 0.243386243 0.370370370 0.238095238 0.084656085 0.005291005

同样,可以使用以下方法计算累积相对频率

> cumsum(AgeFreqTable)/length(SmokeCProg$AGE)
    (0,39]    (39,49]    (49,59]    (59,69]    (69,79]    (79,89] 
0.05820106 0.30158730 0.67195767 0.91005291 0.99470899 1.00000000

如果您想将相对频率的结果四舍五入到 4 位数,可以使用 round() 函数

> round (AgeFreqTable/length(SmokeCProg$AGE),digits=4)
 (0,39] (39,49] (49,59] (59,69] (69,79] (79,89] 
0.0582  0.3016  0.6720  0.9101  0.9947  1.0000 

或者,您可以将相对频率的结果存储在一个新对象中,然后使用 round() 函数处理该对象

> AgeRelFreqTable <- AgeFreqTable/length(SmokeCProg$AGE)
> round (AgeRelFreqTable, digits=4)

练习:尝试使用 R 命令将累积相对频率的结果四舍五入到 4 位数。要绘制直方图,可以使用 hist() 函数,例如

> hist(SmokeCProg$AGE)

您可以通过添加一些参数(即选项)来自定义直方图,您可以在输入 ?hist 以了解更多关于 hist() 函数参数的信息。例如,如果您想绘制仅包含五个条形图的直方图(类似于图 2.3.2)

> hist(SmokeCProg$AGE, breaks=5)

您可以向 hist() 函数添加更多参数,例如

> hist(SmokeCProg$AGE, breaks=5, ylim=c(0,70), main="Histogram of Ages of 189 subjects", col="red", xlab="Age")

请记住,当您有疑问时,请始终参考文档(例如 ?hist 或 help.search("histogram"))。在 95% 的情况下,您可以在帮助文档中找到答案。例如,您不知道如何绘制茎叶图来显示您的数据。您甚至不知道函数的名称。您可以使用 help.search() 搜索关键字“stem”,即

> help.search("stem")

结果中应该有一个名为 stem() 的函数。然后我们尝试使用此函数来可视化我们的数据

> stem(SmokeCProg$AGE)
The decimal point is 1 digit(s) to the right of the |
 3 | 04
 3 | 577888899
 4 | 00223333334444444
 4 | 55566666677777788888889999999
 5 | 0000000011112222223333333333333333344444444444
 5 | 555666666777777788999999
 6 | 000011111111111222222233444444
 6 | 556666667888999
 7 | 0111111123
 7 | 567888
 8 | 2

与 MINITAB 不一样,茎单位由 scale 参数调整。上面的绘图使用默认的 scale 为 1,相当于茎单位 =5。要将茎单位更改为 10,scale 参数的值应更改为 0.5

> stem(SmokeCProg$AGE, scale=0.5)
 The decimal point is 1 digit(s) to the right of the |
 3 | 04577888899
 4 | 0022333333444444455566666677777788888889999999
 5 | 00000000111122222233333333333333333444444444445556666667777777889999
 6 | 000011111111111222222233444444556666667888999
 7 | 0111111123567888
 8 | 2

集中趋势

[编辑 | 编辑源代码]
华夏公益教科书