График для перекрестных таблиц в R

#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