Условные гистограммы с использованием пакета решетки, выходные графики неверны
Я использую 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)