【发布时间】:2020-03-15 05:16:57
【问题描述】:
R 包growthcurver 非常适合有效分析和可视化生物体生长,除非存在缺失值。因为我有宽格式的数据(每列都是一个变量)并且每个变量的时间是随机的,所以有大量的NAs。不幸的是,growthcurver 包不喜欢NAs,所以现在我只能选择 2 个选项。
-
选项 A
- 通过逻辑回归或机器学习方法对缺失数据进行插补(我不喜欢此选项,因为我尝试过
mice、Hmisc进行回归插补但失败了,因为变量(列)多于每列中的观察值和caret用于随机森林插补,它没有产生任何有意义的插补值)。然后,插补还会将我的数据框创建为主要是我无法证明的插补值。
- 通过逻辑回归或机器学习方法对缺失数据进行插补(我不喜欢此选项,因为我尝试过
-
选项 B
- 以某种方式调整
growthcurver函数以比当前更好地处理NAs。我尝试使用该功能四处寻找,但找不到可以放入简单na.omit()的位置。
- 以某种方式调整
这是与一次性函数 SummarizeGrowth() 一起使用的代码(当我手动删除 NAs 时)。我应该注意,当一个人只有几个观察要分析/可视化时,这个函数很有用,但理想情况下,我会使用函数SummarizeGrowthByPlate(),它是一个包派生的apply()函数,它循环遍历每一列(变量)自动生成可视化和结果。
- 选项 C
- 希望 SO 社区有一个快速修复!
示例数据框
time a b c d e f g
1 0.00002 NA NA NA NA NA NA NA
2 0.00003 NA NA NA NA NA NA 0.0000
3 22.00000 NA NA NA NA NA NA NA
4 24.01000 0.1443 0.1554 0.0999 0.1110 0.0999 0.0666 NA
5 24.03000 NA NA NA NA NA NA 0.0666
6 28.00000 NA NA NA NA NA NA NA
7 36.00000 0.2220 0.2775 0.2775 0.1776 0.1221 0.1221 NA
8 39.00000 NA NA NA NA NA NA 0.2442
9 40.00000 NA NA NA NA NA NA NA
10 44.00000 0.3330 0.3885 0.3552 0.3108 0.2664 0.1998 NA
11 46.00000 NA NA NA NA NA NA NA
12 64.00000 NA NA NA NA NA NA 0.7881
13 67.00000 0.9435 1.2210 1.1655 0.9990 1.5984 0.5217 NA
14 88.00000 1.8093 1.8093 1.8093 1.8870 1.6872 1.5096 NA
15 108.00000 NA NA NA NA NA NA 1.6983
可重现的数据
df <- structure(list(time = c(2e-05, 3e-05, 22, 24.01, 24.03, 28, 36,
39, 40, 44, 46, 64, 67, 88, 108), a = c(NA, NA, NA, 0.1443, NA,
NA, 0.222, NA, NA, 0.333, NA, NA, 0.9435, 1.8093, NA), b = c(NA,
NA, NA, 0.1554, NA, NA, 0.2775, NA, NA, 0.3885, NA, NA, 1.221,
1.8093, NA), c = c(NA, NA, NA, 0.0999, NA, NA, 0.2775, NA, NA,
0.3552, NA, NA, 1.1655, 1.8093, NA), d = c(NA, NA, NA, 0.111,
NA, NA, 0.1776, NA, NA, 0.3108, NA, NA, 0.999, 1.887, NA), e = c(NA,
NA, NA, 0.0999, NA, NA, 0.1221, NA, NA, 0.2664, NA, NA, 1.5984,
1.6872, NA), f = c(NA, NA, NA, 0.0666, NA, NA, 0.1221, NA, NA,
0.1998, NA, NA, 0.5217, 1.5096, NA), g = c(NA, 0, NA, NA, 0.0666,
NA, NA, 0.2442, NA, NA, NA, 0.7881, NA, NA, 1.6983)), class = "data.frame", row.names = c(NA,
-15L))
成功,但需要使用 SummarizeGrowth() 从单个列中手动删除 NA
library(growthcurver)
SummarizeGrowth(df$time[!is.na(df$a)], df$a[!is.na(df$a)])
Fit data to K / (1 + ((K - N0) / N0) * exp(-r * t)):
K N0 r
val: 2.121 0.004 0.085
Residual standard error: 0.02857429 on 2 degrees of freedom
Other useful metrics:
DT 1 / DT auc_l auc_e
8.13 1.2e-01 38.16 38.77
不使用 SummarizeGrowth() 手动删除 NA 时失败
SummarizeGrowth(df$time, dfb$a)
Fit data to K / (1 + ((K - N0) / N0) * exp(-r * t)):
K N0 r
val: 0 0 0
Residual standard error: 0 on 0 degrees of freedom
Other useful metrics:
DT 1 / DT auc_l auc_e
0 0 0 0
Note: cannot fit data
尝试使用自动 SummarizeGrowthByPlate() 时失败
SummarizeGrowthByPlate(df)
sample k n0 r t_mid t_gen auc_l auc_e sigma note
1 a 0 0 0 0 0 0 0 0 cannot fit data
2 b 0 0 0 0 0 0 0 0 cannot fit data
3 c 0 0 0 0 0 0 0 0 cannot fit data
4 d 0 0 0 0 0 0 0 0 cannot fit data
5 e 0 0 0 0 0 0 0 0 cannot fit data
6 f 0 0 0 0 0 0 0 0 cannot fit data
7 g 0 0 0 0 0 0 0 0 cannot fit data
【问题讨论】:
-
growthcurvercran.r-project.org/web/packages/growthcurver/vignettes/… 的小插图
标签: r apply missing-data imputation