Эффективное распределение данных и распределение фитингов

Довольно много ошибок. Во-первых, это геолокация. Ваше второе место неверно, поскольку долгота может быть только от +180 до -180, поэтому -181 не существует на земле! Во-вторых, как упоминал в комментарии г-н Упсидаун, вы вызываете функцию внутри функции. Сначала исправьте геолокацию, а затем вызовы функций, которые должны исправить проблемы, которые у вас есть.

2
задан Sarah Roberts 13 July 2018 в 15:39
поделиться

2 ответа

Одной из распространенных практик является разделение данных с помощью split, а затем применение интересующей функции к этой группе. Предположим, что у нас есть четыре столбца, группа, настройки, диагноз и stay.length. Первые три имеют два уровня.

df <- data.frame(
  group = sample(1:2, 64, TRUE),
  setting  = sample(1:2, 64, TRUE),
  diagnosis  = sample(1:2, 64, TRUE), 
  stay.length = sample(1:5, 64, TRUE)
)
> head(df)
    group setting diagnosis var
1     1       1         1   4
2     1       1         2   5
3     1       1         2   4
4     2       1         2   3
5     1       2         2   3
6     1       1         2   5

Выполните split, и вы получите разделенный List:

dfl <- split(df$stay.length, list(df$group, df$setting, df$diagnosis))

> head(dfl)
$`1.1.1`
[1] 5 3 4 1 4 5 4 2 1

$`2.1.1`
[1] 5 4 5 4 3 1 5 3 1

$`1.2.1`
[1] 4 2 5 4 5 3 5 3

$`2.2.1`
[1] 2 1 4 3 5 4 4

$`1.1.2`
[1] 5 4 4 4 3 2 4 4 5 1 5 5

$`2.1.2`
[1] 5 4 4 5 3 2 4 5 1 2    

. Затем мы можем использовать lapply для выполнения любой функции в каждой группе в список. Например, мы можем применить mean

dflm <- lapply(dfl, mean)
> dflm
$`1.1.1`
[1] 3.222222

.
.
.
.

$`2.2.2`
[1] 2.8

. В вашем случае вы можете применить fitdist или любую другую функцию.

dfl.fitdist <- lapply(dfl, function(x) fitdist(x, "gamma"))

> dfl
$`1.1.1`
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters:
  estimate Std. Error
shape  3.38170  2.2831073
rate   1.04056  0.7573495

.
.
.


$`2.2.2`
Fitting of the distribution ' gamma ' by maximum likelihood 
Parameters:
  estimate Std. Error
shape 4.868843  2.5184018
rate  1.549188  0.8441106
0
ответ дан see-king_of_knowledge 17 August 2018 в 12:29
поделиться
  • 1
    Благодаря! Это будет очень полезно, но я получаю сообщение об ошибке, когда я пытаюсь использовать fitdist, он говорит, что «данные должны быть числовым вектором длиной больше 1». Я просмотрел код fitdist, и сообщение об ошибке связано с кодом: if (! (Is.vector (data) & amp; is.numeric (data) & amp; length (data) & gt; 1)) stop ( «данные должны быть числовым вектором длины, превышающим 1») – Sarah Roberts 16 July 2018 в 14:21
  • 2
    Я добавил, как вы можете использовать lapply с fitdist как функцию. И в этом работает отлично. Одна из возможностей для проблемы, с которой вы сталкиваетесь, заключается в том, что после того, как вы разделите, длина вектора ваших данных равна 1. Убедитесь, что после разделения вы имеете достаточно данных для выполнения fitdist. вы можете использовать lapply(dfl, length), чтобы найти длину своего списка – see-king_of_knowledge 16 July 2018 в 18:30

OK, ваш пример здесь не совсем воспроизводимый, но я думаю, что ответ, который вы хотите, будет выглядеть примерно так:

result <- los_data %>%
group_by(group, setting, diagnosis) %>%
do({
  fit <- fitdist(.$my_column, "gamma")
  data_frame(group=.$group[1], setting=.$setting[1], diagnosis=.$diagnosis[1], fit = list(fit))
}) %>%
ungroup()

Это даст вам фрейм данных всех приступов, с столбцы для группы, настройка, диагноз, а также столбец-столбец, который содержит подгонки для каждого из них. Поскольку это столбец списка, вам нужно будет использовать двойные скобки для извлечения отдельных подстановок. Пример:

# Get the fit in the first row
result$fit[[1]]
0
ответ дан jrdnmdhl 17 August 2018 в 12:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: