SAS画图

326:一起来学习密度图

2024-04-01  本文已影响0人  SASPRO的打工人生活

密度图在工作中遇见的比较少,但是也碰到好几次读者询问,所以自己查了一些资料,跟大家分享一下。

大家首先要知道图形其实是表格数据的另一种呈现方式,我们得知道图形要展示什么数据,怎么展示,之后就是去实现了。

所以,我们先学习一下密度图(Density Plot)能传达什么信息。密度图也叫做核密度图( Kernel Density Plot)。密度图将数据在连续间隔或时间段内的分布可视化(也就是X轴,但不一定都是代表时间)。

这个图表是直方图的一种变体,它使用核平滑来绘制值,通过平滑噪声来实现更平滑的分布(As opposed to the histogram, the density plot can smooth out the distribution of values and reduce the noise.)。密度图的峰值有助于显示值在区间内的集中位置。

密度图相对于直方图的一个优势是,它们更善于确定分布形状,因为它们不受所使用的箱子数量的影响。仅包含4个bin的直方图不会产生像20个bin直方图那样可区分的分布形状。(这说的是什么意思我也不懂,第一次听到箱子)

比如下面是一张密度图,你能从这张图获取什么信息?

1)密度图的峰值位置可以反映数据的集中趋势,比如均值或中位数

2)密度图的宽度可以表明数据的离散程度,曲线越宽,数据的变异性越大。

3)在密度图的尾部可能会出现一些小的峰,这可能表明数据中存在异常值或次要的群体。

4)如果在同一坐标轴上绘制多个不同组的密度图,可以直观地比较它们的分布差异。

5)密度图的y轴表示概率密度,因此可以通过图形了解数据在某个区间内出现的概率。

最著名的密度曲线是钟形曲线,它代表正态分布。

是不是有些困惑?没事,我用SAShelp的cars数据集举个例子,针对horsepower这个变量的值,先看下基本的统计量,重点关注一下中位值和平均值,然后看一下对应的直方图。

data cars;

set sashelp.cars;

if type in ("Hybrid","SUV","Truck");

keep horsepower Type;

proc sort;by Type;

run;

proc univariate data=cars;

by Type;

var horsepower;

run;

type="Hybrid" type="Hybrid" type="SUV" type="SUV"

看密度图的峰值,代表均值和中位数的集中位置,可以看到峰值聚集在230多,跟算出来的均值是差不多的,这个解释了信息1)

type="Truck" type="Truck"

这是3种类型混合在一起的密度图,正态倒是能清晰的看出

通过比较3个密度图的宽度,我们可以看到type="SUV"和type="Truck"曲线更宽,所以type="SUV"和type="Truck"的变异性更大,也可以看到这两组数据的方差和标准差(Variance & Std Deviation)也更大(方差和标准差就是反映数据变异程度的),所以通过这张图解释了信息2)

前面说过密度图能够看出数据的大致分布形状。

比如下面这样是左偏态分布,也就意味着平均值比中位数小。

这个是右偏态分布,也就意味着平均值比中位数大。

还有一个就是无偏态分布,意味着平均值跟中位数相等。

上面的数据感觉偏态不太明显,即使第3张图mean>median,知道是右偏态,但是感觉图形跟模板差好多,所以我dummy一些数据

data cars_1;

set sashelp.cars;

if type in ("Hybrid","SUV","Truck");

if type="Truck" then horsepower=(1 /rand("Beta", 2, 5));

keep horsepower Type;

proc sort;by Type;

run;

这也是一个右偏态的数据,说实话,感觉跟模板还是不太像,但是右偏态数据在均值左侧的数量较多,这里的均值是6.26,通过柱状图也可以看出数据集中在哪,所以还是满足右偏态。

大家可以通过proc univariate算出来的值和图形比较,看下信息1)到5)是否都符合,除了信息3)数据我没dummy,其他基本符合了。

data cars;

set sashelp.cars;

if type in ("Hybrid","SUV","Truck");

keep horsepower Type;

proc sort;by Type;

run;

proc univariate data=cars;

by Type;

var horsepower;

run;

proc template;

    define statgraph densityplot;

        begingraph;

            layout overlay;

/* histogram horsepower / ;*/

                densityplot horsepower /group=type normal() lineattrs=(thickness=2)

                    name='density' legendlabel='Type';

                discretelegend 'density';

            endlayout;

        endgraph;

    end;

run;

proc sgrender data=cars template=densityplot;

/*by Type;*/

run;

data cars_1;

set sashelp.cars;

if type in ("Hybrid","SUV","Truck");

if type="Truck" then horsepower=(1 /rand("Beta", 2, 5));

keep horsepower Type;

proc sort;by Type;

run;

data cars;

set cars_1 ;

proc sort;by Type;

run;

proc univariate data=cars;

by Type;

var horsepower;

run;

proc template;

    define statgraph densityplot;

        begingraph;

            layout overlay;

histogram horsepower / ;

                densityplot horsepower / normal() lineattrs=(thickness=2)

                    name='density' legendlabel='Type';

                discretelegend 'density';

            endlayout;

        endgraph;

    end;

run;

proc sgrender data=cars template=densityplot;

by Type;

run;

上一篇下一篇

猜你喜欢

热点阅读