R `ggstatsplot中提供的非有限值

R `ggstatsplot中提供的非有限值,r,ggplot2,R,Ggplot2,我正在使用ggstatsplot获得统计分析的可视化表示 我有很多数据集,所有数据集的构成都非常相似。有些工作很好,而另一些则不行。data1是一个工作示例,data2不工作 data1 <- structure(list( treatment = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,

我正在使用ggstatsplot获得统计分析的可视化表示

我有很多数据集,所有数据集的构成都非常相似。有些工作很好,而另一些则不行。data1是一个工作示例,data2不工作

 data1 <- structure(list(
     treatment = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 
     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
     3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 
     5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
     6L),
     .Label = c("negative_ctrl", "positive_ctrl", "treatmentA", "treatmentB", "treatmentC", "treatmentD"), class = "factor"),
     
     value = c(1.74501, 2.04001, 1.89501, 1.84001, 
     1.89501, 9.75001, 8.50001, 8.80001, 11.50001, 10.25001, 7.90001, 
     9.25001, 11.45001, 7.75001, 7.75001, 7.55001, 8.70001, 8.20001, 
     6.95001, 6.60001, 7.40001, 7.15001, 8.25001, 9.20001, 8.95001, 
     6.45001, 6.05001, 5.40001, 7.95001, 6.80001, 4.65001, 6.40001, 
     6.40001, 6.70001, 5.40001, 3.20001, 2.70001, 4.30001, 4.10001, 
     3.60001, 4.00001, 3.00001, 4.70001, 3.10001, 3.50001, 6.45001, 
     5.45001, 4.90001, 7.25001, 4.55001, 4.70001, 6.25001, 5.65001, 
     6.00001, 5.10001)),
     
     row.names = c(NA, -55L), class = c("tbl_df", "tbl", "data.frame"))

data2 <- structure(list(
     treatment = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 
     2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
     4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 
     5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L),
     .Label = c("negative_ctrl", "positive_ctrl", "treatmentA", "treatmentB", "treatmentC", "treatmentD"), class = "factor"), 
    
     value = c(1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 6.77501, 
     5.68751, 5.99201, 8.24501, 7.01251, 4.79501, 5.99126, 8.26276, 
     5.35376, 5.38751, 4.60251, 5.38901, 4.85201, 4.44401, 5.20501, 
     6.20701, 5.77001, 4.05201, 3.65126, 3.02401, 4.68351, 3.90001, 
     2.56951, 3.70001, 3.61901, 3.96401, 2.93601, 1.53901, 1.40801, 
     2.05601, 2.08501, 1.89701, 1.79501, 1.50001, 2.09151, 1.53551, 
     1.57501, 3.88851, 3.09151, 2.75501, 4.40626, 2.42001, 2.60951, 
     3.83501, 3.37151, 3.70001, 2.92701)),
     
     row.names = c(NA, -52L), class = c("tbl_df", "tbl", "data.frame"))
对于data1,我得到以下信息:

对于data2,我得到:

> Error in stats::optim(par = 1.1 * rep(lambda, 2), fn = function(x) { : non-finite value supplied by optim

起初,我认为问题可能是我在阴性对照中传递了几个零,但我首先将它们增加了一点点,然后增加了1,以确保值的范围不是问题。我能看到的唯一差异是,我在data2中只有7个测量值,而不是10个测量值用于treatmentA(级别3),但在data1中只有10个测量值(由于样本失败,不得不删除一些NAs)。然而,在这两种情况下,阴性对照(1级)只有5个值,我认为在这种类型的分析中,两组之间的样本大小不同并不存在问题。

在这些情况下,最好尝试基本图,例如隔离箱线图:

因此,比较这两个数据集:

library(Rmpfr)
library(ggstatsplot)

ggstatsplot::ggbetweenstats(
     data = data1, 
     x = treatment, 
     y = value,
     messages = FALSE )

ggstatsplot::ggbetweenstats(
     data = data2, 
     x = treatment, 
     y = value,
     messages = FALSE )
boxplot(value ~ treatment, data=data1)
boxplot(value ~ treatment, data=data2)
data2
具有无可变性的治疗方法(
“阴性”
),0 SD。我猜这个函数正在做一些需要变化的测试。您需要阅读函数的文档,以查看是否出现了此问题,但您可以通过删除这些处理或强制进行少量更改(例如

# run without negative_ctrl
ggstatsplot::ggbetweenstats(
  data = data2[data2$treatment != "negative_ctrl",], 
  x = treatment, 
  y = value,
  messages = FALSE )

# add some tiny fake variation to force it through (this is a hack)
data3 <- data2
data3[data3$treatment=="negative_ctrl",][1,][["value"]] <- 1.0001
ggstatsplot::ggbetweenstats(
  data = data3, 
  x = treatment, 
  y = value,
  messages = FALSE )
#在不使用负电的情况下运行
ggstatsplot::ggbetweenstats(
data=data2[data2$treatment!=“阴性”,
x=治疗,
y=值,
消息(错误)
#添加一些微小的伪变体,以使其通过(这是一个黑客)

谢谢。这让我快发疯了。我试图进一步隔离问题所在,但我专注于价值观/样本,忘记了看简历。是的,仅仅添加一点点随机噪声就足以解决这个问题。我认为这实际上是系统中的一个缺陷,因为在许多分析中,值可能被设置为检测下限或检测上限,而不是被删除,因此这可能会自然导致CV=0的组。有趣的是,如果您运行一个精简示例,两个组中每个组只有5个样本(取自我上面的数据集),在CV=0的情况下,得到的
t很大;已调用近似值。
并且分析和绘图效果良好。因此,我认为有一个bug在某些特殊情况下(例如n(groups)>2)不容易识别近似值的必要性。如果您感到好奇,我在ggstatsplot github页面上提交了这个问题。我从Indrajeet Patil那里收到一张便条。他能够重现并追溯这个问题:“这是一个统计数据包本身的问题,它不能执行韦尔奇的方差分析。我在这里无能为力。”