R语言数据可视化与概率分析实践

table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
th, td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:nth-child(even) {
background-color: #f9f9f9;
}
pre {
background-color: #f8f8f8;
padding: 15px;
border-radius: 4px;
overflow-x: auto;
}

47、使用管道符 %>% 创建一个对象 p,关联 heights 数据集。

p <- heights %>% ggplot()

48、现在我们要添加图层和相应的美学映射。对于谋杀案数据,我们需要绘制谋杀总数与人口规模的关系图。已知有以下几个变量组合选项,需要从中选择出代表谋杀总数和人口规模的变量名称组合。A. state和abb。B. total_murers和population_size。C. total和population。D. murders和size。

C

49、要创建散点图,我们使用

geom_point

添加一个图层。美学映射要求我们分别定义 x 轴和 y 轴变量。假设存在一个名为

murders

的数据框,有

population

(人口)和

total

(总数)这两个变量,代码如下:

murders %>% ggplot(aes(x = , y = )) + geom_point()

,请用正确的变量名填写 x 和 y,以绘制

population


total

的散点图。

x = population, y = total

50、在 R 语言中,有这样一段代码

murders %>% ggplot(aes(population, total)) + geom_point()

用于绘制散点图。现在重新绘制该图,但将

total

放在 x 轴,

population

放在 y 轴,写出相应代码。


murders %>% 
  ggplot(aes(total, population)) + 
  geom_point()

51、如果我们不想添加点,而是想添加文本,可以使用geom_text()或geom_label()几何对象。以下代码murders %>% ggplot(aes(population, total)) + geom_label()会给出错误信息:Error: geom_label requires the following missing aesthetics: label 为什么会这样?A. 我们需要通过aes中的label参数将一个字符映射到每个点。B. 我们需要让geom_label知道在图中使用什么字符。C. geom_label几何对象不需要x轴和y轴的值。D. geom_label不是一个ggplot2命令。

A

52、将标签颜色改为蓝色。我们该怎么做?A. 向murders数据框添加名为blue的列;B. 因为每个标签需要不同颜色,我们通过aes映射颜色;C. 在ggplot中使用color参数;D. 因为我们希望所有标签颜色为蓝色,不需要映射颜色,只需在geom_label中使用color参数。

D

53、在一个使用 ggplot2 绘图的场景中,有一段绘制散点图并标注文本的代码,现在要求重写这段代码,使图中的标签变为蓝色。


p <- murders %>%
  ggplot(aes(population / 10^6, total, label = abb)) +
  geom_text(nudge_x = 0.05) +
  scale_x_log10() +
  scale_y_log10() +
  xlab("Populations in millions (log scale)") +
  ylab("Total number of murders (log scale)") +
  ggtitle("US Gun Murders in 2010")

p + geom_label(size = 3, color = "blue")

54、现在假设我们想使用颜色来表示不同的地区。在这种情况下,以下哪一项最合适:A. 在

murders

数据集中添加一个名为

color

的列,并填入我们想要使用的颜色。B. 因为每个标签需要不同的颜色,所以我们通过

aes


color

参数来映射颜色。C. 在

ggplot

中使用

color

参数。D. 因为我们希望所有颜色都是蓝色,所以不需要映射颜色,只需在

geom_label

中使用

color

参数。

B

55、重写代码,使标签的颜色由州所在的地区决定。

代码

p <- murders %>% ggplot(aes(population, total, label = abb, color = region)) + geom_label()

,其中

color = region

这一映射将标签颜色设定为由州所在地区决定。

56、现在我们要将 x 轴改为对数刻度,以考虑人口分布是偏斜的这一事实。首先定义一个对象 p 来保存我们到目前为止所制作的图:p <- murders %>% ggplot(aes(population, total, label = abb, color = region)) + geom_label() 我们可以使用 scale_x_log10() 函数来将 x 轴改为对数刻度。将这个图层添加到对象 p 中以更改刻度并渲染图形。


p <- murders %>% 
  ggplot(aes(population, total, label = abb, color = region)) + 
  geom_label()
