如何用r语言实现布丰投针问题?

Python011

如何用r语言实现布丰投针问题?,第1张

原文链接:http://tecdat.cn/?p=13033

介绍

布丰投针是几何概率领域中最古老的问题之一。它最早是在1777年提出的。它将针头掷到有平行线的纸上,并确定针和其中一条平行线相交的可能性。令人惊讶的结果是概率与pi的值直接相关。

R程序将根据上段所述的情况估算pi的值并使用gganimate进行动态可视化。

第1部分

对于A部分,我们创建一个数据帧,该数据帧将在3个不同的区间上生成随机值,这些区间将代表x,y的范围以及每个落针点的角度。这是一个易于实现的随机数情况,需要使用runif函数。此功能要求输入数量,后跟一个间隔。生成数字后,我们会将值保存到数据框中。

rneedle <- function(n) {

x = runif(n, 0, 5)

y = runif(n,0, 1)

angle = runif(n,-pi, pi) #从-180到180的角度

values<-data.frame(cbind(x, y, angle))

return(values)

}

values<-rneedle(50)

#检查是否生成50×3矩阵

values

#我们的数据帧已经成功生成。

         x           y      angle

1  4.45796267 0.312440618  1.3718465

2  3.43869230 0.462824677  2.9738367

3  2.55561523 0.596722445 -2.9638285

4  3.68098572 0.670877506 -0.6860502

5  0.03690118 0.202724803 -0.3315141

6  4.64979938 0.180091416 -0.3293093

7  4.92459238 0.172328845 -0.5221133

8  3.50660347 0.752147374  2.9100221

9  2.03787919 0.167897415 -0.3213833

10 0.38647133 0.539615776 -0.1188982

11 3.28149935 0.102886770 -1.6318256

12 3.68811892 0.765077533  1.2459037

13 1.52004894 0.682455494 -0.4219802

14 3.76151379 0.508555610  0.1082087

...

第2部分

我们绘制第一部分中的针。重要的是不要在这个问题上出现超过2条水平线。它使我们可以进行检查以了解此处描绘的几何特性的一般概念。话虽如此,让我们注意我们决定在每个方向上将图形扩展1个单位。原因是想象一个针尾从y = 1开始,其角度为pi / 2。我们需要假设该方向的范围最大为2。

plotneedle(values)

第3部分

在下面,将基于阅读布冯针和基本几何原理的知识,查看pi的估算值。

buffon(values)

第4部分

运行代码后,我们收到以下答案。

>buffon(X)

[1] 3.846154

set.seed(10312013)

X <- rneedle(50)

plotneedle(X)

buffon(X)

>buffon(X)

[1] 3.846154

第5部分

如前几节所述,当我们投掷更多的针头时,我们期望以最小的不确定性获得更准确的答案。从Approxpi函数运行代码后,我们收到了平均值= 3.172314和方差0.04751391的值。对于这样一个简单的实验,它对pi进行了很高的估计。

Approxpi(500)

mean(Approxpi(500))

var(Approxpi(500))

>mean(Approxpi(500))

[1] 3.172314

>var(Approxpi(500))

[1] 0.04751391

接下来对模拟次数从500~600的预测进行动态可视化,红色表示针投放到了直线上:

参考资料

Schroeder,L.(1974年)。布冯针问题:许多数学概念的激动人心的应用。

最受欢迎的见解

1.R语言动态图可视化:如何、创建具有精美动画的图

2.R语言生存分析可视化分析

3.Python数据可视化-seaborn Iris鸢尾花数据

4.r语言对布丰投针(蒲丰投针)实验进行模拟和动态

5.R语言生存分析数据分析可视化案例

6.r语言数据可视化分析案例:探索brfss数据数据分析

7.R语言动态可视化:制作历史全球平均温度的累积动态折线图动画gif视频图

8.R语言高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告

9.python主题LDA建模和t-SNE可视化

Vectors 向量【当你想用多个元素创建向量时,你应该使用 c() 函数,这意味着将元素组合成一个向量。】

# c函数用来将元素组成为一个向量

