gpt4 book ai didi

r - 计算R中矩阵列的曲线下面积

转载 作者:行者123 更新时间:2023-12-02 03:25:00 25 4
gpt4 key购买 nike

我想计算一组受试者在多个浓度下测得的几个特征的曲线下面积。 MESS auc 函数(此处描述:Calculate the Area under a Curve in R)为我提供了 auc,但我无法将其应用于数据文件中所有主题的每一列(特征)。

我的数据基本上是这样组织的:

rowname  id      conc    feature1    feature2     feature3   ...
s1 ccr01 5 18575 80337 100496
s2 ccr01 4 18161 65723 109037
s3 ccr01 3 18092 99807 105363
s4 ccr01 2 5196 71520 84113
s5 ccr01 1 3940 50236 77145
s6 ccr02 5 1878 21812 10306
s7 ccr02 4 3660 18437 13408
s8 ccr02 3 4439 28379 25899
s9 ccr02 2 2710 22960 28080
s10 ccr02 1 1970 23557 22409
.
.
.

我想返回按唯一主题 ID(行)排序的特征 AUC(列)的矩阵/df:

rowname    feature1    feature2    feature3
ccr01 52338.61 300823.6 388368.2
ccr02 12914.41 91486.32 84316.82

如有任何建议,我们将不胜感激!

最佳答案

使用链接帖子中的函数和 plyr 获取函数 ddply,这可能有效(并且数据被命名为 dat)

library(zoo)
AUC <- function(x, fs)
sapply(fs, function(f) sum(diff(x$conc)*rollmean(x[,f],2)))

library(plyr)
ddply(dat, .(id), function(x) {
x <- x[order(x$conc),]
AUC(x, grep("feature", names(x), value=T))
})

# id feature1 feature2 feature3
# 1 ccr01 52706.5 302336.5 387333.5
# 2 ccr02 12733.0 92460.5 83744.5

这里,fs 是包含 feature 字符串的列,因此它只是将 AUC 函数应用于这些列,按 分组编号

dplyr 解决方案,

library(dplyr)
AUC <- function(x, fs)
setNames(as.data.frame(
lapply(fs, function(f) sum(diff(x$conc)*rollmean(x[,f], 2)))),
fs)

dat %>%
group_by(id) %>%
arrange(conc) %>%
do(AUC(., grep("feature", names(.), value=T)))

关于r - 计算R中矩阵列的曲线下面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com