#r #plot #categorical-data #lme4 #mixed-models
#r #график #категориальный-данные #lme4 #смешанные модели
Вопрос:
Я пытаюсь выяснить, встречается ли каждый уникальный childid
только в одном уникальном schoolid
или нет. Я построил перекрестные таблицы, но изображение очень занято и неясно.
Есть ли лучший способ (путем построения графика или иным образом) достичь моей цели в R?
(ps. В качестве альтернативы мне также сказали подогнать смешанную модель и отобразить случайные эффекты, но, как показано ниже, изображение очень маленькое и неясное.)
dd <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/3.csv')
cross_tab <- xtabs(~ schoolid childid, dd)
plot(cross_tab)
library(lme4)
m31 <- lmer(math~year (1|schoolid/childid), data = dd)
image(getME(m31,"Zt"))
Комментарии:
1. В вашем наборе данных 315 уникальных идентификаторов для 10 школ. Очевидно, что он будет выглядеть занятым и неясным, независимо от того, как вы его сократите. Может быть, лучший вопрос: что вы пытаетесь показать? Приведение примера того, чего вы пытаетесь достичь, помогло бы.
Ответ №1:
Вы можете сделать это таким образом (без графика).
С помощью базы R. Вы можете рассчитать таблицу непредвиденных обстоятельств, а затем подсчитать, сколько раз для каждого childid
у вас есть положительные значения для schoolid chilid
совпадения. Если это больше 1, чем у вас есть понимание, которое вы искали.
x <- colSums(table(dd$schoolid, dd$childid) > 0)
x[x>1]
#> named numeric(0)
С dplyr
помощью . Вы distinct
сопоставляете каждое schoolid childid
совпадение, а затем подсчитываете childid
, появляется ли оно более одного раза.
library(dplyr)
dd %>% distinct(schoolid, childid) %>% count(childid) %>% filter(n>1)
#> [1] childid n
#> <0 rows> (or 0-length row.names)
Комментарии:
1. Мне нравится ваш базовый ответ R. Я хотел сделать что-то подобное, но не смог.
Ответ №2:
Проверяет размеры уникальных идентификаторов школ для каждого идентификатора студента.
dd %>% group_by(childid) %>% summarize(ns_per_id = length(unique(schoolid))) %>%
summarise(unique(ns_per_id))
`summarise()` ungrouping output (override with `.groups` argument) # A tibble: 1 x 1 `unique(ns_per_id)` <int> 1 1