v <- c('a', 'b','c')

print(v)

# 输出结果即为元素的值,可以看出,vector类型里面只能有一种元素

print(class(v))

1

2

3

4

5

1

2

3

4

5

1] “a” “b” “c”

[1] “character”

那么问题来了,假如我就是想什么东西都往向量里面塞呢,这种做法并不会引发报错,但是R会暗中把那些乱七八糟的东西全部转换为一种类型。比如在下面这个例子,R就取了vector的第一个元素,将其转换为了character类型。

在这里插入图片描述

Lists 列表【列表是一个 R 对象,它可以在其中包含许多不同类型的元素,如向量,函数甚至其中的另一个列表。】

# 列表里面就什么都可以塞

l <- list(1,"666",c(2,3,4))

print(l)

print(class(l))

1

2

3

4

1

2

3

4

[[1]]

[1] 1

[[2]]

[1] “666”

[[3]]

[1] 2 3 4

[1] “list”

Matrices 矩阵【矩阵是二维矩形数据集。 它可以使用矩阵函数的向量输入创建。】

# 第一个参数指的是矩阵中的元素内容,第二三个参数指的是矩阵的行和列,最后一个参数指的是按行排列还是按列排列

M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)

print(M)

M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = FALSE)

print(M)

print(class(M))

1

2

3

4

5

6

1

2

3

4

5

6

在这里插入图片描述

Arrays 数组【虽然矩阵被限制为二维,但阵列可以具有任何数量的维度。 数组函数使用一个 dim 属性创建所需的维数。】

a <- array(c(1,2,3,4),dim = c(3,3,2))

print(a)

print(class(a))

print(a[2,2,1])

1

2

3

4

1

2

3

4

在这里插入图片描述

Factors 因子【因子是使用向量创建的 r 对象。 它将向量与向量中元素的不同值一起存储为标签。 标签总是字符,不管它在输入向量中是数字还是字符或布尔等。 它们在统计建模中非常有用。】

color <- c('green','green','yellow','red','red','red','green')

f <- factor(color)

print(color)

print(f)

print(nlevels(f))

print(class(s))

1

2

3

4

5

6

1

2

3

4

5

6

在这里插入图片描述

Data Frames 数据帧【数据帧是表格数据对象。 与数据帧中的矩阵不同,每列可以包含不同的数据模式。 第一列可以是数字,而第二列可以是字符,第三列可以是逻辑的。 它是等长度的向量的列表。】

BMI <- data.frame(

gender = c("Male", "Male","Female"),

height = c(152, 171.5, 165),

weight = c(81,93, 78),

Age = c(42,38,26)

)

print(BMI)

print(class(BMI))

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

在这里插入图片描述

参考网址:w3c

打开CSDN,阅读体验更佳

R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、b...

R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、by) 数据: 某市2014年-2018年空气质量指数日数据,需要按年分类计算每年 warm值为1和 0的均值。 数据长这个样子: 目标:求下列的均值 一、数据处理(提取年月) 首先需要...

R语言:数据类型及属性_woooooood的博客

R语言:数据类型及属性 1.数据类型 R语言可以处理的数据类型主要有6种:数值型、整数型、字符型、复数型、逻辑型和原生型 若输入的数据为一个数字,则数据类型为数值型(numeric),若想数据类型为整数(integer),则需要在所赋值后加“L”...

二、数据集与数据类型【R与统计】

引言 按照要求格式来创建含有研究信息的数据集是任何数据分析的第一步。在R中,这个任务包括以下两步: 选择一种数据结构来存储数据; 将数据输入或导入到该数据结构中 因此,本文将先叙述了R中用于存储数据的多种结构,具体为向量、因子、矩阵、数据框以及列表的用法。熟悉这些数据结构和访问其中元素的表述方法将十分有助于了解R的工作方式,便于后续的编程。 我将在下一篇博客介绍一些在R中导入数据的可行方法。手工输入数据当然可以,除此之外,我们也可以从外部源导入数据。数据源可以是文本文件、电子表格、统计软件和各类数据库管

继续访问

