R包growthcurver
非常适合有效分析和可视化生物生长,除非缺少值。因为我有宽格式的数据(每列都是一个变量),并且每个变量的时间都是随机的,所以有很多NA
s。不幸的是,这个growthcurver
包不喜欢NA
s,所以现在我有两个选择。
选项A
mice
,Hmisc
为回归插补,但失败了,因为有更多的变量(列)比每一列和观测caret
随机森林归集,但未产生任何有意义的估算值)。然后,插补还会将我的数据框创建为大多数插补值,而这是我无法证明的。选项B
growthcurver
函数NA
比现在更好地处理s。我尝试使用该函数,但找不到na.omit()
可以放入简单函数的地方。这是与一次性功能一起使用的代码SummarizeGrowth()
(当我手动删除NA
s时)。我应该注意,当一个人只有很少的观察要进行分析/可视化时,此功能很有用,但理想情况下,我将使用该函数SummarizeGrowthByPlate()
,它是一个程序包派生的apply()
函数,它循环遍历每列(变量),从而自动生成可视化结果。
示例数据框
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
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] 删除。
我来说两句