R数据科学 您所在的位置:网站首页 战争召唤哪个变量最重要 R数据科学

R数据科学

2023-08-31 03:02| 来源: 网络整理| 查看: 265

.5.1 习题解答问题一

前面对比了已取消航班和未取消航班的出发时间,使用学习到的知识对这个对比的可视化结果进行改善。

解答

可以绘制箱线图进行比较

nycflights13::flights %>% mutate( cancelled = is.na(dep_time), sched_hour = sched_dep_time %/% 100, sched_min = sched_dep_time %% 100, sched_dep_time = sched_hour + sched_min / 60 ) %>% ggplot() + geom_boxplot(mapping = aes(y = sched_dep_time, x = cancelled)) 问题二

在钻石数据集中,哪个变量对于预测钻石的价格最重要?这个变量与切割质量的关系是怎样的?为什么这两个变量的关系组合会导致质量更差的钻石价格更高呢?

解答

我会先从如下几个变量考虑:carat、clarity、color和cut。我忽略了刻画砖石维度的变量,因为carat测量的是钻石的大小,因此包含了这些变量中的大部分信息。因为price和carat都是连续型变量,可以通过绘制散点图来寻找它们之间的关系:

ggplot(diamonds, aes(x = carat, y = price)) + geom_point()

然而,由于数据中有大量的点,我将绘制对carat进行分区的箱线图,需要注意的是,装箱宽度的选择很重要,如果宽度太大,就会模糊任何关系;如果宽度太小,箱中的值可能变化太大,无法揭示潜在的趋势:

ggplot(data = diamonds, mapping = aes(x = carat, y = price)) + geom_boxplot(mapping = aes(group = cut_width(carat, 0.1)), orientation = "x")

color与price之间存在微弱的负相关关系。钻石颜色的等级从D(最好)到J(最差)。目前,color的级别顺序是错误的。在绘图之前,我将重排color的顺序,使它们在x轴上的质量顺序递增。

ggplot(data = diamonds, mapping = aes(x = carat, y = price)) + geom_boxplot(mapping = aes(group = cut_width(carat, 0.1)), orientation = "x") ```diamonds %>% mutate(color = fct_rev(color)) %>% ggplot(aes(x = color, y = price)) + geom_boxplot()diamonds %>% mutate(color = fct_rev(color)) %>% ggplot(aes(x = color, y = price)) + geom_boxplot()

clarity与price之间也存在微弱的负相关。清晰度的等级从I1(最差)到IF(最好)。

ggplot(data = diamonds) + geom_boxplot(mapping = aes(x = clarity, y = price))

就clarity和color而言,每个类别内部的差异要比类别之间的差异大得多。carat显然是预测钻石价格的最佳指标。现在我们已经确定carat似乎是最好指标,它和cut之间的关系是什么?因为这是连续(carat)和分类(cut)变量的示例,所以可以用箱形图将其可视化。

ggplot(diamonds, aes(x = cut, y = carat)) + geom_boxplot()

在每种切割类别中,克拉大小的分布有很大的变化。carat与cut之间有轻微的负相关。值得注意的是,克拉最大的钻石上均值最低。这种消极的关系可能是由于钻石被选择出售的方式。较大的钻石可以通过较简单的切割就可获利出售,而较小的钻石需要较精细的切割。

问题三

安装ggstance包,并创建一个横向箱线图。这种方法与使用coord_flip()函数有何区别?

解答使用coord_flip()函数ggplot(data = mpg) + geom_boxplot(mapping = aes(x = reorder(class, hwy, FUN = median), y = hwy)) + coord_flip() 安装ggstance包library("ggstance") ggplot(data = mpg) + geom_boxploth(mapping = aes(y = reorder(class, hwy, FUN = median), x = hwy))

【注】会发现得到的两幅图是一样的,但是x和y表示的变量却不同。现在的ggplot2可以直接通过设置参数orientation来改变图形朝向。

ggplot(data = mpg) + geom_boxplot(mapping = aes(y = reorder(class, hwy, FUN = median), x = hwy), orientation = "y") 问题四

箱线图存在的问题是,在小数据集时代开发而成,对于现在的大数据集会显示出数量极其庞大的异常值。解决这个问题的一种方法是使用字母价值图。安装lvplot包,并尝试使用geom_lv()函数来显示价格基于切割质量的分布。你能发现什么问题?如何解释这种图形?

解答

像箱形图一样,字母值图的箱形图对应于分位数。然而,它们包含的分位数远比箱形图多。它们对于大型数据集非常有用,因为, 更大的数据集可以给出超过四分位数的精确估计。并且更大的数据集应该有更多的异常值(以绝对值计算)。

ggplot(diamonds, aes(x = cut, y = price)) + geom_lv() 问题五

比较并对比geom_violin()、分面的geom_histogram()和着色的geom_freqploy()。每种方法的优缺点是什么?

解答

geom_freqpoly()更适合查找:这意味着给定价格,很容易知道哪个切割密度最高。然而,重叠的线使得区分总体分布如何相互关联变得困难。 geom_violin()和geom_histogram()有相似的优点和缺点。很容易从视觉上区分分布整体形状的差异(偏斜度、中心值、方差等)。然而,由于我们不能轻易地比较分布的垂直值,因此很难查找给定价格下哪一类别的密度最高。所有这些方法都依赖于调整参数来确定分布的平滑程度。

ggplot(data = diamonds, mapping = aes(x = price, y = ..density..)) + geom_freqpoly(mapping = aes(color = cut), binwidth = 500) ggplot(data = diamonds, mapping = aes(x = price)) + geom_histogram() + facet_wrap(~cut, ncol = 1, scales = "free_y") #> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. ggplot(data = diamonds, mapping = aes(x = cut, y = price)) + geom_violin() + coord_flip() 问题六

对于小数据集,如果要观察连续变量和分类变量间的关系,有时使用 geom_jitter() 函数是特别有用的。ggbeeswarm 包提供了和 geom_jitter() 相似的一些方法。列出这些方法 并简单描述每种方法的作用。

解答

有两种方法:

geom_quasirandom()生成混合了抖动和小提琴图像的图像。有几种不同的方法可以精确地确定点的随机位置是如何生成的。geom_beeswarm()生成一个类似于小提琴绘图的绘图,但是通过抵消这些点。我将使用mpg盒图示例,因为这些方法显示单独的点,它们更适合于较小的数据集。ggplot(data = mpg) + geom_quasirandom(mapping = aes( x = reorder(class, hwy, FUN = median), y = hwy )) ggplot(data = mpg) + geom_quasirandom( mapping = aes( x = reorder(class, hwy, FUN = median), y = hwy ), method = "tukey" ) ggplot(data = mpg) + geom_quasirandom( mapping = aes( x = reorder(class, hwy, FUN = median), y = hwy ), method = "tukeyDense" ) ggplot(data = mpg) + geom_quasirandom( mapping = aes( x = reorder(class, hwy, FUN = median), y = hwy ), method = "frowney" ) ggplot(data = mpg) + geom_quasirandom( mapping = aes( x = reorder(class, hwy, FUN = median), y = hwy ), method = "smiley" ) ggplot(data = mpg) + geom_beeswarm(mapping = aes( x = reorder(class, hwy, FUN = median), y = hwy ))


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有