首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是为不同级别的可变粒度计算特定类别度量的有效方法?

什么是为不同级别的可变粒度计算特定类别度量的有效方法?
EN

Stack Overflow用户
提问于 2014-08-12 16:25:34
回答 2查看 75关注 0票数 1

为了使我的抽象问题更加明确,我想计算每个年龄阶层的特定疾病的阶层发病率。但我希望能够编写灵活的代码,以适应不同用户指定级别的年龄分类。例如,我可能有兴趣计算儿童中<2岁、2-3岁、4-5岁、6-11岁、12-23岁和24-59岁(年龄的大多数颗粒状治疗)的发病率。但我也希望对年龄的粗化处理执行同样的计算(即<12 mos的年龄,12-23 mos,24-59 mos)。所以我想可以随意改变切点。

示例:

代码语言:javascript
运行
复制
    incidence <- (age group freq)/(census pop for age group) * 100000

我想我可以设置一个控制结构函数(例如,如果年龄< 12 mo,那么agegroup=1等)作为对象,并在*apply函数中引用该对象(考虑到我希望在多个数据格式中计算这些值),但我想知道是否有更好的方法来解决这个问题。如果你能给我参考论文或者在这里给出一个具体的答案,我很高兴。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-12 17:41:50

如果您提供了您的数据(或一个有代表性的子集)并展示了您迄今尝试过的内容,您的问题会更好。见this post。如果没有这一点,这就产生了很多假设。

假设有一个数据框架( df ),它按年龄来识别儿童,对于5种疾病中的每一种,该儿童是否患有这种疾病。每一行都是子行,df$age是年龄,如果子行有Xn病,则df$Xn为1,否则为0。在本例中,我们以5%的速度随机使用了1,000,000名随机“分配”的疾病。然后,

代码语言:javascript
运行
复制
set.seed(1)    # for reproducible example
children <- data.frame(age=sample(1:60,1e6, replace=T), 
                 matrix(sample(0:1,5e6, replace=T, p=c(0.95,0.05)),nc=5))

# you start here...
disease.rates <- function(data,breaks) {
  cuts      <- cut(data$age,breaks)
  get.rates <- function(df) sapply(df,function(col) sum(col==1)/length(col))
  rate      <- sapply(split(data[-1],cuts),get.rates)
  data.frame(t(rate))
}
# by year
disease.rates(children,breaks=c(0,12*1:5))
##              X1      X2      X3      X4      X5
## (0,12]  0.04927 0.05027 0.04916 0.05049 0.05074
## (12,24] 0.04965 0.04957 0.04970 0.05044 0.04982
## (24,36] 0.05032 0.05065 0.05044 0.05036 0.05024
## (36,48] 0.04962 0.05079 0.04984 0.04895 0.04981
## (48,60] 0.05103 0.05012 0.04922 0.04986 0.04942

# more detail in first year
disease.rates(children,breaks=c(0,1,2,4,6,12,60))
##              X1      X2      X3      X4      X5
## (0,1]   0.04780 0.04949 0.04846 0.04968 0.05198
## (1,2]   0.04891 0.04808 0.04909 0.05212 0.05236
## (2,4]   0.04943 0.04797 0.04740 0.05113 0.05110
## (4,6]   0.04980 0.05143 0.05004 0.05086 0.05189
## (6,12]  0.04935 0.05116 0.04959 0.05002 0.04977
## (12,60] 0.05016 0.05028 0.04980 0.04990 0.04982
票数 1
EN

Stack Overflow用户

发布于 2014-08-12 17:16:17

以下可能会有帮助。考虑新诊断病例的年龄。你可以在不同的休息时间“切割”:

代码语言:javascript
运行
复制
age = sample(1:60, 100, replace=T)
age
  [1] 57 50 52 18 18 15 48 36  5 45 25 44 23 60 36 27 43 41 23 10 41 40 58  5 55 29 21 41 16 15 40 55 52 15 53  3 13 57 37 49 33
 [42] 34 54 25 28  5 23 43 50 12  9 42 40 25 29 51 39 59  3 19 11 17 35  4 41 45 28 14  5 36 13 56 33  7 55  5 11 34 47 46 44 26
 [83] 56 55 13 59 57 60 37 51 47 40 39 28 33  4 28 43 20 24

table(cut(age, breaks=c(0,1,10,25,50,60)))

  (0,1]  (1,10] (10,25] (25,50] (50,60] 
      0      12      24      44      20 

barplot(table(cut(age, breaks=c(0,1,10,25,50,60))))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25269408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档