在计算机实验室中教授R的好方法是什么?


15

已经有几个很好的问题,并在集合的入门书籍的答案或方法,以学习[R如这里这里。但是我有一个稍微不同的问题-在计算机实验室中运行一个小时的会话(或几个这样的会话)的最佳方法,这将使人们开始使用R,熟悉其基本方法等。

我目前的计划是有效地学习Verzani的SimpleR之类的入门章节,然后介绍一个熟悉的数据集,但是人们发现其他有用的方法吗?例如,直接引入真实数据还是以更抽象的方式解决问题是否很好?我应该详尽地学习如何使用方括号,还是要激发人们使用点阵图形的实例?

我的目标受众熟悉统计数据(尽管不是专家)和合格的SPSS用户;除了您在SPSS和类似功能中获得的那种宏和脚本之外,对编程语言不熟悉。

任何提示或对课程计划的引用,将不胜感激。但是,我不想复制许多介绍R的在线材料的好清单-严格参考面对面的教学问题。


可能应该是社区维基,对吧?
彼得·埃利斯

1
听起来对我来说是个好主意。:)
Michelle

1
对于如何回答此问题,真正至关重要的是您的设置如何。如果你有一个单一的 “小时的会议......在计算机实验室”也将是非常小,你可以做,你将有很少的转换。如果您有“几个”,并且他们已经非常了解统计信息和基本编程,则可以启动泵,以便他们可以继续前进并热衷于尝试,但是后者需要使用其他方法。对于具有某些统计数据但没有编程知识的人,一学期的课程将是理想的选择。
gung-恢复莫妮卡

嗯,好点@gung,好的,设置很具体。我是他们的经理,所以只能告诉他们该怎么做。我们每两周进行一次有关统计技能的会议(我们中的几个人轮流介绍),这变得越来越实用,并且我们已经同意在实验室中对具有真实数据的机器进行很多操作。因此,我应该指定真正的要求是让他们在一到两个会话中对R足够熟悉,以使我们在进行拟合模型拟合或在后续会话中查看诊断图之类的工作时,不会被基础知识完全分散。
彼得·埃利斯

2
@gung为您的完整评论+1。我从事R的教学已经很长时间了,但我终于得出了类似的结论:对R编程不了解或缺乏命令行提示的人可能会遇到一些与R接触的困难。当我们不得不让学生熟悉R时,情况会变得更糟。几小时内使用R进行统计...
chl 2012年

Answers:


7

我主张一种完全不同的方法。我看过R教程是从两个不同的角度讲授的:一种是构建块方法,向用户介绍R的基本概念;另一种是震撼人心的方法,向用户展示R的惊人功能,但留下了对如何做的了解相对较少。后者肯定会引起小学生更强烈的共鸣,但是在实际培养用户方面似乎没有人非常有效。

相反,我将在SPSS中执行一个常见且相对简单的任务,并逐步将其转换为R,而您则需要一点点假冒的天赋-例如,遵循西安市的出色建议,可以查找一些所需的功能,??而不仅仅是从内存中调用正确的功能。您的新手几乎可以肯定会在学习R的同时转换现有流程,而不是从头开始编写它们-那么为什么不向他们确切展示您将如何处理呢?

一个很好的例子可能包括仅加载数据,执行一些描述性操作并弹出一些基本图。 lm()可以非常非常简单,并产生他们可以理解的结果,并且可以将结果与SPSS输出进行比较,因此可能也很容易涵盖。

对于家庭作业,请他们采取行动以转换他们的简单流程之一,或者加载并浏览他们非常熟悉的数据集。给他们一些一对一的时间,找出问题出在哪里,然后在下一个会话中介绍更多示例转换。您列表中的概念将不可避免地出现(我敢打赌:因素与字符向量,相较于适用),然后您将有一个现实世界来覆盖它们。如果他们还没有提出(attach),那么他们还不是真正需要的-如果这意味着您的新手早些时候(for而不是apply)编写了一些非惯用的代码,我看不出有什么害处。

