Извлечение средних значений из бокса и проведение t.test - PullRequest
0 голосов
/ 11 апреля 2020

Я работаю с набором данных, который я использую для разработки некоторых графиков и запуска статистики. Вот мой исходный набор данных:

> pacman::p_load(pacman, party, rio, tidyverse) 
> Cellphone_models <- read.csv("~/Desktop/Cellphone models.csv") 
> Cellphone_models <- read.csv("~/Desktop/Cellphone models.csv") 
> Cellphone_models
   Cellphone.model Dimensions Price
1          Model A       10.3   400
2          Model A       10.5   350
3          Model A       10.2   300
4          Model A       10.1   400
5          Model A       10.0   500
6          Model B       10.0   450
7          Model B       10.1   300
8          Model B       10.2   200
9          Model B        9.9    45
10         Model C       10.0   475
11         Model C       10.2   560
12         Model D        9.8   400
13         Model D        9.9   350
14         Model D       10.2   300
15         Model D       10.0   400
16         Model D       10.0   500
17         Model D       10.1   450
18         Model E        9.9   200
19         Model E        9.9    45
20         Model E        9.0   475
> Cellphone_models %>% group_by(Cellphone.model) %>% summarise_if(is.numeric, mean)
# A tibble: 5 x 3
  Cellphone.model Dimensions Price
  <fct>                <dbl> <dbl>
1 Model A               10.2  390 
2 Model B               10.0  249.
3 Model C               10.1  518.
4 Model D               10    400 
5 Model E                9.6  240

Затем я разработал коробочную диаграмму, показывающую взаимосвязь между моделями сотовых телефонов и их размерами (см), используя следующий код:

boxplot(Dimensions~Cellphone.model)

Вот где мне нужна помощь:

  1. Как отобразить средние значения каждого из 5 отдельных графиков (т. Е. Типы моделей сотовых телефонов на оси X) на графике?

  2. Существует ли код t-теста, который позволит мне сравнивать значимость разницы в средних значениях между двумя типами моделей сотовых телефонов (например, модели B и D ( с использованием модели D в качестве эталонного среднего значения).

Спасибо!

Ответы [ 3 ]

0 голосов
/ 11 апреля 2020

Как вы, вероятно, знаете, на коробчатых диаграммах отображается медиана данных. Поскольку вы уже используете dplyr, давайте перейдем к ggplot2. Мы можем добавить среднее значение с помощью stat_summary и довольно легко провести сравнение с stat_compare_means из ggpubr.

library(ggplot2)
library(ggpubr)
ggplot(Cellphone_models,aes(y=Price, x=Cellphone.model)) +
  geom_boxplot() + labs(x = "Model") +
  stat_summary(fun = "mean", geom = "errorbar",  aes(ymax = ..y.., ymin = ..y..), col = "red", width = 0.75) +
  stat_compare_means(aes(label = as_lable(..p.adj..)), method = "t.test",
                     comparisons = list(c("Model B","Model D"),c("Model D","Model E")))

enter image description here

Данные

Cellphone_models <- structure(list(Cellphone.model = structure(c(1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L
), .Label = c("Model A", "Model B", "Model C", "Model D", "Model E"
), class = "factor"), Dimensions = c(10.3, 10.5, 10.2, 10.1, 
10, 10, 10.1, 10.2, 9.9, 10, 10.2, 9.8, 9.9, 10.2, 10, 10, 10.1, 
9.9, 9.9, 9), Price = c(400L, 350L, 300L, 400L, 500L, 450L, 300L, 
200L, 45L, 475L, 560L, 400L, 350L, 300L, 400L, 500L, 450L, 200L, 
45L, 475L)), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
"16", "17", "18", "19", "20"))
0 голосов
/ 12 апреля 2020

По второму вопросу вы можете попробовать следующий код?

library(broom)
df %>%
filter(Cellphone.model=="Model D" | Cellphone.model == "Model B") %>%
group_by(Cellphone.model) %>%
do(tidy(t.test(.$Dimensions))
0 голосов
/ 11 апреля 2020

Вы можете сделать это, используя ggplot geom. Вот пример

require(tidyverse)
data(iris)
mean_tb = iris %>% group_by(Species) %>% summarise_if(is.numeric, mean)
ggplot() + geom_boxplot(data = iris, aes(x = Species, y= Sepal.Length)) + geom_point(data = mean_tb, aes(x=Species, y=Sepal.Length))

, после чего вы накладываете поле диаграммы и график рассеяния

...