将生存分数数据转换为 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)
您可以使用 dplyr
和 tidyr
来帮助...
图书馆(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=0
和 surv=1
创建单独的行,我们使用 slice()
复制所需的行。
glm()
中有一个参数可让您指定二项式分母。
根据您的数据,它看起来像:glm(surv~., family = binomial, weights = n)
我有一个数据集,其中包括研究中果蝇不同遗传系(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)
您可以使用 dplyr
和 tidyr
来帮助...
图书馆(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=0
和 surv=1
创建单独的行,我们使用 slice()
复制所需的行。
glm()
中有一个参数可让您指定二项式分母。
根据您的数据,它看起来像:glm(surv~., family = binomial, weights = n)