R 按组识别密度图中的峰值/峰值
我用R 按组识别密度图中的峰值/峰值,r,ggplot2,density-plot,R,Ggplot2,Density Plot,我用ggplot2包为R创建了密度图。我想确定图中出现在0.01和0.02之间的峰值/峰值。有太多的图例,所以我删除了所有的图例。我试图筛选出数据,以找到一个组在0.01和0.02之间的大多数行数。然后我过滤掉所选的组,看看尖峰/峰值是否消失了,但没有,它仍然存在。你能建议一种方法来识别这些曲线图中的峰值/峰值吗 下面是一些代码: ggplot(NumofHitsnormalized, aes(NumofHits_norm, fill = name)) + geom_density(alpha=
ggplot2
包为R
创建了密度图。我想确定图中出现在0.01和0.02之间的峰值/峰值。有太多的图例,所以我删除了所有的图例。我试图筛选出数据,以找到一个组在0.01和0.02之间的大多数行数。然后我过滤掉所选的组,看看尖峰/峰值是否消失了,但没有,它仍然存在。你能建议一种方法来识别这些曲线图中的峰值/峰值吗
下面是一些代码:
ggplot(NumofHitsnormalized, aes(NumofHits_norm, fill = name)) + geom_density(alpha=0.2) + theme(legend.position="none") + xlim(0.0 , 0.15)
## To filter out the data that is in the range of first spike
test <- NumofHitsnormalized[which(NumofHitsnormalized$NumofHits_norm > 0.01 & NumofHitsnormalized$NumofHits_norm <0.02),]
## To figure it out which group (name column) has the most number of rows ##thus I thought maybe I could get the data that lead to spike
testMatrix <- matrix(ncol=2, nrow= length(unique(test$name)))
for (i in 1:length(unique(test$name))){
testMatrix[i,1] <- unique(test$name)[i]
testMatrix[i,2] <- nrow(unique(test$name)[i])}
ggplot(numhitsnormalized,aes(numhits_norm,fill=name))+geom_密度(alpha=0.2)+主题(legend.position=“none”)+xlim(0.0,0.15)
##过滤掉第一个峰值范围内的数据
test 0.01&numfohitsnormalized$numfohits\u norm在不查看代码的情况下,我起草了一个简单的函数,为指示异常值的变量添加TRUE/FALSE
标志:
GenerateOutlierFlag <- function(x) {
# Load required packages
Vectorize(require)(package = c("extremevalues"), char = TRUE)
# Run check for ouliers
out_flg <- ifelse(1:length(x) %in% getOutliers(x, method = "I")$iLeft,
TRUE,FALSE)
out_flg <- ifelse(1:length(x) %in% getOutliers(x, method = "I")$iRight,
TRUE,out_flg)
return(out_flg)
}
结果
x在不看代码的情况下,我起草了这个简单的函数,将TRUE/FALSE
标志添加到指示异常值的变量中:
GenerateOutlierFlag <- function(x) {
# Load required packages
Vectorize(require)(package = c("extremevalues"), char = TRUE)
# Run check for ouliers
out_flg <- ifelse(1:length(x) %in% getOutliers(x, method = "I")$iLeft,
TRUE,FALSE)
out_flg <- ifelse(1:length(x) %in% getOutliers(x, method = "I")$iRight,
TRUE,out_flg)
return(out_flg)
}
结果
x我也有类似的问题
我所做的是用3个窗口创建y值的滚动平均值和sd
计算基线数据的平均sd(您知道的数据不会有峰值)
设置阈值
如果高于阈值,则为1,否则为0
d5$roll_mean = runMean(d5$`Current (pA)`,n=3)
d5$roll_sd = runSD(x = d5$`Current (pA)`,n = 3)
d5$delta = ifelse(d5$roll_sd>1,1,0)
currents = subset(d5,d5$delta==1,na.rm=TRUE) # Finds all peaks
我的阈值是sd>1。根据您的数据,您可能希望使用均值或标准差。对于缓慢上升的峰值,平均值比sd更好 我也有类似的问题
我所做的是用3个窗口创建y值的滚动平均值和sd
计算基线数据的平均sd(您知道的数据不会有峰值)
设置阈值
如果高于阈值,则为1,否则为0
d5$roll_mean = runMean(d5$`Current (pA)`,n=3)
d5$roll_sd = runSD(x = d5$`Current (pA)`,n = 3)
d5$delta = ifelse(d5$roll_sd>1,1,0)
currents = subset(d5,d5$delta==1,na.rm=TRUE) # Finds all peaks
我的阈值是sd>1。根据您的数据,您可能希望使用均值或标准差。对于缓慢上升的峰值,平均值比sd更好 我对“异常值”一词表示怀疑。我似乎模模糊糊地记得一位著名的统计学家说过这样的话:“每当我看到一个极端意外的结果,我永远不知道我应该扔掉它还是为它申请专利。”。当然可以显示一些代码???看看包()它应该提供你需要的。添加到你的帖子中,不在评论部分,您也可以查看pastecs软件包中的turnpoints(),我对术语“异常值”提出质疑。我似乎模模糊糊地记得一位著名的统计学家说过这样的话:“每当我看到一个极端意外的结果,我永远不知道我应该扔掉它还是为它申请专利。”。当然可以显示一些代码???看看包()它应该提供你需要的。添加到你的帖子中,不是在评论部分,你也可以看看pastecs软件包中的turnpoints()。这个caTools软件包是runmean函数吗?是的,zoo软件包中也有rollmean,或者你可以很容易地自己编写它。你挑吧!这是caTools包的runmean函数吗?是的,zoo包中也有rollmean,或者你可以很容易地自己编写。你挑吧!