Package Desolve Package Can Parames включают в себя матрицу? -- r поле с участием parameters поле с участием matrix пол Связанный проблема

deSolve package can parameters include a matrix?


2
vote

проблема

русский

Я пытаюсь кодировать модель Seir, которая является возрастной, стратифицированной; То есть в моих дифференциальных уравнениях у меня есть параметр для массового действия, это сумма бета * (доля заражена) * (число восприимчив) более 20 возрастных классов. Коэффициент передачи (бета) рассчитывается из контактной матрицы. Контактная матрица имеет 20 столбцов и строк, которые представляют возрастные классы (строки = лицо I, столбцы = человек j), и содержит вероятность контакта между двумя людьми в любых возрастных классах. Я разработал это и прочитал его в R. Моя проблема в том, что я не знаю, как (или если) я могу использовать матрицу внутри моих параметров с помощью Desolve. Этот код ниже я писал не работает, я верю из-за матрицы / я получаю эту ошибку:

 <код> Error in beta * S : non-numeric argument to binary operator   

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

 <код> mat <-as.matrix(read.csv("H:/IBS 796R/contactmatrix.csv", header=F))  times <- seq(0,20,by=1/52) parameters <- c(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15) xstart <- c(S=0.06,E=0,I=0.001,R=0)  SEIR0 <- function(t,x,parameters){     S=x[1]     E=x[2]     I=x[3]     R=x[4]     with(as.list(parameters), {         dS=v*S -beta*S*I/N -delta*S         dE=beta*S*1/N -E*(sigma+delta)         dI=sigma*E -I*(gamma+delta)         dR=gamma*I-delta*R         res=c(dS,dE,dI,dR)         list(res)     }) }  out <- as.data.frame(lsoda(xstart,times,SEIR0,parameters))   

Кроме того, если я печатаю параметры, это то, что бета выглядит:

 <код> $beta.V1  [1] 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 [12] 4e-04 4e-04 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03  $beta.V2  [1] 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 [12] 4e-04 4e-04 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03   

.... через $ beta.v20. Поэтому я думаю, что он создает 20 векторов, каждый из 20 аргументов ... Я думаю, что каждый - ряд оригинальной матрицы «Мат», умноженный на постоянную 0,04? Однако, когда я умножу Mat * 0,04 снаружи «параметры», я получаю ожидаемую матрицу. Я немного борюсь с тем, как реализовать эти уравнения, используя Desolve и признателю любые советы о том, возможно ли это. Заранее спасибо.

Английский оригинал

I'm trying to code an SEIR model that is age-stratified; that is, in my differential equations I have a parameter for mass action that is the sum of beta*(proportion infected)*(number susceptible) over 20 age classes. The transmission coefficient (beta) is calculated from a contact matrix. The contact matrix has 20 columns and rows which represent the age classes (rows=person i, columns=person j), and contains the probability of contact between two people in any age classes. I designed it and read it into R. My problem is I don't know how (or if) I can use a matrix inside my parameters with deSolve. This code below I wrote doesn't work, I believe because of the matrix / I get this error:

Error in beta * S : non-numeric argument to binary operator 

Before I fool with it too much, I'd like to know if it is possible to use a matrix like this as a parameter for this model.

mat <-as.matrix(read.csv("H:/IBS 796R/contactmatrix.csv", header=F))  times <- seq(0,20,by=1/52) parameters <- c(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15) xstart <- c(S=0.06,E=0,I=0.001,R=0)  SEIR0 <- function(t,x,parameters){     S=x[1]     E=x[2]     I=x[3]     R=x[4]     with(as.list(parameters), {         dS=v*S -beta*S*I/N -delta*S         dE=beta*S*1/N -E*(sigma+delta)         dI=sigma*E -I*(gamma+delta)         dR=gamma*I-delta*R         res=c(dS,dE,dI,dR)         list(res)     }) }  out <- as.data.frame(lsoda(xstart,times,SEIR0,parameters)) 

Also, if I print the parameters, this is what beta looks like:

$beta.V1  [1] 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 [12] 4e-04 4e-04 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03  $beta.V2  [1] 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 4e-04 [12] 4e-04 4e-04 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 8e-03 

