R中条件和加权数据的组合矩阵

时间:2018-04-17 18:49:49

标签: r matrix combinations weighted

假设我有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等人的比例。

我真的很感激任何帮助。提前谢谢!

1 个答案:

答案 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

我认为你可以得到你的加权值,然后从那里开始。组合不应该只是添加剂吗?