Как использовать уравнение с моими данными в R? - PullRequest
0 голосов
/ 18 января 2020

Я борюсь с частью анализа данных для некоторых исследований, которые я провел. Другие исследователи использовали уравнение для оценки темпов прироста населения, которое я хотел бы реализовать, но я пытаюсь сделать это. Ниже приведено уравнение:

enter image description here

Где N0 - начальное число женщин в когорте, Ax - число женщин, появляющихся в день X, Wx является мерой среднего размера самки в день x для каждого экземпляра, f (wx) - это функция, связывающая плодовитость с размером самки, а D - время (в днях) для размножения самки.

N0 (n = 15) и D (7) - фиксированные числа, которые я могу поместить в уравнение. f (wx) - это функция, которая у меня есть (y = 91.85x - 181.40). Ниже приведен небольшой пример моих данных:

df <- data.frame(replicate = c('1','1','2','2','3','3','4','4'),
size = c(5.1, 4.9, 4.7, 4.6, 5.1,2.4,4.3,4.4),
  day_emerging = c('6','7','6','7','6','8','7','6'))

Извините, если это плохой вопрос для этого сайта. Я просто потерян для того, как справиться с этим. Мне нужно R, чтобы иметь возможность сделать уравнение для разных дней. Я не уверен, возможно ли это с моим текущим форматом данных, потому что R должен будет выяснить, сколько женщин появилось в день x, а затем выполнить другие вычисления для этого дня. Так что, возможно, это невозможно.

Большое спасибо за любые советы, которые вы можете предложить.

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Вот базовое решение R. Надеюсь, что это то, что вы после

dfs <- split(df,df$day_emerging)
p <- sum(sapply(dfs, function(v) nrow(v)*f(mean(v$size))))
q <- sum(sapply(dfs, function(v) nrow(v)*as.numeric(unique(v$day_emerging))*f(mean(v$size))))
res <- log(p/n)/(D + q/p)

таким, что

> res
[1] 0.5676656

ДАННЫЕ

n <- 15
D <- 7
f <- function(x) 91.85*x-181.4
df <- data.frame(replicate = c('1','1','2','2','3','3','4','4'),
                 size = c(5.1, 4.9, 4.7, 4.6, 5.1,2.4,4.3,4.4),
                 day_emerging = c('6','7','6','7','6','8','7','6'))

0 голосов
/ 18 января 2020

Ответом на этот вопрос является не R-специфика c, а навык сам по себе. Вам нужно перевести формальный математический язык на язык, который работает на R (или Python или Matlab, et c).

Это навык, который стоит развивать. В python -подобном psuedocode:

numerator = math.log((1 / n_0) * sum(A * f(w))
denominator = D + (sum(X * A * f(w)) / sum(A * f(w))
r_prime = numerator / denominator

Как вы можете видеть, существует множество неизвестных переменных, которые вам придется установить ранее. Кроме того, вещи f (w) должны быть определены как вспомогательные функции ранее в скрипте, чтобы их можно было использовать. В общем, вы просто хотите иметь возможность разбить ваше уравнение на маленькие части, которые вы можете проверить, чтобы они были правильными.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...