R语言中的数据集

R语言中的数据存储形式主要有以下几种方式 数组,向量,矩阵,数据框,列表 R语言中的可以处理的数据类型有以下几种方式 数值类型,字符类型,逻辑类型,原声类型(二进制类型),复数类型 数值类型 包括 实例标示,日期类型 字符类型 包括 标称变量,序数变量 R语言针对不同的数据类型处理的方式是不同的 一、向量(每一个向量中的元素都是相同的数据类型) a b c

继续访问

最新发布 R语言基础数据类型

R语言主要有三种基本的数据类型,分别是数值型(Numeric)、整型(integer)以及字符型(character)。

继续访问

R语言数据类型基础1 数值型、逻辑型与文本型

基础的R语言数据类型操作,包括了字符串、数值向量以及逻辑向量的一点简单介绍

继续访问

R语言----对数据进行分类汇总(GROUP_BY使用)

library(dplyr) ###加载dplyr模块 A<-read.csv("f:\\TEST\\TDD.csv") ####加载数据 D=data.frame(A) ##### A1<-group_by(D,Date_ID) ####分组项 A2<-summarise(A1,cells=n(), ####统计个数 RRC_ch...

继续访问

R语言--R语言数据类型(2)

一、矩阵与数组 创建 # 1.1 利用array函数,创建二维数组m1,每一行记录不同人(A,B,C)的各科成绩(math,english,physics),成绩请随意输入(要求每行至少有一个90分以上,每一列至少有一个60分以下) print('----1.1') m1 <- array(c(95,40,80,55,92,98,86,93,55), dim = c(3,3), dimnames = list(c('A','B','C'),

继续访问

R语言之对象和类

理解什么是对象R是一种基于对象(object)的语言,所以我们在R语言中看到的一切事物都是对象,向量是对象,函数是对象,图形是对象。简单说,我们可以把整个R看成是一个储物室,它的内容是由内在不同的储物盒(对象)组成, 每个盒子有不同属性(attribute), 最重要的一种属性是它的类(class).查看、删除ls:list的缩写,我们要查看物品,所以要先列出目录。

继续访问

R语言中的类和对象

#####类和对象##### #之前学习的字符向量、数值向量、数据框、列表以及数组都是一个类。 #用class函数定义类 teams<-c("PHI","NYM","FLA","ATL","WSN") w<-c(92,89,94,72,59) l<-c(70,73,77,90,102) nleast<-data.frame(teams,w,l) #定义teams类 class(teams) cla

继续访问

R语言数据类型

