将生存分数数据转换为 R 中的二项式计数数据?

Convert Survival Fraction data to Binomial count data in R?

我有一个数据集,其中包括研究中果蝇不同遗传系(line)的个体数量(n)和存活(alive)的数量。这被分解成重复(rep)那个数据框看起来像这样:

    line rep  n   alive    trt
1    21   1   5   2        control
2    21   2   5   4        control
3    26   1   5   1        control
4    26   2   5   4        control

为了拟合二项式模型,我想将分数 (alive/n) 转换为计数数据。到目前为止,我一直在手动创建一个这样的数据框(这非常辛苦):

    line  rep trt        surv
1     21   1  control    0
2     21   1  control    0
3     21   1  control    0
4     21   1  control    1
5     21   1  control    1
6     21   2  control    0
7     21   2  control    1
8     21   2  control    1
9     21   2  control    1
10    21   2  control    1
11    26   1  control    0
12    26   1  control    0
13    26   1  control    0
14    26   1  control    0
15    26   1  control    1
16    26   2  control    0
17    26   2  control    1
18    26   2  control    1
19    26   2  control    1
20    26   2  control    1

这让我可以创建一个模型,其中生存是响应变量,线和治疗 (trt) 之间的相互作用是主要影响,rep 是随机影响。该模型有效,问题是生成它需要多少时间(我总共有 139 行,每行 5 次)。有人可以帮我创建一个功能,向我展示一个功能或一个可以帮助我的包吗?有更简单的方法吗?

提前致谢,

菲尔

使用您的示例数据

dd<-read.table(text="    line rep  n   alive    trt
1    21   1   5   2        control
2    21   2   5   4        control
3    26   1   5   1        control
4    26   2   5   4        control", header=T)

您可以使用 dplyrtidyr 来帮助...

图书馆(dplyr) 图书馆(整理)

dd %>% mutate(dead=n-alive) %>% select(-n) %>% 
    gather(status, count, c(alive,dead)) %>% 
    slice(rep(1:n(), .$count)) %>% select(-count) %>% 
    transform(surv=ifelse(status=="alive",1,0), status=NULL) %>%
    arrange(line, rep, trt, surv)

我们使用 gather()surv=0surv=1 创建单独的行,我们使用 slice() 复制所需的行。

glm() 中有一个参数可让您指定二项式分母。

根据您的数据,它看起来像:glm(surv~., family = binomial, weights = n)