前面介绍了许多数据的图形表示方法,但大多数是针对一元、二元数据的,三维图形虽然能画出来,但并不方便。对于三维以上数据如何来描述呢?结合R语言的特点,这里介绍几种多元数据的绘图方法:轮廓图、星图和调和曲线图。 设变量是p维数据,有n个观测数据,其中第k次的观测值为: n次观测数据组成矩阵 轮廓图轮廓图由以下作图步骤完成:
编写轮廓图函数,存储文件为“outline.R” outline<> if(is.data.frame(x)==TRUE){ x<> } m<> n<> 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<> text(1+(i-1)%%n,x[i,1+(i-1)%%n],k) } } } 其中x是矩阵或数据框,txt是逻辑变量,当txt=TRUE(缺省值)时,绘图时给出观测值的标号,否则不给出标号。函数的运行结果是绘出n次观测值的轮廓图。 例子:为考察学生的学习情况,学生随机的抽取12名学生的5门课期末考试的成绩。如下图所示,画出12名学生学习成绩的轮廓图。 将数据输入到数据文件中,文件名为“course.data” > X<> > source('outline.R') > outline(X) 由轮廓图可以直观的看出,哪个学生的成绩相似、哪些属于优秀、哪些中等、哪些较差。对于各门课程而言,也可以直观地看出各课程成绩的好坏和分散情况。这种图形在聚类分析中颇有帮助。 星图星图的作图步骤是:
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<> if(is.data.frame(x)==TRUE) x<> t<-seq(-pi,pi,pi>-seq(-pi,pi,pi> m<> n<> f<> for(i in 1:m){ f[i,]<-x[i,1]>-x[i,1]> for(j in 2:n){ if(j%%2==0) f[i,]<-f[i,]+x[i,j]*sin(j>-f[i,]+x[i,j]*sin(j> else f[i,]<-f[i,]+x[i,j]*cos(j%>-f[i,]+x[i,j]*cos(j%> } } 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) 调和曲线图对聚类分析帮助很大,如果选择聚类统计量为距离,则同类的曲线拧在一起,不同类的曲线拧成不同的束,非常直观。 |
|