为了使我的抽象问题更加明确,我想计算每个年龄阶层的特定疾病的阶层发病率。但我希望能够编写灵活的代码,以适应不同用户指定级别的年龄分类。例如,我可能有兴趣计算儿童中<2岁、2-3岁、4-5岁、6-11岁、12-23岁和24-59岁(年龄的大多数颗粒状治疗)的发病率。但我也希望对年龄的粗化处理执行同样的计算(即<12 mos的年龄,12-23 mos,24-59 mos)。所以我想可以随意改变切点。
示例:
incidence <- (age group freq)/(census pop for age group) * 100000
我想我可以设置一个控制结构函数(例如,如果年龄< 12 mo,那么agegroup=1等)作为对象,并在*apply函数中引用该对象(考虑到我希望在多个数据格式中计算这些值),但我想知道是否有更好的方法来解决这个问题。如果你能给我参考论文或者在这里给出一个具体的答案,我很高兴。谢谢。
发布于 2014-08-12 17:41:50
如果您提供了您的数据(或一个有代表性的子集)并展示了您迄今尝试过的内容,您的问题会更好。见this post。如果没有这一点,这就产生了很多假设。
假设有一个数据框架( df
),它按年龄来识别儿童,对于5种疾病中的每一种,该儿童是否患有这种疾病。每一行都是子行,df$age
是年龄,如果子行有Xn病,则df$Xn
为1,否则为0。在本例中,我们以5%的速度随机使用了1,000,000名随机“分配”的疾病。然后,
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
发布于 2014-08-12 17:16:17
以下可能会有帮助。考虑新诊断病例的年龄。你可以在不同的休息时间“切割”:
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))))
https://stackoverflow.com/questions/25269408
复制相似问题