假设我有5种疾病(a,b,c,d,e)。询问样本中的每个人是否患有各种疾病,然后分配权重(W)。我需要确定人口中每种疾病组合的比例。这将涉及人们回答(1,1)任何疾病组合的组合。
df <- data.frame(
a = c(1, 1, 0, 0),
b = c(1, 1, 0, NA),
c = c(0, 1, NA, 1),
d = c(1, 1, 0, 1 ),
e = c(1, 1, 1, 0 ),
W = c(1.5,3.5,2.5,2.3))
df
a b c d e W
1 1 1 0 1 1 1.5
2 1 1 1 1 1 3.5
3 0 0 NA 0 1 2.5
4 0 NA 1 1 0 2.3
我能够弄清楚这一点得到一个矩阵:
DisDyads <- apply (df, 2, function (x) colSums (df == 1 & x == df, na.rm = TRUE))
a b c d e W
a 2 2 1 2 2 0
b 2 2 1 2 2 0
c 1 1 2 2 1 0
d 2 2 2 3 2 0
e 2 2 1 2 3 0
W 0 0 0 0 0 0
如何将这些转换为比例?
这是矩阵输出的第1行和第2行在适当条件和比例下的样子的示例:
a b c d e W
a 0.5 0.5 0.25 0.5 0.5 0
b 0.5 0.5 0.25 0.5 0.5 0
接下来,我还需要在确定每个组合在人口水平的比例时考虑权重。
有人可以帮我解决这个问题吗?如果我试图寻找三种疾病组合的比例怎么办?例。有a,b,c和a,b,d等人的比例。
我真的很感激任何帮助。提前谢谢!
答案 0 :(得分:0)
哦,我想我现在看到了。您希望基本上创建一个交叉表查找表。这不容易显示。它会很大,因为你需要显示所有组合,并且有很多重复。
为了使它们成比例,你只需要将整个数据框(col W除外)除以nrow,然后将行乘以比例权重(W / sum(W)):
df[,1:5] <- df[,1:5]/nrow(df)
要增加你的权重,需要进行一些操作。
df <- as.matrix(df)
df <- as.data.frame(t(t(df[,1:5]*(df[,6] / sum(df[,6]))))) # this subsets your data, and multiplies each cell in cols 1:5 by the proportional weights.
a b c d e
1 0.03826531 0.03826531 0.00000000 0.03826531 0.03826531
2 0.08928571 0.08928571 0.08928571 0.08928571 0.08928571
3 0.00000000 0.00000000 NA 0.00000000 0.06377551
4 0.00000000 NA 0.05867347 0.05867347 0.00000000
我认为你可以得到你的加权值,然后从那里开始。组合不应该只是添加剂吗?