处理Growthcurver中的缺失值

科学人

R包growthcurver非常适合有效分析和可视化生物生长,除非缺少值。因为我有宽格式的数据(每列都是一个变量),并且每个变量的时间都是随机的,所以有很多NAs。不幸的是,这个growthcurver包不喜欢NAs,所以现在我有两个选择。

  • 选项A

    • 通过回归或机器学习方法归咎于丢失的数据(我不喜欢这样的选择,因为我试过miceHmisc为回归插补,但失败了,因为有更多的变量(列)比每一列和观测caret随机森林归集,但未产生任何有意义的估算值)。然后,插补还会将我的数据框创建为大多数插补值,而这是我无法证明的。
  • 选项B

    • 以某种方式使growthcurver函数NA比现在更好地处理s。我尝试使用该函数,但找不到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))

成功,但需要手动从单个列中除去NA SummarizeGrowth()

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

无法手动删除NA时失败 SummarizeGrowth()

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
斯特芬·莫里兹(Steffen Moritz)

Hmisc的问题是老鼠没有进行时间序列估算他们只关注变量间的相关性。这意味着当一行完全不适用时-他们无法为该行计算任何内容。(从逻辑上讲,必须至少有一个回归器才能执行回归)

由于每个变量的时间似乎都有明显的相关性,因此您可以查看时间序列的插补/插值。

imputeTS软件包,它提供了许多时间序列插补算法。但是在这里很难使用它,因为它需要等间隔时间序列(即每行之间的相同时间差)作为输入。要使用此程序包,您首先必须将时间序列转换为等距。对于此特定情况,这似乎不是一个好主意。

据我所知,包动物园可以对不规则间隔的时间序列执行时间序列插补。因此,此软件包可能是您的最佳选择。我会特别尝试na.approx()-线性插值功能。

不幸的是,我不能迅速给出一个可行的例子。用法基本上是:

library(zoo)
na.approx(zooobject)

您现在唯一需要弄清楚的是如何将df转换为Zoo系列(这是输入所必需的)

就像一个值得努力的展示一样-这是imputeTS的一个有效示例(您之前不需要动物园物体)

library(imputeTS)
na_interpolation(df)


        time      a      b      c      d      e      f        g
1    0.00002 0.1443 0.1554 0.0999 0.1110 0.0999 0.0666 0.000000
2    0.00003 0.1443 0.1554 0.0999 0.1110 0.0999 0.0666 0.000000
3   22.00000 0.1443 0.1554 0.0999 0.1110 0.0999 0.0666 0.022200
4   24.01000 0.1443 0.1554 0.0999 0.1110 0.0999 0.0666 0.044400
5   24.03000 0.1702 0.1961 0.1591 0.1332 0.1073 0.0851 0.066600
6   28.00000 0.1961 0.2368 0.2183 0.1554 0.1147 0.1036 0.125800
7   36.00000 0.2220 0.2775 0.2775 0.1776 0.1221 0.1221 0.185000
8   39.00000 0.2590 0.3145 0.3034 0.2220 0.1702 0.1480 0.244200
9   40.00000 0.2960 0.3515 0.3293 0.2664 0.2183 0.1739 0.380175
10  44.00000 0.3330 0.3885 0.3552 0.3108 0.2664 0.1998 0.516150
11  46.00000 0.5365 0.6660 0.6253 0.5402 0.7104 0.3071 0.652125
12  64.00000 0.7400 0.9435 0.8954 0.7696 1.1544 0.4144 0.788100
13  67.00000 0.9435 1.2210 1.1655 0.9990 1.5984 0.5217 1.091500
14  88.00000 1.8093 1.8093 1.8093 1.8870 1.6872 1.5096 1.394900
15 108.00000 1.8093 1.8093 1.8093 1.8870 1.6872 1.5096 1.698300

这些结果可能已经比横截面数据估算包装的结果更为合理。但是请记住,imputeTS假设间隔时间是规则的-如果您可以使动物园工作,则可以获得更好的结果,因为它也考虑了不规则的间隔。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

处理Python Lambda函数中的缺失值

来自分类Dev

处理表命令中的缺失值

来自分类Dev

缺失值的处理

来自分类Dev

Python:如何处理CSV中的缺失值?

来自分类Dev

如何定义dc.js中缺失值的处理?

来自分类Dev

如何处理KeyRoutedEventArgs e中VirtualKey枚举的缺失值

来自分类Dev

处理缺失的分类值ML

来自分类Dev

在 F# 中处理 Deedle 时间序列中的缺失值 (2)

来自分类Dev

如何处理 R 中逻辑类型列中的缺失值

来自分类Dev

spark如何处理缺失值?

来自分类Dev

使用Weka处理关联规则的缺失值

来自分类Dev

Python JSON解析处理缺失值

来自分类Dev

处理缺失值(条件归因)熊猫

来自分类Dev

使用Weka处理关联规则的缺失值

来自分类Dev

Spark如何处理缺失值?

来自分类Dev

如何在Matlab的Kruskal-Wallis测试中处理缺失值?

来自分类Dev

处理pandas数据框中的缺失值作为张量流的输入

来自分类Dev

使用scikit学习OneHotEncoder时如何处理分类数据中的缺失值(NaN)?

来自分类Dev

SAS中具有不同索引和缺失值的数组处理

来自分类Dev

如何通过将R替换为均值来处理R中的缺失值?

来自分类Dev

使用dtype处理大熊猫中的缺失值以读取文件

来自分类Dev

在 Excel VBA 中操作集合和数组以适应缺失值和错误处理

来自分类Dev

处理缺失值的 R 程序(类似于 Python 中的应用函数)

来自分类Dev

填补组中的缺失值

来自分类Dev

情感分类中的缺失值

来自分类Dev

填写R中的缺失值

来自分类Dev

lmer 与 gls 中的缺失值

来自分类Dev

在 SQL 中插入缺失值

来自分类Dev

情节:如何使用最新值,直到有新值可用于处理时间序列中的缺失值?

Related 相关文章

热门标签

归档