优秀的编程知识分享平台

网站首页 > 技术文章 正文

用R语言做数据分析——多元数据的绘图方法

nanyue 2024-08-06 18:07:59 技术文章 4 ℃

前面介绍了许多数据的图形表示方法,但大多数是针对一元、二元数据的,三维图形虽然能画出来,但并不方便。对于三维以上数据如何来描述呢?结合R语言的特点,这里介绍几种多元数据的绘图方法:轮廓图、星图和调和曲线图

设变量是p维数据,有n个观测数据,其中第k次的观测值为:

n次观测数据组成矩阵

轮廓图

轮廓图由以下作图步骤完成:

  1. 作直角坐标系,横坐标取p个点,以表示p个变量;

  2. 对给定的一次观测值,在p个点上的纵坐标与对应的变量取值成正比;

  3. 连接此p个点得一折线,即为该次观测值的一格轮廓线;

  4. 对于n次观测值,每次都重复上述步骤,可画出n条折线,构成n次观测值的轮廓图。

编写轮廓图函数,存储文件为“outline.R”

outline<-function(x,txt=TRUE){

if(is.data.frame(x)==TRUE){

x<-as.matrix(x)

}

m<-nrow(x);

n<-ncol(x);

plot(c(1,n),c(min(x),max(x)),type="n",main="The outline graph of Data", xlab = "Number",ylab="Value")

for(i in 1:m){

lines(x[i,],col=i)

if(txt==TRUE){

k<-dimnames(x)[[1]][i]

text(1+(i-1)%%n,x[i,1+(i-1)%%n],k)

}

}

}

其中x是矩阵或数据框,txt是逻辑变量,当txt=TRUE(缺省值)时,绘图时给出观测值的标号,否则不给出标号。函数的运行结果是绘出n次观测值的轮廓图。

例子:为考察学生的学习情况,学生随机的抽取12名学生的5门课期末考试的成绩。如下图所示,画出12名学生学习成绩的轮廓图。

将数据输入到数据文件中,文件名为“course.data”

> X<-read.table("course.data")

> source("outline.R")

> outline(X)

由轮廓图可以直观的看出,哪个学生的成绩相似、哪些属于优秀、哪些中等、哪些较差。对于各门课程而言,也可以直观地看出各课程成绩的好坏和分散情况。这种图形在聚类分析中颇有帮助。

星图

星图的作图步骤是:

  1. 作一个圆,并将圆周p等分;

  2. 连接圆心和各分点,把这p条半径一次定义为变量的坐标轴,并标以适当的刻度;

  3. 对给定的一次观测值,把p个变量分辨取在相应的坐标轴上,然后将它们连接成一个p边形;

  4. n次观测可画出n个p边形。

R语言给出了作星图函数starts(),例如,画出上述学生学习成绩的星图,只需要

>stars(X)

星图中水平轴是变量X1,沿逆时钟方向依次是X2、X3...。由于星图既像雷达屏幕上看到的图像,也像一个蜘蛛网,因此,星图也称为雷达图或蜘蛛图。

starts()函数可以加各种参数,进而绘制出不同的星图,具体请参看官方文档。例如:

> stars(X,full = FALSE,draw.segments = TRUE,key.loc = c(5,0.5),mar=c(2,0,0,0))

调和曲线图

调和曲线图的思想是 是根据三角变换方法将 p 维空间的点映射到二维平面上的曲线上。对于p维数据,假设Xr是第r观测值,即

则对应的调和曲线是:

n次观测数据对应n条曲线,现在同一张平面上就是一张调和曲线图。当变量数据的数值相差太悬殊,最好先标准化再作图。

编写调和权限函数,存储文件为“onison.R”

unison<-function(x){

if(is.data.frame(x)==TRUE)

x<-as.matrix(x)

t<-seq(-pi,pi,pi/30)

m<-nrow(x);

n<-ncol(x);

f<-array(0,c(m,length(t)))

for(i in 1:m){

f[i,]<-x[i,1]/sqrt(2)

for(j in 2:n){

if(j%%2==0)

f[i,]<-f[i,]+x[i,j]*sin(j/2*t)

else

f[i,]<-f[i,]+x[i,j]*cos(j%/%2*t)

}

}

plot(c(-pi,pi),c(min(f),max(f)),type="n",main="The Unison graph of Data",xlab = "t",ylab = "f(t)")

for(i in 1:m) lines(t,f[i,],col=i)

}

加载并调用函数

> source("onison.R")

> unison(X)

调和曲线图对聚类分析帮助很大,如果选择聚类统计量为距离,则同类的曲线拧在一起,不同类的曲线拧成不同的束,非常直观。

Tags:

最近发表
标签列表