p <- p + scale_x_log10()
print(p)

57、重复上一个练习,但现在将两个坐标轴都改为对数刻度。(注:这里假设上一个练习是进行数据可视化绘图,p 是一个 ggplot2 绘图对象)

可以使用

scale_x_continuous(trans = "log10")


scale_y_continuous(trans = "log10")

函数来实现,代码示例如下:


p + geom_point(size = 3) + geom_text(nudge_x = 0.05) + scale_x_continuous(trans = "log10") + scale_y_continuous(trans = "log10")

也可使用

ggplot2

提供的专门函数

scale_x_log10


scale_y_log10

改写代码:


p + geom_point(size = 3) + geom_text(nudge_x = 0.05) + scale_x_log10() + scale_y_log10()

58、现在编辑绘图代码,为绘图添加标题“Gun murder data”。提示:使用ggtitle函数。

在原代码基础上添加

ggtitle("Gun murder data")

,例如:

若原代码为:

r
p + geom_point(size = 3, color = "blue")

则修改后为:

r
p + geom_point(size = 3, color = "blue") + ggtitle("Gun murder data")

59、下面有三个密度图。它们有可能来自同一个数据集吗?图1:人口(百万)范围0 – 30,密度范围0.00 – 0.06;图2:人口(百万)范围1 – 30,密度范围0.0 – 1.2;图3:人口(百万)范围1 – 30,密度范围0.0 – 0.3。以下哪个陈述是正确的:A. 它们不可能来自同一个数据集。B. 它们来自同一个数据集,但图表不同是由于代码错误。C. 它们来自同一个数据集,但第一个和第二个图平滑不足,第三个图过度平滑。D. 它们来自同一个数据集,但第一个图不是对数刻度,第二个图平滑不足,第三个图过度平滑。

D

60、哪个大洲的人口中位数最大?

非洲

61、假设世界成年男性的身高分布近似服从正态分布,平均值为69英寸,标准差为3英寸。使用此近似方法,估算身高7英尺及以上的成年男性(即七英尺高的人)的比例。提示:使用pnorm函数。

可使用R语言代码

1 - pnorm(7 * 12, 69, 3)

来计算该比例。

62、在回答前面的问题时,我们发现七英尺高的人成为 NBA 球员并不罕见。以下哪一项是对我们计算结果的合理批评:A. 成为优秀篮球运动员靠的是练习和天赋,而非身高。B. 正态近似不适用于身高数据。C. 正如问题 3 所示,正态近似往往会低估极端值。有可能七英尺高的人比我们预测的更多。D. 正如问题 3 所示,正态近似往往会高估极端值。有可能七英尺高的人比我们预测的更少。

C

63、现在我们要使用geom_histogram函数为height数据框中的身高数据制作直方图。该函数只需要一个映射,即用于制作直方图的值。在height数据框中,包含身高的变量是什么?A. sex B. heights C. height D. heights$height

C

64、现在使用管道将

heights

数据分配给一个

ggplot

对象,创建一个

ggplot

对象。通过

aes

函数将

height

赋值给

x

轴变量。

代码示例为

heights %>% ggplot(aes(x = height))

65、已知有一个关于身高(

height

)和性别(

sex

)的数据集,制作女性身高的直方图时,运行代码会得到警告:“stat_bin() using bins = 30. Pick better value with binwidth.” 请使用

binwidth

参数将女性身高的直方图改为使用宽度为 1 英寸的区间。

代码如下:


heights %>% 
  filter(sex == "Female") %>% 
  ggplot(aes(height)) + 
  geom_histogram(binwidth = 1)

66、不绘制直方图,要绘制一个平滑的密度图。在不创建对象,而是用一行代码来渲染图形的情况下,更改之前使用的代码中的几何图形,以绘制平滑密度图而不是直方图。

将之前代码中的

geom_histogram

函数改为

geom_density

函数。例如,若之前代码为


heights %>% ggplot(aes(height)) + geom_histogram()

则修改后为