文章目录基本概念向量字符串矩阵列表数组因子数据框 基本概念 R 语言中的最基本数据类型主要有三种:数字,逻辑,文本 逻辑类型在许多其他编程语言中常称为布尔型(Boolean),常量值只有 TRUE和FALSE。 注意:R 语言区分大小写,true 或 True 不能代表 TRUE。 最直观的数据类型就是文本类型。文本就是其它语言中常出现的字符串(String),常量用双引号包含。 在 R语言中,文本常量既可以用单引号包含,也可以用双引号包含,例如: 按对象类型来分是以下6种:向量(vector),列表(

继续访问

R语言分类汇总

R语言分类汇总 ##加载包 library(dplyr) ##函数 group_by 制定数据集 data 中针对 type 变量进行分类汇总 grou <- group_by(data,type) ##summarise函数计算分类结果——sd 标准差,还可计算其他类,分类汇总 type_sd <- summarise(grou ,sd(range ,na.rm = T)) dat...

继续访问

热门推荐 R语言:排序、筛选以及分类汇总操作

在Excel中我们可以很方便的对数据进行排序、筛选、分类汇总等基本操作,R语言中没有这种傻瓜式的一键操作,如何才能完成这种操作?一、排序1、单变量序列排序单变量序列的排序常用到rank、sort和order函数。给一个例子:>a <- c(3, 1, 5) >rank(a) [1] 2 1 3 >sort(a) [1] 1 3 5 >order(a...

继续访问

R语言 查看与转换数据类型

数据对象类型 R语言的对象常见的数据类型有:数值型、字符型、逻辑型、整数型、复数型等。此外,也可能是缺省值(NA) 数据对象类型及其判别和转化函数 类型 中文释义 示例 辨别 转换 numeric 数值型 2、-3、4.5 is.numeric() as.numeric() character 字符型 “ZhangHenghua” is.character() as.chara...

继续访问

R语言的数据类型

一、数据类型 概括来说,R可以识别六种基本的数据类型,分别是,双整型(double)、整型(integer)、字符型(character)、逻辑型(logical)、复数类型(complex)以及原始类型(raw). 1.双整型(double) 储存普通数值型数据,可正可负,可大可小,可含小数可不含 R中键入的任何一个数值都默认以double型存储 想知道某个对象是什么类型,可以使用typeof() 函数进行查看 在数据科学里,它更常被称为数值型(numeric) 2.整型(integer) 顾名思义,只能

继续访问

R语言——数据类型详解

R语言——数据类型详解 R语言支持的数据类型 数值型 整数型 逻辑型 字符型 复数型 原生型 R语言的数据对象类型包括 向量:一个向量只能有一种数据类型 矩阵:一个矩阵只能有一种数据类型 数组:一个数组只能有一种数据类型 数据框:不同的列允许不同的数据类型 因子:一个因子只能有一种数据类型 列表:允许不同的数据类型 如上图所示,标量、向量、矩阵和数组可以按同一类型来理解,这四种类型要求对象包含的数据均为同一类型,数组是多维度的一串数据,向量是维度为1的数组,标量是单元素的向量,矩阵是维度为2的数

继续访问

R语言自用笔记:复数

介绍了R语言中虚数的表示、相关函数

继续访问

[R语言]2. R语言中的数据类型和数据结构

R语言中数据类型和数据结构是两种不同的概念,初学者经常容易搞混,因此有必要对这两个概念进行详细说明。

继续访问

R语言数据类型:Logical、Numeric、Integer、Complex、Character、Vectors、Lists、Matrices、Arrays、Factors、DataFrames

R语言数据类型:Logical、Numeric、Integer、Complex、Character、Vectors、Lists、Matrices、Arrays、Factors、DataFrames 通常,在使用任何编程语言进行编程时,都需要使用各种变量来存储各种信息。变量只不过是用来存储值的内存位置或者区间。这意味着,当我们创建一个变量时,系统在内存中保留了一些空间。 我们可能喜欢存储各种数据类型的信息,如字符、宽字符、整数、浮点、双浮点、布尔等。根据变量的数据类型,操作系统进行内存的分配并

继续访问

R语言 常用数据类型

一般来讲,R语言中有三种数据结构,第一种是数组,第二种是列表,第三种是数据框。第一种: 数组(包括向量和矩阵)。数组可以用来储存数值型(numeric)、逻辑型(logical)和字符型(character)三种类型的数据。例如:储存字符型数据 >x = array(rep("a",6),dim=c(2,3)) >x [,1] [,2] [,3] [1,] "a" "a" "a"

做数据分析必须学R语言的4个理由

R 是一种灵活的编程语言,专为促进探索性数据分析、经典统计学测试和高级图形学而设计。R 拥有丰富的、仍在不断扩大的数据包库,处于统计学、数据分析和数据挖掘发展的前沿。R 已证明自己是不断成长的大数据领域的一个有用工具,并且已集成到多个商用包中,比如 IBM SPSS? 和 InfoSphere?,以及 Mathematica。

本文提供了一位统计学家Catherine Dalzell对 R 的价值的看法。

为什么选择 R?

R可以执行统计。您可以将它视为 SAS Analytics 等分析系统的竞争对手,更不用提 StatSoft STATISTICA 或 Minitab 等更简单的包。政府、企业和制药行业中许多专业统计学家和方法学家都将其全部职业生涯都投入到了 IBM SPSS 或 SAS 中,但却没有编写过一行 R 代码。所以从某种程度上讲,学习和使用 R 的决定事关企业文化和您希望如何工作。我在统计咨询实践中使用了多种工具,但我的大部分工作都是在 R 中完成的。以下这些示例给出了我使用 R 的原因:

R 是一种强大的脚本语言。我最近被要求分析一个范围研究的结果。研究人员检查了 1,600 篇研究论文,并依据多个条件对它们的内容进行编码,事实上,这些条件是大量具有多个选项和分叉的条件。它们的数据(曾经扁平化到一个 Microsoft? Excel? 电子表格上)包含 8,000 多列,其中大部分都是空的。研究人员希望统计不同类别和标题下的总数。R 是一种强大的脚本语言,能够访问类似 Perl 的正则表达式来处理文本。凌乱的数据需要一种编程语言资源,而且尽管 SAS 和 SPSS 提供了脚本语言来执行下拉菜单意外的任务,但 R 是作为一种编程语言编写的,所以是一种更适合该用途的工具。

R 走在时代的前沿。统计学中的许多新发展最初都是以 R 包的形式出现的,然后才被引入到商业平台中。我最近获得了一项对患者回忆的医疗研究的数据。对于每位患者,我们拥有医生建议的治疗项目数量,以及患者实际记住的项目数量。自然模型是贝塔—二项分布。这从上世纪 50 年代就已知道,但将该模型与感兴趣的变量相关联的估算过程是最近才出现的。像这样的数据通常由广义估计方程式 (general estimating equations, GEE) 处理,但 GEE 方法是渐进的,而且假设抽样范围很广。我想要一种具有贝塔—二项 R 的广义线性模型。一个最新的 R 包估算了这一模型:Ben Bolker 编写的 betabinom。而 SPSS 没有。

集成文档发布。 R 完美地集成了 LaTeX 文档发布系统,这意味着来自 R 的统计输出和图形可嵌入到可供发布的文档中。这不是所有人都用得上,但如果您希望便携异步关于数据分析的书籍,或者只是不希望将结果复制到文字处理文档,最短且最优雅的路径就是通过 R 和 LaTeX。

没有成本。作为一个小型企业的所有者,我很喜欢 R 的免费特定。即使对于更大的企业,知道您能够临时调入某个人并立即让他们坐在工作站旁使用一流的分析软件,也很不错。无需担忧预算。

R 是什么,它有何用途?

作为一种编程语言,R 与许多其他语言都很类似。任何编写过代码的人都会在 R 中找到很多熟悉的东西。R 的特殊性在于它支持的统计哲学。

一种统计学革命:S 和探索性数据分析

140 字符的解释:R 是 S 的一种开源实现,是一种用于数据分析和图形的编程环境。

计算机总是擅长计算 — 在您编写并调试了一个程序来执行您想要的算法后。但在上世纪 60 和 70 年代,计算机并不擅长信息的显示,尤其是图形。这些技术限制在结合统计理论中的趋势,意味着统计实践和统计学家的培训专注于模型构建和假设测试。一个人假定这样一个世界,研究人员在其中设定假设(常常是农业方面的),构建精心设计的实验(在一个农业站),填入模型,然后运行测试。一个基于电子表格、菜单驱动的程序(比如 SPSS 反映了这一方法)。事实上,SPSS 和 SAS Analytics 的第一个版本包含一些子例程,这些子例程可从一个(Fortran 或其他)程序调用来填入和测试一个模型工具箱中的一个模型。

在这个规范化和渗透理论的框架中,John Tukey 放入了探索性数据分析 (EDA) 的概念,这就像一个鹅卵石击中了玻璃屋顶。如今,很难想像没有使用箱线图(box plot) 来检查偏度和异常值就开始分析一个数据集的情形,或者没有针对一个分位点图检查某个线性模型残差的常态的情形。这些想法由 Tukey 提出,现在任何介绍性的统计课程都会介绍它们。但并不总是如此。

与其说 EDA 是一种理论,不如说它是一种方法。该方法离不开以下经验规则:

只要有可能,就应使用图形来识别感兴趣的功能。

分析是递增的。尝试以下这种模型根据结果来填充另一个模型。

使用图形检查模型假设。标记存在异常值。

使用健全的方法来防止违背分布假设。

Tukey 的方法引发了一个新的图形方法和稳健估计的发展浪潮。它还启发了一个更适合探索性方法的新软件框架的开发。

S 语言是在贝尔实验室由 John Chambers 和同事开发的,被用作一个统计分析平台,尤其是 Tukey 排序。第一个版本(供贝尔实验室内部使用)于 1976 年开发,但直到 1988 年,它才形成了类似其当前形式的版本。在这时,该语言也可供贝尔实验室外部的用户使用。该语言的每个方面都符合数据分析的 “新模型”:

S 是一种在编程环境操作的解释语言。S 语法与 C 的语法很相似,但省去了困难的部分。S 负责执行内存管理和变量声明,举例而言,这样用户就无需编写或调试这些方面了。更低的编程开销使得用户可以在同一个数据集上快速执行大量分析。

从一开始,S 就考虑到了高级图形的创建,您可向任何打开的图形窗口添加功能。您可很容易地突出兴趣点,查询它们的值,使散点图变得更平滑,等等。

面向对象性是 1992 年添加到 S 中的。在一个编程语言中,对象构造数据和函数来满足用户的直觉。人类的思维始终是面向对象的,统计推理尤其如此。统计学家处理频率表、时间序列、矩阵、具有各种数据类型的电子表格、模型,等等。在每种情况下,原始数据都拥有属性和期望值:举例而言,一个时间序列包含观察值和时间点。而且对于每种数据类型,都应得到标准统计数据和平面图。对于时间序列,我可能绘制一个时间序列平面图和一个相关图对于拟合模型,我可能绘制拟合值和残差。S 支持为所有这些概念创建对象,您可以根据需要创建更多的对象类。对象使得从问题的概念化到其代码的实现变得非常简单。

一种具有态度的语言:S、S-Plus 和假设测试

最初的 S 语言非常重视 Tukey 的 EDA,已达到只能 在 S 中执行 EDA 而不能执行其他任何操作的程度。这是一种具有态度的语言。举例而言,尽管 S 带来了一些有用的内部功能,但它缺乏您希望统计软件拥有的一些最明显的功能。没有函数来执行双抽样测试或任何类型的真实假设测试。但 Tukey 认为,假设测试有时正合适。

1988 年,位于西雅图的 Statistical Science 获得 S 的授权,并将该语言的一个增强版本(称为 S-Plus)移植到 DOS 以及以后的 Windows? 中。实际认识到客户想要什么后,Statistical Science 向 S-Plus 添加了经典统计学功能。添加执行方差分析 (ANOVA)、测试和其他模型的功能。对 S 的面向对象性而言,任何这类拟合模型的结果本身都是一个 S 对象。合适的函数调用都会提供假设测试的拟合值、残差和 p-值。模型对象甚至可以包含分析的中间计算步骤,比如一个设计矩阵的 QR 分解(其中 Q 是对角线,R 是右上角)。

有一个 R 包来完成该任务!还有一个开源社区

大约在与发布 S-Plus 相同的时间,新西兰奥克兰大学的 Ross Ihaka 和 Robert Gentleman 决定尝试编写一个解释器。他们选择了 S 语言作为其模型。该项目逐渐成形并获得了支持。它们将其命名为 R。

R 是 S 的一种实现,包含 S-Plus 开发的更多模型。有时候,发挥作用的是同一些人。R 是 GNU 许可下的一个开源项目。在此基础上,R 不断发展,主要通过添加包。R 包 是一个包含数据集、R 函数、文档和 C 或 Fortran 动态加载项的集合,可以一起安装并从 R 会话访问。R 包向 R 添加新功能,通过这些包,研究人员可在同行之间轻松地共享计算方法。一些包的范围有限,另一些包代表着整个统计学领域,还有一些包含最新的技术发展。事实上,统计学中的许多发展最初都是以 R 包形式出现的,然后才应用到商用软件中。

在撰写本文时,R 下载站点 CRAN 上已有 4,701 个 R 包。其中,单单那一天就添加了 6 个 R 。万事万物都有一个对应的 R 包,至少看起来是这样。

我在使用 R 时会发生什么?

备注:本文不是一部 R 教程。下面的示例仅试图让您了解 R 会话看起来是什么样的。

R 二进制文件可用于 Windows、Mac OS X 和多个 Linux? 发行版。源代码也可供人们自行编译。

在 Windows? 中,安装程序将 R 添加到开始菜单中。要在 Linux 中启动 R,可打开一个终端窗口并在提示符下键入 R。您应看到类似图 1 的画面。

图 1. R 工作区

在提示符下键入一个命令,R 就会响应。

此时,在真实的环境中,您可能会从一个外部数据文件将数据读入 R 对象中。R 可从各种不同格式的文件读取数据,但对于本示例,我使用的是来自 MASS 包的 michelson 数据。这个包附带了 Venables and Ripley 的标志性文本 Modern Applied Statistics with S-Plus(参见 参考资料)。michelson 包含来自测量光速的流行的 Michelson and Morley 实验的结果。

清单 1 中提供的命令可以加载 MASS 包,获取并查看 michelson 数据。图 2 显示了这些命令和来自 R 的响应。每一行包含一个 R 函数,它的参数放在方括号 ([]) 内。

清单 1. 启动一个 R 会话

2+2 # R can be a calculator. R responds, correctly, with 4.

library(“MASS”) # Loads into memory the functions and data sets from

# package MASS, that accompanies Modern Applied Statistics in S

data(michelson) # Copies the michelson data set into the workspace.

ls() # Lists the contents of the workspace. The michelson data is there.

head(michelson) # Displays the first few lines of this data set.

# Column Speed contains Michelson and Morleys estimates of the

# speed of light, less 299,000, in km/s.

# Michelson and Morley ran five experiments with 20 runs each.

# The data set contains indicator variables for experiment and run.

help(michelson) # Calls a help screen, which describes the data set.

图 2. 会话启动和 R 的响应

现在让我们看看该数据(参见 清单 2)。输出如 图 3 中所示。

清单 2. R 中的一个箱线图

# Basic boxplot

with(michelson, boxplot(Speed ~ Expt))

# I can add colour and labels. I can also save the results to an object.

michelson.bp = with(michelson, boxplot(Speed ~ Expt, xlab=”Experiment”, las=1,

ylab=”Speed of Light – 299,000 m/s”,

main=”Michelson-Morley Experiments”,

col=”slateblue1″))

# The current estimate of the speed of light, on this scale, is 734.5

# Add a horizontal line to highlight this value.

abline(h=734.5, lwd=2,col=”purple”) #Add modern speed of light

Michelson and Morley 似乎有计划地高估了光速。各个实验之间似乎也存在一定的不均匀性。

图 3. 绘制一个箱线图

在对分析感到满意后,我可以将所有命令保存到一个 R 函数中。参见清单 3。

清单 3. R 中的一个简单函数

MyExample = function(){

library(MASS)

data(michelson)

michelson.bw = with(michelson, boxplot(Speed ~ Expt, xlab=”Experiment”, las=1,

ylab=”Speed of Light – 299,000 m/s”, main=”Michelsen-Morley Experiments”,

col=”slateblue1″))

abline(h=734.5, lwd=2,col=”purple”)

}

这个简单示例演示了 R 的多个重要功能:

保存结果—boxplot() 函数返回一些有用的统计数据和一个图表,您可以通过类似 michelson.bp = … 的负值语句将这些结果保存到一个 R 对象中,并在需要时提取它们。任何赋值语句的结果都可在 R 会话的整个过程中获得,并且可以作为进一步分析的主题。boxplot 函数返回一个用于绘制箱线图的统计数据(中位数、四分位等)矩阵、每个箱线图中的项数,以及异常值(在 图 3 中的图表上显示为开口圆)。请参见图 4。

图 4. 来自 boxplot 函数的统计数据

公式语言— R(和 S)有一种紧凑的语言来表达统计模型。参数中的代码 Speed ~ Expt 告诉函数在每个 Expt (实验数字)级别上绘制 Speed 的箱线图。如果希望执行方差分析来测试各次实验中的速度是否存在显著差异,那么可以使用相同的公式:lm(Speed ~ Expt)。公式语言可表达丰富多样的统计模型,包括交叉和嵌套效应,以及固定和随机因素。

用户定义的 R 函数— 这是一种编程语言。

R 已进入 21 世纪

Tukey 的探索性数据分析方法已成为常规课程。我们在教授这种方法,而统计学家也在使用该方法。R 支持这种方法,这解释了它为什么仍然如此流行的原因。面向对象性还帮助 R 保持最新,因为新的数据来源需要新的数据结构来执行分析。InfoSphere? Streams 现在支持对与 John Chambers 所设想的不同的数据执行 R 分析。

R 与 InfoSphere Streams

InfoSphere Streams 是一个计算平台和集成开发环境,用于分析从数千个来源获得的高速数据。这些数据流的内容通常是非结构化或半结构化的。分析的目的是检测数据中不断变化的模式,基于快速变化的事件来指导决策。SPL(用于 InfoSphere Streams 的编程语言)通过一种范例来组织数据,反映了数据的动态性以及对快速分析和响应的需求。

我们已经距离用于经典统计分析的电子表格和常规平面文件很远,但 R 能够应付自如。从 3.1 版开始,SPL 应用程序可将数据传递给 R,从而利用 R 庞大的包库。InfoSphere Streams 对 R 的支持方式是,创建合适的 R 对象来接收 SPL 元组(SPL 中的基本数据结构)中包含的信息。InfoSphere Streams 数据因此可传递给 R 供进一步分析,并将结果传回到 SPL。

R 需要主流硬件吗?

我在一台运行 Crunchbang Linux 的宏碁上网本上运行了这个示例。R 不需要笨重的机器来执行中小规模的分析。20 年来,人们一直认为 R 之所以缓慢是因为它是一种解释性语言,而且它可以分析的数据大小受计算机内存的限制。这是真的,但这通常与现代机器毫无干系,除非应用程序非常大(大数据)。

R 的不足之处

公平地讲,R 也有一些事做不好或完全不会做。不是每个用户都适合使用 R:

R 不是一个数据仓库。在 R 中输入数据的最简单方式是,将数据输入到其他地方,然后将它导入到 R 中。人们已经努力地为 R 添加了一个电子表格前端,但它们还没流行起来。电子表格功能的缺乏不仅会影响数据输入,还会让以直观的方式检查 R 中的数据变得很困难,就像在 SPSS 或 Excel 中一样。

R 使普通的任务变得很困难。举例而言,在医疗研究中,您对数据做的第一件事就是计算所有变量的概括统计量,列出无响应的地方和缺少的数据。这在 SPSS 中只需 3 次单击即可完成,但 R 没有内置的函数来计算这些非常明显的信息,并以表格形式显示它。您可以非常轻松地编写一些代码,但有时您只是想指向要计算的信息并单击鼠标。

R 的学习曲线是非平凡的。初学者可打开一个菜单驱动的统计平台并在几分钟内获取结果。不是每个人都希望成为程序员,然后再成为一名分析家,而且或许不是每个人都需要这么做。

R 是开源的。R 社区很大、非常成熟并且很活跃,R 无疑属于比较成功的开源项目。前面已经提到过,R 的实现已有超过 20 年历史,S 语言的存在时间更长。这是一个久经考验的概念和久经考验的产品。但对于任何开源产品,可靠性都离不开透明性。我们信任它的代码,因为我们可自行检查它,而且其他人可以检查它并报告错误。这与自行执行基准测试并验证其软件的企业项目不同。而且对于更少使用的 R 包,您没有理由假设它们会实际生成正确的结果。

结束语

我是否需要学习 R?或许不需要需要 是一个感情很强烈的词。但 R 是否是一个有价值的数据分析工具呢?当然是的。该语言专为反映统计学家的思考和工作方式而设计。R 巩固了良好的习惯和合理的分析。对我而言,它是适合我的工作的工具。