У меня возникли проблемы с созданием сложных сечений описательной статистики для данных, которые являются многоуровневыми по своей природе. Я попытался пойти на это с нескольких разных ракурсов, но безуспешно. Ниже приведен код, который я использовал для решения plyr
, которое не удалось. Проблема в том, что школы существуют в пределах района. Мне нужна сводная статистика для районного уровня, чтобы соответствовать каждой школе в этом районе. Решение plyr
, очевидно, генерирует только описательную статистику на уровне округов для каждой подвыборки школы по сравнению с использованием общей информации об округах каждой школе.Описательная статистика для многоуровневых (сгруппированных) данных
Я пытался найти способ обойти это несколько дней, когда у меня есть момент.
Может быть, совокупность данных.table предлагает любые лучшие решения?
#Generate Data
set.seed(500)
School <- rep(seq(1:20), 2)
District <- rep(c(rep("East", 10), rep("West", 10)), 2)
Score <- rnorm(40, 100, 15)
Student.ID <- sample(1:1000,8,replace=T)
items <- data.frame(replicate(10, sample(1:4, 40, replace=TRUE)))
gender <- rep(c("Male","Female"), 100*c(0.4,0.6))
gender <- sample(gender, 40)
low.inc <- rep(c("Status.A", "Status.B", "Status.c"), 100*c(0.3,0.2,0.5))
low.inc <- sample(low.inc, 40)
items <- data.frame(lapply(items, factor, ordered=TRUE,
levels=1:4))
labels=c("Strongly disagree","Disagree",
"Agree","Strongly Agree")
school.data <- data.frame(Student.ID, School, District, Score, items, gender, low.inc)
sd1 = sd(school.data$Score)
m1 = mean(school.data$Score)
sd.above = m1 + sd1
sd.below = m1 - sd1
school.data$scorecat[Score >= sd.above] <- "High"
school.data$scorecat[Score > sd.below & Score <= sd.above] <- "Moderate"
school.data$scorecat[Score <= sd.below] <- "Low"
#Attempt to generate table
library(plyr)
b1 <- ddply(school.data, .var = c("gender", "District", "School"), .fun = summarise,
n = length(scorecat),
high = sum(scorecat %in% c("High")),
high.prop = high/n, # Referring to vars I just created
mod = sum(scorecat %in% c("Moderate")),
mod.prop = mod/n, # Referring to vars I just created
low = sum(scorecat %in% c("Low")),
low.prop = low/n # Referring to vars I just created
)
drops <- c("high","mod", "low") #set up a list to drop columns
b1 <- b1[,!(names(b1) %in% drops)]
colnames(b1)[1] <- "Demographic Variable"
Примечание: в этой таблице указаны правильные значения района, которые должны быть присвоены каждой школе однозначно. Я бы хотел, чтобы таблица, как первый пример, имела эти значения для каждой школы с соответствующим округом.
b1 <- ddply(school.data, .var = c("gender", "District"), .fun = summarise,
n = length(scorecat),
high = sum(scorecat %in% c("High")),
high.prop = high/n, # Referring to vars I just created
mod = sum(scorecat %in% c("Moderate")),
mod.prop = mod/n, # Referring to vars I just created
low = sum(scorecat %in% c("Low")),
low.prop = low/n # Referring to vars I just created
)
drops <- c("high","mod", "low") #set up a list to drop columns
b1 <- b1[,!(names(b1) %in% drops)]
colnames(b1)[1] <- "Demographic Variable"
Спасибо! Я понял, что слишком много думал об этом, и ответ был прямо там передо мной. – bfoste01
Не забудьте также дать щедрость :-) – cmbarbu
Первая щедрость ... подумал, что это будет автоматически. – bfoste01