heights %>% ggplot(aes(height)) + geom_density()

67、我们可以通过

fill

参数来划分组,这样做的额外好处是可以使用颜色来区分不同的组,例如使用代码

heights %>% ggplot(aes(height, fill = sex)) + geom_density()

。不过,这里第二条密度曲线会覆盖在另一条之上。为了使曲线更清晰可见,我们可以通过使用alpha混合来增加透明度。请在

geom_density

函数中将

alpha

参数设置为0.2来实现这一改变。

可以使用以下代码实现:


heights %>% ggplot(aes(height, fill = sex)) + geom_density(alpha = 0.2)

68、何时适合使用饼图:A. 当我们想展示百分比时。B. 当无法使用ggplot2时。C. 当我在面包店时。D. 从不适合,条形图和表格总是更好。

A

69、下面的图表存在什么问题:A.数值错误。最终票数是306比232。B.坐标轴不是从0开始。从长度上看,特朗普的票数似乎是对方的3倍,但实际上只多了约30%。C.颜色应该相同。D.百分比应该用饼图展示。

B

70、有两个图表展示了1928年美国50个州的麻疹发病率。如果你想确定哪些州的发病率最高和最低,哪个图表更容易阅读,为什么?A. 它们提供的信息相同,所以两者一样好。B. 右边的图表更好,因为它按州名的字母顺序排列。C. 右边的图表更好,因为字母顺序与疾病无关,按实际发病率排序,我们可以快速看到发病率最高和最低的州。D. 两个图表都应该用饼图表示。

C

71、使用一行代码,对数据集进行操作,定义一个名为dat的数据对象。操作内容为筛选出年份为1967、疾病为’Measles’且人口数不为缺失值的数据,使用mutate函数创建一个rate变量(rate的计算方式为count / population * 10000 * 52 / weeks_reporting),并重新排序state变量,使这些水平按rate变量重新排序。然后使用ggplot为这个新的dat制作一个条形图。


dat <- us_contagious_diseases %>%
  filter(year == 1967 & disease == "Measles" & !is.na(population)) %>%
  mutate(rate = count / population * 10000 * 52 / weeks_reporting,
         state = reorder(state, rate)) %>%
  ggplot(aes(state, rate)) +
  geom_bar(stat = "identity") +
  coord_flip()

72、假设我们想比较美国不同地区的枪支杀人率,然后决定搬到西部地区的一个州。这种解读的主要问题是什么?A. 类别是按字母顺序排列的。B. 图表未显示标准误差。C. 它没有展示所有数据。我们看不到一个地区内的差异,有可能最安全的州并不在西部。D. 东北部的平均值最低。

C

73、当展示三个连续变量时,为什么会出现某些情况(这里未明确具体情况,但可推测是解读上的问题)?A. 人类不擅长解读伪三维图。B. 代码一定有错误。C. 颜色让我们困惑。D. 当有三个变量时,散点图不应用于比较两个变量。

A

74、已知有一个包含各州总谋杀数和人口规模的数据表,现在要计算美国的谋杀率。提示:使用

summarize

函数,用总谋杀数除以总人口来计算美国的比率。

可以使用以下代码计算美国的谋杀率:


us_murder_rate <- murders %>% summarize(rate = sum(total) / sum(population) * 100000)

其中

murders

是包含各州总谋杀数和人口规模的数据表。运行此代码后,

us_murder_rate

即为所求的美国谋杀率。

75、现在对美国的比率也做同样的操作。提示:使用summarize计算美国的比率,即用总谋杀数除以总人口。假设存在一个包含各州总谋杀数和人口规模的数据表,名为murders 。

计算美国谋杀率的正确代码如下:


us_murder_rate <- murders %>% 
  summarize(rate = sum(total) / sum(population) * 100000)

这里的

murders

是包含各州总谋杀数和人口规模的数据表,通过该代码可得出考虑各州规模比例后的美国谋杀率。

76、计算数据集中 Galton 数据里 child 列数据的中位数和中位数绝对偏差。

