Оставьте один, но для групп в R - PullRequest
0 голосов
/ 29 мая 2018

Цель

Возвращать элементы из нескольких сгенерированных функцией списков в виде строк во фрейме данных.

Пример данных:

delete<-    structure(list(f = structure(c(2L, 3L, 2L, 1L, 1L, 4L, 4L, 5L, 3L, 5L), .Label = c("a", "b", "c", "d", "e"), class = "factor"),    n = c(3.86634168231333, 5.12320676294787, 7.43524756894488,     5.4483312206524, 4.6808590809153, 3.09435163890175, 3.3369519531068,     5.48377017072716, 3.22234879830383, 4.21889257443295), yi = c(7.8076602154975,    6.5323499682638, 4.59639499129274, 5.23921401222216, 6.06635185725809,    6.70450561710897, 6.80135195068635, 6.05939661908661, 6.57758084773293,    6.66031140517216), vi = c(0.974757327755975, 1.18471706886098,    0.887199336597602, 0.822433823427991, 0.988350739676306,    0.891992523606773, 0.882568180283011, 0.986873003631463,    0.970027651579457, 1.01797517893535)), .Names = c("f", "n","yi", "vi"), row.names = c(NA, -10L), class = "data.frame")

Попытка

Что-то, что, по крайней мере, получает правильные числа и отслеживает столбец id (минимальное требование) значения "f", но я не знаю, как манипулировать:

for(i in unique(delete$f)) print(c(i,glm(data=delete[delete$f!=i,], yi~vi)$aic))

[1] "b"                "16.1840991165046"
[1] "c"                "25.6744104404786"
[1] "a"                "25.6185827181431"
[1] "d"               "24.600830735108"
[1] "e"                "26.4382751230764"

Здесь имеется ряд сообщений ( 1 , 2 , 3 , 4 ), посвященныхправильные способы сделать один на один, в отличие от групп.

Проблема

Я не знаю, как получить кадр данных с тем же содержимым, что и этот вывод.Решение одного этого было бы огромным.Вторая проблема заключается в том, что я, даже если я преодолею эту проблему, если бы мне также потребовались коэффициенты модели, мне пришлось бы заменить $ aic в приведенном выше коде, а затем объединить два кадра данных.

Я знаю, что мог бы использоватьесли мне нужны результаты по подмножеству данных, как мне сделать обратное и получить результаты по подмножествам, исключающим конкретную группу?

Сводка

Iхочу провести анализ «один-один-один-один», в котором я не исключаю отдельные наблюдения, а вместо этого группы (в данном случае это определяется общим уровнем вектора «f»).

Приложение

Это на самом деле должно быть реализовано для некоторых выходных данных функции rma метафоры, но я использую glm в качестве более универсального примера (замените «glm» на «rma» и «aic» на «ci»)..lb "и это моя проблема).Подобно тому, что я сказал выше, в metafor есть встроенная функция left1out, предназначенная для исключения отдельных строк данных, а не групп.

1 Ответ

0 голосов
/ 29 мая 2018

Вы все еще можете использовать lapply.Вот одно из многих возможных решений.

results <- lapply(unique(delete$f), function(i) {
  data.frame(i=i, AIC=glm(data=delete[delete$f!=i,], yi~vi)$aic)
})

results_df <- do.call(rbind, results)

results_df
  i      AIC
1 b 16.18410
2 c 25.67441
3 a 25.61858
4 d 24.60083
5 e 26.43828
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...