这样,您的学生可以以与外语学生一样的方式进步(或者至少是我的方式):简单表达的粗略翻译引起了人们对更复杂表达的渴望,这引起了人们对语法的更深刻理解的渴望。 ,最终导致惯用语表达。不要太早跳到“语法”,也不要太担心教给他们他们不需要的东西,因为他们可能会忘记它。关于惯用语表达的温柔指针很棒(forvs apply),但主要的事情是让它们生成输出并自行探索。


(+1)谢谢,马特,听起来像是很棒的建议。我特别喜欢最后两段。
chl 2012年

感谢Matt(以及其他所有人-一切出色的帮助)。我一定会使用?? 方法,让他们在实验室中重新创建并作为家庭作业的常规任务,他们可以与其他软件(SPSS和Harmoni,这基本上是一个交叉表程序包)一起执行。我仍然需要一些合理的指导,只是让他们打开东西并知道从哪里开始(并且我已经相应地修改了第1课的计划),但是我认为激发实验室外自我学习的绝对途径。
彼得·埃利斯

7

好的,到目前为止,这是我自己的答案,我认为这将使人们入门并激发他们学习更多信息(我正在努力使他们摆脱SPSS,这实际上无法执行我们所需的某些工作,例如,复杂的调查分析,至少而不购买我拒绝做的更多模块)。

第一节课结束时,您应该能够:

基本

  • 使用界面进行简单的计算(使用R作为计算器)
  • 启动,保存和加载脚本窗口并有效使用
  • 在工作空间中创建和删除对象
  • 查看哪个文件夹是您的工作文件夹
  • 了解P:/ R / yourid文件夹的工作方式以及在退出时保存工作空间的作用
  • 加载包含XXX(我们的常用数据)的工作空间的图像
  • 列出内存中的对象
  • 列出数据框中的列(变量)的名称
  • 在屏幕上打印对象
  • 附加和分离数据框
  • 知道什么意思:对象,函数,参数(函数的参数),工作空间,向量,数据框,矩阵,数值,因子
  • 知道如何在功能上寻求帮助
  • 采用 ??查找相关功能列表
  • 在何处上网以及我们的本地书籍和局域网以获取更多资源
  • 足够了解R基础知识,以参加有关特定统计技术的实验会议

资料处理

  • 使用:运算符创建数字向量
  • 制作一个变量的计数表
  • 对两个变量进行计数交叉表
  • 创建一个新对象(例如上表之一)以进行进一步操作
  • 转置矩阵或表
  • 使用tapply()通过因子创建连续变量均值的向量
  • 使用cbind()或data.frame()将多个向量绑定在一起
  • 使用[]创建矩阵的子集
  • 创建一个简单的变换,例如对数或平方根

统计

  • 计算两个连续变量的相关性

图形

  • 创建连续变量的直方图
  • 创建一个图形窗口并将其分为2或4部分
  • 创建连续变量的密度线图
  • 创建两个连续变量的散点图
  • 向散点图添加一条直线(垂直,水平或ab)
  • 创建轴和标题的标签

三节课的最后并进行一系列练习之后,您还应该能够:

基本

  • 以SPSS或.csv格式导入数据
  • 删除工作区中的所有对象以重新开始
  • 使用软件包库
  • 保存工作区图像并了解基本原理R和内存
  • 产生随机变量
  • 使用c()创建向量
  • 对去哪里学习新方法和技术有很好的感觉

资料处理

  • 在真实的数据集上使用aggregate(),例如按月份和国家/地区划分的访问者人数
  • ==,!=和%in%运算符;逻辑向量 并使用它们来子集数据
  • ifelse()并使用它来创建新变量
  • 最大,最小和相似函数,以及它们如何与向量一起使用
  • 创建向量或矩阵以存储大量结果
  • 使用循环多次重复类似的功能
  • 使用apply()将函数应用于矩阵的每一列或每一行
  • 创建有序因子
  • 使用cut()重新编码数字变量