要计算,需先按以下代码加载所需数据集并创建向量:


library(HistData)
data(Galton)
x <- Galton$child

之后,使用

median(x)

计算中位数,使用

mad(x)

计算中位数绝对偏差。

77、如何使用探索性数据分析来检测是否出现了错误?A. 由于这只是众多值中的一个,我们无法检测到。B. 我们会看到分布有明显的偏移。C. 箱线图、直方图或QQ图会显示出明显的异常值。D. 散点图会显示出高水平的测量误差。

C

78、从一个装有3个青色球、5个品红色球和7个黄色球的盒子中随机抽取一个球,这个球是青色的概率是多少?

总共有3 + 5 + 7 = 15个球,青色球有3个,所以抽到青色球的概率是3÷15 = 1/5。

79、一个盒子里有3个青色球、5个品红色球和7个黄色球。不只是进行一次抽取,而是考虑进行两次抽取。在进行第二次抽取时,不将第一次抽取的球放回盒子中。我们称这种方式为无放回抽样。那么第一次抽到青色球且第二次抽到非青色球的概率是多少?

根据题目,盒子里有3个青色球、5个品红色球和7个黄色球,总共15个球。

第一次抽到青色球的概率为 $ frac{3}{15} $。

第一次抽走一个青色球后,盒子里还剩14个球,其中非青色球有12个,所以第二次抽到非青色球的概率为 $ frac{12}{14} $。

根据分步乘法计数原理,第一次抽到青色球且第二次抽到非青色球的概率为:

315×1214=635315×1214=635

80、盒子里有3个青色球、5个品红色球和7个黄色球,现在重复抽取球的实验,在第一次抽取并记录颜色后,将球放回盒子并摇匀(有放回抽样)。第一次抽到青色球且第二次没有抽到青色球的概率是多少?

根据题目,盒子里有:

3个青色球

5个品红色球

7个黄色球

总共有 $ 3 + 5 + 7 = 15 $ 个球。

第一次抽到青色球的概率为:

315=15315=15

因为是有放回抽样,第二次抽取时盒子里球的情况不变。

第二次

没有

抽到青色球的概率为:

5+715=1215=455+715=1215=45

根据

独立事件概率计算公式

,两次事件同时发生的概率为两次事件各自发生概率的乘积:

第一次抽到青色球且第二次没有抽到青色球的概率=15×45=425第一次抽到青色球且第二次没有抽到青色球的概率=15×45=425

81、如果 Pr(A 且 B) = Pr(A)×Pr(B),则事件 A 和 B 是独立的。在哪种情况下抽取是独立的?A. 不替换抽取物。B. 替换抽取物。C. 都不是。D. 都是。

B

82、假设盒子里有3个青色球、5个品红色球和7个黄色球,有放回地从盒子中抽取球。已经抽取了5个球,且都是黄色的。那么下一个球是黄色的概率是多少?

总共有 $3 + 5 + 7 = 15$ 个球。有放回抽样时,每次抽取的概率相互独立,所以下一个球是黄色的概率为黄色球的数量除以总球数,即 $frac{7}{15}$。

83、如果你掷一个6面骰子6次,一次都看不到6的概率是多少?

每次掷骰子看不到6的概率是5/6,掷6次是独立事件,所以概率为(5/6)^6,约为0.335。

84、创建一个蒙特卡罗模拟来验证某个概率。设定模拟次数 B 为 10000 次。使用以下代码生成前四场比赛的结果:celtic_wins <- sample(c(0,1), 4, replace = TRUE, prob = c(0.6, 0.4)),其中 0 代表凯尔特人队输,1 代表凯尔特人队赢。计算凯尔特人队在前四场比赛中至少赢得一场的概率。

可以使用以下 R 代码实现该蒙特卡罗模拟:


B <- 10000
results <- replicate(B, {
  celtic_wins <- sample(c(0, 1), 4, replace = TRUE, prob = c(0.6, 0.4))
  sum(celtic_wins) >= 1
})
mean(results)