....through $beta.V20. So I think it's creating 20 vectors, each with 20 arguments...I think each is a row of the original matrix 'mat' multiplied by the constant 0.04? However, when I multiply mat*0.04 outside "parameters" I get the expected matrix. I'm struggling a bit with how to realize these equations using deSolve and would appreciate any advice on whether it's possible. Thanks in advance.

</div
        

Список ответов

2
 
vote
vote
Лучший ответ
 

Происходит ошибка в этой строке:

 <код> dS=v*S -beta*S*I/N -delta*S   

<Код> non-numeric argument to binary operator означает, что вы пытаетесь умножить функцию, например, числовой. Вы можете воспроизвести его по <код> I*1

 <код> Error in I * 1 : non-numeric argument to binary operator`   

Здесь, R могут «найти бета, а бета интерпретируется как специальные функции математики, поэтому ошибка. Вам нужно определить параметры как

 <код> # a list  list(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15)   

и

 <код>  ## you get a vector mu,N,p,delta,beta1,bet2,...   c(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15)   

Я думаю, что вы даже можете переписать вашу функцию как:

 <код> SEIR0 <- function(t,x,parameters){   with(as.list(c(parameters, x)), {     dS = v*S -beta*S*I/N -delta*S    ## matrix     dE = beta*S*1/N -E*(sigma+delta) ## matrix     dI = sigma*E -I*(gamma+delta)     dR = gamma*I-delta*R     res = c(dS,dE,dI,dR)     list(res)                        ## different of the structure of xstart   }) }   

Это исправьте проблему выше, но ODE не будет работать, потому что количество производных, возвращаемых SEIR0, должно быть равно длине начальных условий <Код> xstart Vector (4 здесь). >

Я предлагаю, например:

 <код>   res <- c(dS=mean(dS),dE=mean(dE),dI=dI,dR=dR)   list(res)   

 

The error occurs in this line :

dS=v*S -beta*S*I/N -delta*S 

non-numeric argument to binary operator means you try to multiply a function for example by a numeric. You can reproduce it by I*1

Error in I * 1 : non-numeric argument to binary operator` 

Here, R can' find beta , and beta is interpreted as the Special Functions of Mathematics, so the error. You need to define parameters as

# a list  list(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15) 

and

 ## you get a vector mu,N,p,delta,beta1,bet2,...   c(mu=0,v=1/75,N=1,p=0,delta=2.4,beta=mat*0.04,sigma=1/8,gamma=1/15) 

I think you can even rewrite your function as:

SEIR0 <- function(t,x,parameters){   with(as.list(c(parameters, x)), {     dS = v*S -beta*S*I/N -delta*S    ## matrix     dE = beta*S*1/N -E*(sigma+delta) ## matrix     dI = sigma*E -I*(gamma+delta)     dR = gamma*I-delta*R     res = c(dS,dE,dI,dR)     list(res)                        ## different of the structure of xstart   }) } 

This will correct the problem above but the ODE will not work because the number of derivatives returned by SEIR0 must be equal to the length of the initial conditions xstart vector(4 here).

I suggest for example :

  res <- c(dS=mean(dS),dE=mean(dE),dI=dI,dR=dR)   list(res) 
</div
 
 

Связанный проблема

0  R Язык: Как работать с динамически размером вектора?  ( R language how to work with dynamically sized vector ) 
Я изучаю программирование R, и пытаясь понять лучший подход к работе с вектором, когда вы не знаете, последний размер, он в конечном итоге будет. Например, в ...

6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания  ( 403 error when using rvest to log into website for scraping ) 
Я пытаюсь высказать страницу на веб-сайте, который требует входа в систему и в целом получение ошибки 403. Я изменил код из этих 2 сообщений для моего сайта...

12  Частные члены в R Справочник класса R  ( Private members in r reference class ) 
Можно ли иметь частные поля элементов внутри класса R r. Играя с некоторыми из онлайн-примеров у меня есть: <код> > Account <- setRefClass( "ref_Account"...

0  Извлечение данных из нижних слоев в растробрике  ( Extracting data from lower layers in a rasterbrick ) 
Итак, я извлекаю данные из растробрика, который я сделал, используя метод из этого вопроса: Как извлечь данные из растробрика? В дополнение к получению да...

1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA?  ( Is there a non java implementation of the m5p regression model of the rweka libr ) 
Я ищу функцию, которая создает модель регрессии M5P, как <код> M5P функция <код> RWeka библиотеки (как <код> M5P функция на основе кода Java, который имеет...

1  Замените отсутствующие значения в ячейке со значением из ячейки выше (N-1) с помощью петли  ( Replace missing values in a cell with a value from the cell above n 1 using a ) 
У меня есть файл данных с тысячами строк, у которых есть пробелы, которые я хочу заполнить значением. Мне нужно заменить пустые ячейки со значениями из них вы...

2  Как изменить график разброса GGPlot2  ( How to modify ggplot2 scatter plot ) 
Вот мой набор данных: <код> df1 = data.frame(Count.amp = c(8,8,1,2,2,5,8), Count.amp.1 = c(4,4,2,3,2,5,4)) Я попробовал <код> library(ggplot2) qplot(C...

1  Как прочитать файлы суффикса .avl в r?  ( How to read avl suffix files into r ) 
Я загрузил глобальные водно-болотные угодья и озерные данные из этой ссылки: https://www.worldwildlife.org/pages/globalakes- и-водно-болотный угодья база дан...

5  Расчет дней в месяц между интервалом двух дат  ( Calculating days per month between interval of two dates ) 
У меня есть набор событий, которые каждый из которых имеет начало и окончание, но они проходят по объему ряда месяцев. Я хотел бы создать таблицу, которая пок...

0  Коэффициент переменных членства в R  ( Coefficient variable membership in r ) 
Я разработал ужасно длительное решение для этого перед использованием регулярных выражений, но я надеюсь, что есть более родственный способ сделать это. Учи...

0  Как сделать бесконечно рекурсивный список в R: путать [и [[  ( How to make an infinitely recursive list in r confuse and ) 
Редактировать: Этот вопрос глупо, я путающую [и [((спасибо @josilber), но я не могу удалить его. Как можно сделать бесконечно рекурсивный список, l == l [1]...

2  dlyryr "не обещание" ошибка  ( Dplyr not a promise error ) 
У меня есть набор набора панели, для которого я создал отсталые переменные с помощью функции LAG (). Когда я пытаюсь рассчитать дельта для каждого TimePoint, ...

0  Трудно заполнить NAS с вмененными ценностями петлей, но не один за другим  ( Difficultly filling nas with imputed values by loop but not one by one ) 
Так что у меня есть матрица в R, это подмножество данных DataFrame, удерживающееся немного больше, чем идентификатор, группируя переменную и серии 1100 показа...

0  Ошибка при использовании списков  ( Error when using lists ) 
У меня есть файл .rdata со списком внутри. Однако я получаю сообщение об ошибке при попытке отобразить список. <код> ls(data$Test$t0) Error in list2env(lis...

7  Ось X не соответствует барплоту  ( X axis does not match barplot ) 
Я использовал функцию barplot () для создания сложенного диаграммы из матрицы. Матрица выглядит так: <код> 1 0.989013 0.010987 2 0.999990 0.000010 3 0.999...

Связанный проблема

0  R Язык: Как работать с динамически размером вектора? 
6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания 
12  Частные члены в R Справочник класса R 
0  Извлечение данных из нижних слоев в растробрике 
1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA? 
1  Замените отсутствующие значения в ячейке со значением из ячейки выше (N-1) с помощью петли 
2  Как изменить график разброса GGPlot2 
1  Как прочитать файлы суффикса .avl в r? 
5  Расчет дней в месяц между интервалом двух дат 
0  Коэффициент переменных членства в R 
0  Как сделать бесконечно рекурсивный список в R: путать [и [[ 
2  dlyryr "не обещание" ошибка 
0  Трудно заполнить NAS с вмененными ценностями петлей, но не один за другим 
0  Ошибка при использовании списков 
7  Ось X не соответствует барплоту 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.