统计

  • 卡方检验列联表
  • 健壮的相关性版本
  • 将线性模型拟合到两个连续变量,将结果放置在对象中,然后使用anova(),summary()和plot()查看结果
  • 对模型及其在R中的工作方式有足够的了解,以准备将您的技能应用于更广泛的模型类型
  • 使用boot()对基本功能(例如cor(),mean()或var())执行引导
  • 在真实数据集上使用sample()

图形

  • 给定因子的不同级别,创建连续变量的晶格密度线图
  • qqnorm
  • 建立一个散点图,用不同的颜色和字符点显示一个因素的不同水平;向现有散点图添加点或线
  • 添加图例
  • 点图
  • errbar()
  • 使用循环在页面上绘制多个图表

2
根据您的设置,这似乎是合理的,但新手在一个小时内可以解决很多问题。我会不断强调他们可用来建立自给自足的资源。具体来说,请阅读安装和使用帮助文件随附的R手册。例如,要介绍相关性,首先要显示“ correlation”,然后显示如何搜索列表,然后显示“ cor”并显示如何阅读和理解帮助;从文档中教cor,hist等。不管他们有多聪明,有只有一个小时的限制-他们需要学习来获得信息和故障排除自己
gung-恢复莫妮卡

1
我想我距离您只有10分钟的步行路程,所以如果您想喝杯咖啡喝一杯,请大喊大叫。:)
米歇尔

我不认为这主要是什么,而是如何。这是关于让学生部分地自己学习东西,并准备一份全面的备忘单以及一些家庭作业。
Ondrej'2

@Michelle-听起来不错,请给我发电子邮件至peter.ellis [at] med.govt.nz
Peter

4
这是一个雄心勃勃的清单!我无法想象您会在三个小时内涵盖所有这些内容-我想我什至无法说出三个小时内涵盖所有这些内容的文字,更不用说回答问题了。有一些概念我会完全跳过:工作空间(我不想使用它们-从脚本中重新生成所有内容会使代码更健壮),附加(也有问题,尤其是对于不了解环境的新用户),转置(琐碎的)在需要时进行查找),然后绑定(我几乎从不使用此功能)。
马特·帕克

2

我将在Peter的列表中添加:

  1. 子集数据帧:按观察子集(例如,高于3的所有响应),按变量子集。
  2. 使用ifelse语句(这对我来说是一个巨大的学习曲线,我一直尝试使用if语句的类型),尤其是嵌套的ifelse。
  3. 使用聚合命令将数据汇总到较小的数据框中。
  4. 学习使用==运算符。
  5. 使用<-而不是=
  6. 重命名变量
  7. 如果A是数据帧中的变量并且B是单个值,则基本矢量化陷阱(例如SAS中的max(A,B))不会执行R中的max(A,B)。为了等效于SAS代码(可能还有SPSS代码),我使用了ifelse语句。
  8. 与一起使用,而不是附加。:)

更多的想法:他们可能在中使用COMPUTE很多SPSS,因此介绍如何做到这一R点将是不错的。另外,如何RECODE在R中进行变量转换。当我使用时,SPSS我认为我的大部分“非分析”工作都使用了这两个命令。


1
看看pmax ...
Elvis

@西安,现在去那里偷看(或戳!)啊,我没有点击过那是您,我已经通过R-blogger链接访问了您的博客几次。:)
米歇尔(Michelle)

2
进行覆盖时,请ifelse务必向他们展示其工作方式以及其文档中的警告含义。一旦您考虑了一下,它就会在逻辑上起作用,但是我已经看到了有关ifelse“更改”变量类型并造成大量时间浪费的完全困惑。
韦恩

2
@西安:R帮助说,“运算符=仅在顶层(例如,在命令提示符下键入的完整表达式中)或作为括号列表中的子表达式之一才允许使用。” 我可以想到您博客中未提及的其他情况,尽管到目前为止只有C-ish这样的事情:a <- 1:5 ; b <- 4 ; a[b = 3] ; b ; a[b <- 3] ; b下标给出相同的结果,但是b有所不同(第一次不变,第二次改变)。该=从来就不是被分配并且应该从未改变,力图使[R更可口。不要这样
韦恩

1
@Elvis向您提供1000多个互联网,pmax效果很好。
米歇尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.