Условные гистограммы с использованием пакета решетки, выходные графики неверны

Я использую histogram из решетчатого пакета для построения двух гистограмм, обусловливающих переменную с двумя вариантами: мужской или женский.

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000)] | raw$Gender)

Вывод кода: две гистограммы, минуты по дому по полу

Но когда я на самом деле смотрю на данные, эти гистограммы не верны. Чертя

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000) & (raw$Gender == "Female")]

а также:

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000) & (raw$Gender == "Male")]

Я снова получаю две гистограммы, но они выглядят очень по-разному

Кто-нибудь знает, почему эти выходы не совпадают? У меня есть еще куча панелей бинарного типа, и необходимость их отдельного исполнения действительно лишает цели работы с пакетом решеток!

Я прошу прощения, если это противоречит фундаментальному недоразумению простой концепции, я все еще очень начинающий в R! Большое спасибо за помощь.

2 ответа

Решение

Оказывается, проблема заключалась в несоответствии данных, основанных на исключениях, примененных с помощью скобок. Вместо:

histogram(~ raw$Housework_Tot_Min [(raw$Housework_Tot_Min != 0) & 
(raw$Housework_Tot_Min < 1000)] | raw$Gender)

Следует читать:

histogram(~ Housework_Tot_Min [(Housework_Tot_Min != 0) & (Housework_Tot_Min < 1000)] | 
        Gender [(Housework_Tot_Min != 0) & (Housework_Tot_Min < 1000)], data = raw,
      main = "Time Observed Housework by Gender",
      xlab = "Minutes spent",
      breaks = seq(from = 0, to = 400, by = 20))

Обратите внимание, что исключения теперь применяются как к времени работы по дому, так и к гендерным переменным, что устраняет несоответствия в данных.

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

Обновленная гистограмма

Проблема связана с различными значениями в panel.args.common(т.е. аргументы, общие для всех функций панели, см. ?trellis.object). Вот пример кода, чтобы прояснить мою точку зрения.

library(lattice)

## paneled plot
hist1 <- histogram( ~ Sepal.Width | Species, data = iris)
hist1$panel.args.common

# $breaks
# [1] 1.904 2.228 2.552 2.876 3.200 3.524 3.848 4.172 4.496
# 
# $type
# [1] "percent"
#
# $equal.widths
# [1] TRUE
# 
# $nint
# [1] 8

## single plot    
hist2 <- histogram( ~ Sepal.Width, data = iris[iris$Species == "setosa", ])
hist2$panel.args.common

# $breaks
# [1] 2.216 2.540 2.864 3.188 3.512 3.836 4.160 4.484
# 
# $type
# [1] "percent"
# 
# $equal.widths
# [1] TRUE
# 
# $nint
# [1] 7

nint (количество бинов гистограммы, см. ?histogram) а также breaks (точки останова бункеров) рассчитываются по всем целевым панелям и поэтому различаются между hist1 а также hist2, Если вы хотите, чтобы эти аргументы были идентичными, чтобы два графика выглядели одинаково, вам просто нужно выполнить следующую строку кода после того, как два графика были созданы.

hist2$panel.args.common <- hist1$panel.args.common
## or vice versa, depending on the number of bins and breakpoints to use

library(gridExtra)
grid.arrange(hist1, hist2, ncol = 2)

гистограмма

Другие вопросы по тегам