非参数统计(R软件)参考答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内容:

, ,

上机实践:将MASS数据包用命令library(MASS)加载到R中,调用自带“老忠实”喷泉数据集geyer,它有两个变量:等待时间waiting和喷涌时间duration,其中…

(1) 将等待时间70min以下的数据挑选出来;

(2) 将等待时间70min以下,且等待时间不等于57min的数据挑选出来;

(3) 将等待时间70min以下喷泉的喷涌时间挑选出来;

(4) 将喷涌时间大于70min喷泉的等待时间挑选出来。

解:读取数据的R命令:

library(MASS);#加载MASS包

data(geyser);#加载数据集geyser

attach(geyser);#将数据集geyser的变量置为内存变量

(1) 依题意编定R程序如下:

sub1geyser=geyser[which(waiting<70),1];

#提取满足条件(waiting<70)的数据,which(),读取下标

sub1geyser[1:5];#显示子数据集sub1geyser的前5行

[1] 57 60 56 50 54

(2) 依题意编定R程序如下:

Sub2geyser=geyser[which((waiting<70)&(waiting!=57)),1];

#提取满足条件(waiting<70& (waiting!=57)的数据.

Sub2geyser[1:5];#显示子数据集sub1geyser的前5行

[1] 60 56 50 54 60 ……

原数据集的第1列为waiting喷涌时间,所以用[which(waiting<70),2]

(3)

Sub3geyser=geyser[which(waiting<70),2];

#提取满足条件(waiting<70)的数据,which(),读取下标

Sub3geyser[1:5];#显示子数据集sub1geyser的前5行

[1] ……

原数据集的第2列为喷涌时间,所以用[which(waiting<70),2]

(4)

Sub4geyser=geyser[which(waiting>70),1];

#提取满足条件(waiting<70)的数据,which(),读取下标

Sub4geyser[1:5];#显示子数据集sub1geyser的前5行

[1] 80 71 80 75 77…….

如光盘文件中的数据,一个班有30名学生,每名学生有5门课程的成绩,编写函数实现下述要求:

(1) 以的格式保存上述数据;

(2) 计算每个学生各科平均分,并将该数据加入(1)数据集的最后一列;

(3) 找出各科平均分的最高分所对应的学生和他所修课程的成绩;

(4) 找出至少两门课程不及格的学生,输出他们的全部成绩和平均成绩;

(5) 比较具有(4)特点学生的各科平均分与其余学生平均分之间是否存在差异。

先将数据集读入R系统

student=("…",header=T)

class(student):#显示数据集student的类型,

[1] ""#student是数据框

names(student);#显示数据框student的变量

[1] "name" "math" "physics" "chem" "literat" "english" "mean"

#输出显示,数据框student有7个变量,第7个变量是平均值mean。

(1)

(student,"F:\\gzmu非参数统计\\data2014\\各章数据\\附录A\\",=T)

打开

"name" "math" "physics" "chem" "literat" "english"

"1" "Katty" 65 61 72 84 79

"2" "Leo" 77 77 76 64 55

……

(2) 依题意,要为原始数据集添加一个变量,即添加一列在最后。[,6]=

me=rep(0,30);

for(i in 1:30){x=(student[i,2:6]);

me[i]=mean(x);}

student$mean=me;

#上面程序的最后一行也可以如此:student[,7]=me

names(student);

[1] "name" "math" "physics" "chem" "literat" "english" "mean"

#如上显示,程序运行后数据框student添加了第7列mean.

(3) 依题意,在(2)的程序运行后做,要用到which(mean==max(mean)),如同。

attach(student);

maxme=student[which(mean==max(mean)),];#找出最高平均分的记录,并赋予maxme;

maxme;

name math physics chem literat english mean

15 Liggle 78 96 81 80 76

(4) 依题意,要用到二重的for和if. 由原数据框geyser给data1赋值时要用到数据转换:

#x=(student[i,2:6]);#读取student第i行2:6列的数据,#data1[k,]=x;#将x赋给data4

#的第k行。sum(x<60)是不及格门数。

Data1=student[1,];#赋初值

k=0;

for(i in 1:30){x=(student[i,2:6]);

if (sum(x<60)>1){k=k+1;data1[k,]=student[i,];}}

data1

name math physics chem literat english mean

1 Ricky 67 63 49 65 57

7 Simon 66 71 67 52 57

9 Jed 83 100 79 41 50

10 Jack 86 94 97 51 55

12 Jetty 67 84 53 58 56

13 Corner 81 62 69 56 52

14 Osten 71 64 94 52 52

25 Amon 74 79 95 59 59

(5) 依题意,要创造两个子集data4和data2, 用两样本的比较方法比较他们的平均成绩是否有显着差异。类

相关文档
最新文档