如何将[i]的每个元素的j = 1加到(i-1)(从文章中键入公式)

Ras*_*sen 8 r sum formula

我想把这个公式输入R:

在此输入图像描述

该公式采用以下输入:

  • M:每年死亡人数(全因死亡率);
  • D:每年癌症死亡人数(癌症死亡率);
  • R:每年登记的癌症病例数;
  • N:年中人口的规模.
  • w:每个年龄间隔的宽度,例如.[0-5]是5年宽,最后的间隔是85年以上,因此无限宽.

所有上述输入矢量18个元素长,因为它们指的是18个年龄间隔.前17个年龄间隔为5年,最后一个间隔(85年以上)无限宽.

该公式估计了Sasieni等人2011年提出的终身癌症风险 http://www.nature.com/bjc/journal/v105/n3/full/bjc2011250a.html

它是 在此输入图像描述 我不知道如何输入.

下面我试着在之前和之后实现等式的部分 在此输入图像描述.

# Input data:
M <-   c(140L, 12L, 12L, 59L, 94L, 101L, 117L, 213L, 368L, 607L, 1025L, 
1488L, 2255L, 2787L, 3257L, 3715L, 4231L, 6281L) 


R <-  c(42L, 22L, 28L, 54L, 77L, 108L, 169L, 227L, 293L, 531L, 863L, 
1464L, 2591L, 3334L, 3045L, 2605L, 1890L, 1261L) 


D <-  c(2L, 1L, 2L, 6L, 4L, 7L, 15L, 26L, 67L, 120L, 304L, 497L, 883L, 
1158L, 1321L, 1318L, 1177L, 1065L) 


N <- c(167323L, 168088L, 176017L, 180986L, 168189L, 155506L, 174274L, 
195538L, 207287L, 204711L, 183802L, 174342L, 183415L, 151277L, 
104199L, 71782L, 47503L, 33946L) 

# W width of age interval
w <-  c( 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,Inf )  


# function 
v1 <- numeric()           

for(i in 1:length(R))  {

v1[i] <- R[i] /  ( R[i] + M[i] - D[i] )  *  ( 1 - exp( - (w[i]/N[i]) *  (R[i] + M[i] - D[i]) ) )

}           


sum(v1)
Run Code Online (Sandbox Code Playgroud)

代码看起来像代码一样尽可能多的答案是首选,因此不了解R的同事可以识别代码中的等式.

答案应该是0.376127241057822

raw*_*awr 12

也许这会奏效.你可以检查一下纸上的例子吗?

f <- function(idx) {
  s <- numeric(idx)
  for (i in 1:idx)
    s[i] <- R[i] / (R[i] + M[i] - D[i]) * S(i) * (1 - exp(-w[i] / N[i] * (R[i] + M[i] - D[i])))
  s
}

S <- function(idx) {
  if (idx == 1L)
    return(1)
  s <- numeric(idx - 1)
  for (j in 1:(idx - 1))
    s[j] <- (R[j] + (M[j] - D[j])) / N[j]
  exp(-sum(s))
}

# Input data:
M <-   c(140L, 12L, 12L, 59L, 94L, 101L, 117L, 213L, 368L, 607L, 1025L, 
         1488L, 2255L, 2787L, 3257L, 3715L, 4231L, 6281L) 
R <-  c(42L, 22L, 28L, 54L, 77L, 108L, 169L, 227L, 293L, 531L, 863L, 
        1464L, 2591L, 3334L, 3045L, 2605L, 1890L, 1261L) 
D <-  c(2L, 1L, 2L, 6L, 4L, 7L, 15L, 26L, 67L, 120L, 304L, 497L, 883L, 
        1158L, 1321L, 1318L, 1177L, 1065L) 
N <- c(167323L, 168088L, 176017L, 180986L, 168189L, 155506L, 174274L, 
       195538L, 207287L, 204711L, 183802L, 174342L, 183415L, 151277L, 
       104199L, 71782L, 47503L, 33946L) 
# W width of age interval
w <-  c( 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,Inf )  

f(18)
#  [1] 0.0012516883 0.0006533947 0.0007939380 0.0014874104 0.0022786758 0.0034506651
#  [7] 0.0048088199 0.0057397672 0.0069608906 0.0126706127 0.0226156951 0.0395612334
# [13] 0.0644167605 0.0956951717 0.1184236481 0.1330917708 0.1256574840 0.1421444626

sum(f(18))
# [1] 0.7817021
Run Code Online (Sandbox Code Playgroud)

一种更"R"的方式

lr <- length(R)
S <- sapply(seq(R), function(idx)
  exp(-sum((R[-(idx:lr)] + (M[-(idx:lr)] - D[-(idx:lr)])) / N[-(idx:lr)])))
sum(R / (R + M - D) * S * (1 - exp(-w / N * (R + M - D))))
# [1] 0.7817021
Run Code Online (Sandbox Code Playgroud)