美文网首页SAS画图
326:一起来学习密度图

326:一起来学习密度图

作者: SASPRO的打工人生活 | 来源:发表于2024-04-01 20:43 被阅读0次

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

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

    所以,我们先学习一下密度图(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;

    相关文章

      网友评论

        本文标题:326:一起来学习密度图

        本文链接:https://www.haomeiwen.com/subject/hrdrtjtx.html