gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:03:10 25 4
gpt4 key购买 nike

我正在尝试将此公式输入到 R 中:

enter image description here

该公式采用以下输入:

  • 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

    它是 enter image description here我不知道如何打字。

    下面我尝试在 enter image description here 之前和之后实现等式的部分.
    # 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)

    代码看起来尽可能像方程的答案是首选,以便不了解 R 的同事可以识别代码中的方程。

    答案应该是 0.376127241057822

    最佳答案

    也许这会奏效。论文里不是有例子可以查吗?

    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

    更“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

    关于r - 如何将 [i] 的每个元素的 j=1 相加到 (i-1)(文章中的输入公式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36618431/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com