Я оцениваю надежность анкеты для тестирования и повторного тестирования. У меня есть более 200 пар переменных (номинальных, порядковых или числовых), каждая из которых измеряется при тестировании и повторном тестировании, для которых я вычисляю статистику согласования и ее доверительный интервал.
Мне удалось создатьфункция для получения 3-х вычислений (оценка, нижняя и верхняя граница) для каждой пары за один шаг, но я изо всех сил пытаюсь создать одно, позволяющее мне группировать результаты по дополнительным переменным.
Потому что мне нужно построить графикрезультаты, я хотел бы в конечном итоге вывод данных.
Для простоты я сделал игрушечный пример 8 переменных в кадре данных с именем dfSO
dput(dfSO)
structure(list(qordi1T = structure(c(5L, 4L, 4L, 5L, 5L, 5L,
5L, 5L, 4L, 5L, 5L, 4L, 2L, 5L, 5L, 3L), .Label = c("Je n'ai pas de médecin de médecin généraliste attitré",
"Moins d'un an", "1 à 2 ans", "2 à 5 ans", "Plus de 5 ans"), class = c("ordered",
"factor")), qordi2T = structure(c(3L, 3L, 2L, 4L, 4L, 4L, 1L,
2L, 1L, 3L, 4L, 5L, 3L, 3L, 5L, 2L), .Label = c("Mauvaise", "Passable",
"Bonne", "Très bonne", "Excellente"), class = c("ordered", "factor"
)), qnum1T = c(70L, 90L, 90L, 100L, 100L, 70L, 80L, 100L, 50L,
40L, 100L, 100L, 75L, 75L, 95L, 40L), qnum2T = c(100L, 85L, 100L,
100L, 100L, 100L, 100L, 85L, 100L, 70L, 100L, 100L, 95L, 75L,
100L, 80L), qnomi1T = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 2L,
2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L), .Label = c("Oui", "Non"), class = "factor"),
qnomi2T = structure(c(1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L,
2L, 1L, 1L, 1L, 2L, 1L, 2L), .Label = c("Oui", "Non"), class = "factor"),
proT = structure(c(7L, 7L, 5L, 7L, 5L, 7L, 4L, 7L, 1L, 6L,
7L, 1L, 1L, 5L, 4L, 5L), .Label = c("Agriculteur exploitant",
"Artisan, commerçant, chef d'entreprise", "Cadre ou profession intellectuelle supérieure :- Profession libérale et assimilée- Cadre de la fonction publique- Profession intellectuelle et artistique- Cadre d'entreprise et ingénieur",
"Employé :- de la fonction publique- administratif d'entreprise- de commerce- Personnel de services directs aux particuliers",
"Ouvrier :- qualifié de type industriel, artisanal, de la manutention, du magasinage et du transport, chauffeurs- non qualifié de type industriel et artisanal- agricole",
"Profession intermédiaire :- de l'enseignement, de la santé, de la fonction publique et assimilés- administrative et commerciales des entreprises- Technicien- Contremaître, agent de maîtrise",
"N/A"), class = "factor"), sexT = structure(c(1L, 1L, 1L,
2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("Femme",
"Homme"), class = "factor"), qordi1RT = structure(c(5L, 3L,
4L, 5L, 5L, 5L, 5L, 5L, 4L, 4L, 5L, 4L, 2L, 5L, 5L, 2L), .Label = c("Je n'ai pas de médecin de médecin généraliste attitré",
"Moins d'un an", "1 à 2 ans", "2 à 5 ans", "Plus de 5 ans"
), class = c("ordered", "factor")), qordi2RT = structure(c(3L,
4L, 1L, 4L, 4L, 5L, 2L, 2L, 2L, 3L, 4L, 5L, 3L, 3L, 5L, 2L
), .Label = c("Mauvaise", "Passable", "Bonne", "Très bonne",
"Excellente"), class = c("ordered", "factor")), qnum1RT = c(67L,
87L, 88L, 100L, 94L, 79L, 100L, 100L, 50L, 55L, 100L, 99L,
88L, 70L, 89L, 18L), qnum2RT = c(98L, 89L, 99L, 100L, 81L,
100L, 100L, 100L, 100L, 77L, 63L, 99L, 98L, 71L, 100L, 100L
), qnomi1RT = structure(c(2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L,
2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L), .Label = c("Oui", "Non"), class = "factor"),
qnomi2RT = structure(c(1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 1L,
2L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Oui", "Non"), class = "factor"),
proRT = structure(c(7L, 7L, 5L, 4L, 7L, 7L, 4L, 7L, 1L, 6L,
4L, 1L, 1L, 5L, 4L, 7L), .Label = c("Agriculteur exploitant",
"Artisan, commerçant, chef d'entreprise", "Cadre ou profession intellectuelle supérieure :- Profession libérale et assimilée- Cadre de la fonction publique- Profession intellectuelle et artistique- Cadre d'entreprise et ingénieur",
"Employé :- de la fonction publique- administratif d'entreprise- de commerce- Personnel de services directs aux particuliers",
"Ouvrier :- qualifié de type industriel, artisanal, de la manutention, du magasinage et du transport, chauffeurs- non qualifié de type industriel et artisanal- agricole",
"Profession intermédiaire :- de l'enseignement, de la santé, de la fonction publique et assimilés- administrative et commerciales des entreprises- Technicien- Contremaître, agent de maîtrise",
"N/A"), class = "factor"), sexRT = structure(c(1L, 1L, 1L,
2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("Femme",
"Homme"), class = "factor")), row.names = c(NA, -16L), class = "data.frame")
Есть 2 порядковых переменных, 4 номинальных и 2 числовых, каждая из которых измеряется при тестировании (T)и повторите тестирование (RT)
> str(dfSO)
'data.frame': 16 obs. of 16 variables:
$ qordi1T : Ord.factor w/ 5 levels "Je n'ai pas de médecin de médecin généraliste attitré"<..: 5 4 4 5 5 5 5 5 4 5 ...
$ qordi2T : Ord.factor w/ 5 levels "Mauvaise"<"Passable"<..: 3 3 2 4 4 4 1 2 1 3 ...
$ qnum1T : int 70 90 90 100 100 70 80 100 50 40 ...
$ qnum2T : int 100 85 100 100 100 100 100 85 100 70 ...
$ qnomi1T : Factor w/ 2 levels "Oui","Non": 2 2 2 1 1 1 2 2 2 1 ...
$ qnomi2T : Factor w/ 2 levels "Oui","Non": 1 2 2 1 2 1 2 2 2 2 ...
$ proT : Factor w/ 7 levels "Agriculteur exploitant",..: 7 7 5 7 5 7 4 7 1 6 ...
$ sexT : Factor w/ 2 levels "Femme","Homme": 1 1 1 2 2 1 1 1 1 2 ...
$ qordi1RT: Ord.factor w/ 5 levels "Je n'ai pas de médecin de médecin généraliste attitré"<..: 5 3 4 5 5 5 5 5 4 4 ...
$ qordi2RT: Ord.factor w/ 5 levels "Mauvaise"<"Passable"<..: 3 4 1 4 4 5 2 2 2 3 ...
$ qnum1RT : int 67 87 88 100 94 79 100 100 50 55 ...
$ qnum2RT : int 98 89 99 100 81 100 100 100 100 77 ...
$ qnomi1RT: Factor w/ 2 levels "Oui","Non": 2 2 2 2 1 1 2 2 2 1 ...
$ qnomi2RT: Factor w/ 2 levels "Oui","Non": 1 2 2 1 2 1 2 2 1 2 ...
$ proRT : Factor w/ 7 levels "Agriculteur exploitant",..: 7 7 5 4 7 7 4 7 1 6 ...
$ sexRT : Factor w/ 2 levels "Femme","Homme": 1 1 1 2 2 1 1 1 1 2 ...
Чтобы вычислить статистику соответствия по качественной переменной, функция rel :: gac принимает в качестве входных данных матрицу с n субъектами идва наблюдения (матрица n * 2)
Я сделал следующую функцию для извлечения оценок Gwet AC2 (квадратичного пондерения) и его начальной загрузки CI для упорядоченных переменных
library("rel")
library("boot")
ordiTF <- sapply(dfSO[, 1:8], is.ordered)
ordi <- which(ordiTF == TRUE)
g <- function(data, x)
gac(data[x, c(1, 2)], weight = "quadratic", conf.level = 1-(0.05/8))[[5]]
offset <- 8
B <- 500
item <- c()
est <- c()
lci <- c()
uci <- c()
for (i in ordi) {
item <- c(item, i)
est <- c(est, gac(data = dfSO[ , c(i, i + offset)], weight = "quadratic", conf.level = 1-(0.05/8))[[5]])
b <- boot(dfSO[ ,c(i, i + offset)], g, B)
lci <- c(lci, boot.ci(b, type = "bca")$bca[4])
uci <- c(uci, boot.ci(b, type = "bca")$bca[5])
}
data.frame(item = item, est = est, lci = lci, uci = uci)
Что бы я хотел сейчас,состоит в том, чтобы вычислить эту статистику для каждой пары с помощью третьей переменной , скажем, «пол». Я начну с группировки по этой переменной, но потом уже не смогу адекватно указать столбцы.
Например, если я хочу вычислить AC2 между ordi1 при тестировании и повторно протестировать по полу с помощью dplyr , я больше не знаю, как задать эти переменные. Я пробовал разные варианты, среди которых:
dfSO %>%
group_by(sexT) %>%
select(sexT, qordi1T, qordi1RT) %$%
gac(as.matrix(qordi1T, qordi1RT), weight = "quadratic")[[5]]
Но ни один из них не справился с работой
Поскольку я не являюсь носителем английского языка, мое первое ограничение при ответе на этот вопрос - моя трудность в Googleэто, и я знаю, что этот вопрос, возможно, уже задавался, но если так, я не смог найти его.
Спасибо за ваше время и вашу помощь
Следуя @ 42 замечаниям, я сделал несколько правок
Относительно загрузки проблема, я не уверен, чтобы понять, что не так с моим синтаксисом, поэтому я начну с моей первоначальной проблемы
- Ошибка вывода
Вот вывод ошибки яполучено
> dfSO %>%
+ group_by(sexT) %>%
+ select(sexT, qordi1T, qordi1RT) %$%
+ gac(as.matrix(qordi1T, qordi1RT), weight = "quadratic")[[5]]
Error in gac(as.matrix(qordi1T, qordi1RT), weight = "quadratic") :
The data frame needs to be formatted as a n*2 matrix!
Я сделал неправильную копию-вставку в своем исходном коде, копируя отчаянную попытку использовать
% $% вместо
%>% (это то, что я имел в виду, говоря «ни один изони сделали свою работу "). Это должно было быть
dfSO %>%
group_by(sexT) %>%
select(sexT, qordi1T, qordi1RT) %>%
gac(as.matrix(qordi1T, qordi1RT), weight = "quadratic")
с той же ошибкой
Error in gac(., as.matrix(qordi1T, qordi1RT), weight = "quadratic") :
The data frame needs to be formatted as a n*2 matrix!
Обратите внимание, что цитирование в gac () не подавляет ошибку
dfSO %>%
group_by(sexT) %>%
select(sexT, qordi1T, qordi1RT) %>%
gac(as.matrix('qordi1T', 'qordi1RT'), weight = "quadratic")
Error in gac(., as.matrix("qordi1T", "qordi1RT"), weight = "quadratic") :
The data frame needs to be formatted as a n*2 matrix!
Пока все идет поиск без группировки
dfSO %>%
select(qordi1T, qordi1RT) %>%
gac(as.matrix('qordi1T', 'qordi1RT'), weight = "quadratic")
Call:
gac(data = ., kat = as.matrix("qordi1T", "qordi1RT"), weight = "quadratic")
Estimate StdErr LowerCB UpperCB
Const 0.860780 0.097708 0.652520 1.069
Confidence level = 95%
Sample size = 16
Наконец, использование magrittr :: extract2 () позволяет извлечь оценку (замените
[[5]] часть функции
g )
dfSO %>%
select(qordi1T, qordi1RT) %>%
gac(as.matrix('qordi1T', 'qordi1RT'), weight = "quadratic") %>%
extract2('est')
Const
0.8607799
Теперь вернемся к моей проблеме с группировкой. Поскольку я группирую по третьей переменной, я не могу вычислить коэффициент для каждого его уровня (см. Правку № 2). Я считаю, что проблема заключается в том, что
gac () принимает в качестве входных данных матрицу, а не фрейм данных.
В идеале, я хотел бы получить фрейм данных, подобный этому
> AC2_ordi_bySexT
item SexT AC2 AC2_lci AC2_uci
1 1 Homme 0.6551724 0.4182536 0.9832149
2 2 Homme 1.0000000 -0.4163015 0.9023788
3 1 Femme 0.8734663 0.5308729 0.9780148
4 2 Femme 0.4605954 -0.3208255 0.9073359
Итак, я хотел бы адаптировать мою функцию g , чтобы получить такой кадр данных для каждой переменной группировки (пол, возраст, ...)
Наконец, я отредактировал свой титульный вопрос. Я надеюсь, что теперь он лучше соответствует своему содержанию.