此代码首先设定模拟次数为 10000 次,然后重复模拟凯尔特人队四场比赛的结果,判断是否至少赢一场,最后计算至少赢一场的比例来验证概率。

85、重复上述练习,但现在将概率固定为 p <- 0.75,并计算不同系列长度的概率:最佳的 1 场比赛、3 场比赛、5 场比赛……具体来说,N <- seq(1, 25, 2)。提示:使用这个函数:prob_win <- function(N, p = 0.75){ B <- 10000 result <- replicate(B, { b_win <- sample(c(1,0), N, replace = TRUE, prob = c(1 – p, p)) sum(b_win)>=(N + 1)/2 }) mean(result) }

可使用给定函数

prob_win

来计算不同系列长度下的概率,代码示例如下:


N <- seq(1, 25, 2)
p <- 0.75
prob <- sapply(N, prob_win, p = p)
print(prob)

运行上述代码即可得到对应不同

N

值下的概率结果。

86、如果m是均值,s是标准差,要计算随机变量X小于等于a的概率,以下哪个R代码能在所有情况下给出正确答案:A. mean(X<=a) B. pnorm((a – m)/s) C. pnorm((a – m)/s, m, s) D. pnorm(a)

B

87、假设成年男性的身高分布近似正态,期望值为69,标准差为3。处于第99百分位的男性身高是多少?提示:使用qnorm函数。

可以使用 R 语言的

qnorm

函数计算:


qnorm(0.99, mean = 69, sd = 3)

计算得出约为 75.98,所以处于第 99 百分位的男性身高约为 75.98 英寸。

88、在美国轮盘赌中,你也可以押注绿色。轮盘上有18个红色、18个黑色和2个绿色(0和00)。出现绿色的概率是多少?

轮盘上总共有 $18 + 18 + 2 = 38$ 个格子,其中绿色有 2 个,所以出现绿色的概率是 $frac{2}{38}$,即 $frac{1}{19}$。

89、在轮盘赌中押注绿色获胜的奖金是17美元。这意味着如果你押注1美元且球落在绿色区域,你将获得17美元。假设轮盘上绿色区域的比例为1/19,非绿色区域的比例为18/19。使用sample函数创建一个抽样模型,来模拟你的奖金随机变量X。提示:参考下面押注红色时的示例代码。示例代码:x <- sample(c(1,-1), 1, prob = c(9/19, 10/19))

押注1美元,若落在绿色区域赢得17美元(净赚16美元),落在非绿色区域损失1美元。

模拟代码为:


x <- sample(c(16, -1), 1, prob = c(1/19, 18/19))

90、计算样本均值(overline{X})的标准误差。

当总体为二项分布时,样本均值 $overline{X}$ 的标准误差计算公式为

SE(X¯¯¯¯)=p(1−p)N−−−−−−−√SE(X¯)=p(1−p)N

其中 $p$ 是总体比例,$N$ 是样本大小。若不知道 $p$,可将样本比例 $overline{X}$ 代入 $p$ 来估计标准误差。

当总体服从正态分布且总体方差 $sigma^2$ 已知时,样本均值 $overline{X}$ 的标准误差为

SE(X¯¯¯¯)=σN−−√SE(X¯)=σN

当总体服从正态分布但总体方差 $sigma^2$ 未知时,用样本方差 $S^2$ 代替总体方差,此时样本均值 $overline{X}$ 的标准误差为

SE(X¯¯¯¯)=SN−−√SE(X¯)=SN

91、现在创建一个随机变量 S,它是在绿色区域下注 1000 次后的总 winnings。每次下注有两种结果:若赢可获得 17 元,若输则损失 1 元。赢的概率为 1/19,输的概率为 18/19。每次下注相互独立且可重复。代码开头使用 set.seed(1) 设置随机种子为 1。

以下是相应的 R 代码:


set.seed(1)
S <- sum(sample(c(17, -1), 1000, prob = c(1/19, 18/19), replace = TRUE))
© 版权声明

相关文章

暂无评论

none
暂无评论...