【问题标题】:Multimed function in Mediation package: 'argument is not numeric or logical: returning NA' error中介包中的 Multimed 函数:“参数不是数字或逻辑:返回 NA”错误
【发布时间】:2022-06-20 16:35:38
【问题描述】:

运行multimed 函数时出现错误:argument is not numeric or logical: returning NA。我可以从multimed 运行示例代码,但不能运行我自己的数据集或“假”数据集(见下文)。不确定这里的问题是什么 - 这是数据设置中的错误?还是代码本身有错误?

感谢您的帮助。

library(palmerpenguins)
library(mediation)
#> Loading required package: MASS
#> Loading required package: Matrix
#> Loading required package: mvtnorm
#> Loading required package: sandwich
#> mediation: Causal Mediation Analysis
#> Version: 4.5.0
library(tidyverse)
library(reprex)


## create a fake dataset to show example of error
glimpse(penguins)
#> Rows: 344
#> Columns: 8
#> $ species           <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adel~
#> $ island            <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgerse~
#> $ bill_length_mm    <dbl> 39.1, 39.5, 40.3, NA, 36.7, 39.3, 38.9, 39.2, 34.1, ~
#> $ bill_depth_mm     <dbl> 18.7, 17.4, 18.0, NA, 19.3, 20.6, 17.8, 19.6, 18.1, ~
#> $ flipper_length_mm <int> 181, 186, 195, NA, 193, 190, 181, 195, 193, 190, 186~
#> $ body_mass_g       <int> 3750, 3800, 3250, NA, 3450, 3650, 3625, 4675, 3475, ~
#> $ sex               <fct> male, female, female, NA, female, male, female, male~
#> $ year              <int> 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007~

penguins %>%
  filter(species!="Gentoo") %>%
  mutate(treat = as.numeric(rbernoulli(n=220, 0.5))) %>%
  drop_na()->df

summary(df)
#>       species          island    bill_length_mm bill_depth_mm  
#>  Adelie   :146   Biscoe   : 44   Min.   :32.1   Min.   :15.50  
#>  Chinstrap: 68   Dream    :123   1st Qu.:37.8   1st Qu.:17.50  
#>  Gentoo   :  0   Torgersen: 47   Median :40.6   Median :18.40  
#>                                  Mean   :42.0   Mean   :18.37  
#>                                  3rd Qu.:46.0   3rd Qu.:19.10  
#>                                  Max.   :58.0   Max.   :21.50  
#>  flipper_length_mm  body_mass_g       sex           year          treat      
#>  Min.   :172.0     Min.   :2700   female:107   Min.   :2007   Min.   :0.000  
#>  1st Qu.:187.0     1st Qu.:3400   male  :107   1st Qu.:2007   1st Qu.:0.000  
#>  Median :191.0     Median :3700                Median :2008   Median :1.000  
#>  Mean   :191.9     Mean   :3715                Mean   :2008   Mean   :0.514  
#>  3rd Qu.:196.0     3rd Qu.:3994                3rd Qu.:2009   3rd Qu.:1.000  
#>  Max.   :212.0     Max.   :4800                Max.   :2009   Max.   :1.000

test<-multimed(outcome = "bill_length_mm", 
               med.main = "flipper_length_mm", 
               med.alt = "bill_depth_mm", 
               treat = "treat", 
               covariates = "year", 
               data=df, sims=100)
#> Warning in mean.default(data.1[, treat] * data.1[, med.main]^2): argument is not
#> numeric or logical: returning NA
#> Warning in ETM2 * sigma^2/VY: Recycling array of length 1 in vector-array arithmetic is deprecated.
#>   Use c() or as.vector() instead.
#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

#> Warning in mean.default(data.b[, treat]): argument is not numeric or logical:
#> returning NA

由 reprex 包 (v2.0.1) 于 2022-05-18 创建

【问题讨论】:

    标签: r


    【解决方案1】:

    我和你有同样的问题。
    对于警告:
    #> mean.default(data.b[,treat]) 中的警告:参数不是数字或逻辑:
    #> 返回不适用

    您应该将表格转换为.data.frame,因为该包不是为 tibble 设计的。

    对于警告:
    mean.default(data.1[,treat] * data.1[,med.main]^2) 中的警告:参数不是
    #> 数字或逻辑:返回 NA

    您应该将处理变量转换为数字

    但是,对于另一个警告,我还没有找到解决方案...

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 2021-01-29
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多