Синтаксис ggplot для распространения данных - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь построить распределение данных для переменных beforeMinWageLaw и afterMinWageLaw, но когда я сохраняю их в df вместо seattleData, r говорит: «Ошибка: эстетика должна иметь длину 1 или совпадать с данными (43): Икс".Как я могу это исправить?Кроме того, как я мог сделать нормальный вероятностный график, чтобы получить представление о нормальности данных?Спасибо.

#Import Data
#seattleData <- read.table(file=file.choose(),
#                          header=T, sep=",",)

library(ggplot2)

#Define Variables
 food_drink_workers <- seattleData$food_drink_workers
 MinWage <- seattleData$washington_state_minwage
 afterMinWageLaw <- food_drink_workers[304:346]
 beforeMinWageLaw <- food_drink_workers[1:303]
 df <- data.frame(seattleData)

#Display Data Distribution with ggplot
 x <-ggplot(df, aes(x=food_drink_workers)) + 
  geom_histogram(mapping = aes(y = ..density..), color="black",     fill="white") +
  geom_density(alpha=.2, fill="blue")
  x + geom_vline(xintercept = c(108.8636), linetype = "dashed", color = "red") + 
    ggtitle("Distribtution of the Data") + xlab("Seattle MSA Food and Drink          Workers") + ylab("Density")

#Conduct Two Sample t-test
 options(scipen = 100)
 tTest <- t.test(beforeMinWageLaw, afterMinWageLaw, mu=0, alternative = "less",
                conf=.95, var.equal = F, paired = F)

Вы можете скачать данные здесь: https://fred.stlouisfed.org/series/SMU53426607072200001SA

Снимок экрана

1 Ответ

0 голосов
/ 07 декабря 2018

Появляется это сообщение об ошибке «Ошибка: эстетика должна иметь длину 1 или совпадать с данными (43): x», поскольку вектор afterMinWageLaw имеет длину 43 значения, а beforeMinWageLaw имеет длину 303 значенияи именно поэтому вы не можете ссылаться на них в рамках одной и той же эстетики aes(), я полагаю.

Я бы использовал разные визуализации на одном графике, чтобы вы могли устанавливать разные эстетики также с другой длиной или количеством строкваших данных.Сначала я бы разбил ваши данные на два фрейма данных: один перед законом, а второй после закона.Используя ggplot, вы можете ссылаться на разные фреймы данных на одном графике, в вашем случае, например, так:

#set row indicex ranges for before and after law
row_index_range_before <- 1:303;
row_index_range_after <- 304:346;

#define two data frames
df_before <- data.frame(seattleData)[row_index_range_before, ];
df_after <- data.frame(seattleData)[row_index_range_after, ];

#display data distributions of both data frames with ggplot
x <- ggplot() + 
  geom_histogram(
    data = df_before
    ,mapping = aes(
      x = food_drink_workers
      ,y = ..density..
      ,color = "blue")
    ,fill = "white") +
  geom_histogram(
    data = df_after
    ,mapping = aes(
      x = food_drink_workers
      ,y = ..density..
      ,color = "red")
    ,fill = "white") +
  geom_density(
    data = df_before
    ,mapping = aes(
      x = food_drink_workers
      ,y = ..density..
      ,fill = "blue")
    ,alpha = .2) +
  geom_density(
    data = df_after
    ,mapping = aes(
      x = food_drink_workers
      ,y = ..density..
      ,fill = "red")
    ,alpha = .2) +
  scale_colour_manual(
    name = "Color"
    ,values = c("blue" = "blue", "red" = "red")
    ,labels = c("blue" = "Before Law", "red" = "After Law")) +
  scale_fill_manual(
    name = "Fill"
    ,values = c("blue" = "blue", "red" = "red")
    ,labels = c("blue" = "Before Law","red" = "After Law"));

x + geom_vline(
  xintercept = c(108.8636)
  ,linetype = "dashed"
  ,color = "red") + 
ggtitle("Distribtution of the Data") + 
  xlab("Seattle MSA Food and Drink          Workers") + 
  ylab("Density");

Но таким образом, вы также можете ссылаться на afterMinWageLaw и beforeMinWageLaw как x вaes() и удалите data, ссылаясь на фрейм данных, я думаю.

Чтобы также построить легенду, вам нужно установить color или fill в aes() и добавить scale_colour_manual() или scale_fill_manual() на ваш участок. enter image description here

...