缺失数据的 LOCF 和 NOCF 方法:如何绘制数据?
LOCF and NOCF methods for missing data: how to plot data?
我正在处理以下数据集及其缺失数据:
# A tibble: 27 x 6
id sex d8 d10 d12 d14
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 1 F 21 20 21.5 23
2 2 F 21 21.5 24 25.5
3 3 NA NA 24 NA 26
4 4 F 23.5 24.5 25 26.5
5 5 F 21.5 23 22.5 23.5
6 6 F 20 21 21 22.5
7 7 F 21.5 22.5 23 25
8 8 F 23 23 23.5 24
9 9 F NA 21 NA 21.5
10 10 F 16.5 19 19 19.5
# ... with 17 more rows
我想通过上次观察结转法 (LOCF) 和下一次观察结转法 (NOCB) 填充缺失数据,并报告图形表示,按性别绘制各个年龄段的个人资料,突出显示估算值,并按性别计算每个年龄的均值和标准误差。你能建议一种在 plot() 函数中正确设置参数的方法吗?
有人可能对此有任何线索吗?
我在下面提供了一些代码,以防万一它们有用,例如从其他数据集中提取的。
par(mfrow=c(1,1))
Oz <- airquality$Ozone
locf <- function(x) {
a <- x[1]
for (i in 2:length(x)) {
if (is.na(x[i])) x[i] <- a
else a <- x[i]
}
return(x)
}
Ozi <- locf(Oz)
colvec <- ifelse(is.na(Oz),mdc(2),mdc(1))
### Figure
plot(Ozi[1:80],col=colvec,type="l",xlab="Day number",ylab="Ozone (ppb)")
points(Ozi[1:80],col=colvec,pch=20,cex=1)
下一个观察结转/上一个观察结转对于您的数据来说可能是一个非常糟糕的选择。
这些算法通常用于时间序列数据。将最后的观察向前推进可能是个好主意。例如。如果你想到 10 分钟的温度测量,实际室外温度很可能与 10 分钟前的温度非常相似。
对于横截面数据(看起来你在看人),前一个人通常与任何其他随机人相似。
查看横截面数据集的 mice
R 包。
它为您的案例提供了比 locf/nocb 更好的算法。
以下是它提供的功能的概述:https://amices.org/mice/reference/index.html
它还包括不同的图来评估插补,例如:
通常在使用 mice 时,您会创建多个可能的插补(多重插补 技术值得一读)。但是你也可以只用这个包生成一个估算的数据集。
有以下函数可以可视化您的估算:
- bwplot()(观察数据和估算数据的盒须图)
- densityplot()(观测数据和估算数据的密度图)
- stripplot()(观测数据和估算数据的条状图)
- xyplot()(观察数据和估算数据的散点图)
希望对您有所帮助。所以我的建议是看一下这个包,然后用你的新知识开始一种新的方法。
我正在处理以下数据集及其缺失数据:
# A tibble: 27 x 6
id sex d8 d10 d12 d14
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 1 F 21 20 21.5 23
2 2 F 21 21.5 24 25.5
3 3 NA NA 24 NA 26
4 4 F 23.5 24.5 25 26.5
5 5 F 21.5 23 22.5 23.5
6 6 F 20 21 21 22.5
7 7 F 21.5 22.5 23 25
8 8 F 23 23 23.5 24
9 9 F NA 21 NA 21.5
10 10 F 16.5 19 19 19.5
# ... with 17 more rows
我想通过上次观察结转法 (LOCF) 和下一次观察结转法 (NOCB) 填充缺失数据,并报告图形表示,按性别绘制各个年龄段的个人资料,突出显示估算值,并按性别计算每个年龄的均值和标准误差。你能建议一种在 plot() 函数中正确设置参数的方法吗?
有人可能对此有任何线索吗?
我在下面提供了一些代码,以防万一它们有用,例如从其他数据集中提取的。
par(mfrow=c(1,1))
Oz <- airquality$Ozone
locf <- function(x) {
a <- x[1]
for (i in 2:length(x)) {
if (is.na(x[i])) x[i] <- a
else a <- x[i]
}
return(x)
}
Ozi <- locf(Oz)
colvec <- ifelse(is.na(Oz),mdc(2),mdc(1))
### Figure
plot(Ozi[1:80],col=colvec,type="l",xlab="Day number",ylab="Ozone (ppb)")
points(Ozi[1:80],col=colvec,pch=20,cex=1)
下一个观察结转/上一个观察结转对于您的数据来说可能是一个非常糟糕的选择。
这些算法通常用于时间序列数据。将最后的观察向前推进可能是个好主意。例如。如果你想到 10 分钟的温度测量,实际室外温度很可能与 10 分钟前的温度非常相似。
对于横截面数据(看起来你在看人),前一个人通常与任何其他随机人相似。
查看横截面数据集的 mice
R 包。
它为您的案例提供了比 locf/nocb 更好的算法。
以下是它提供的功能的概述:https://amices.org/mice/reference/index.html
它还包括不同的图来评估插补,例如:
通常在使用 mice 时,您会创建多个可能的插补(多重插补 技术值得一读)。但是你也可以只用这个包生成一个估算的数据集。
有以下函数可以可视化您的估算:
- bwplot()(观察数据和估算数据的盒须图)
- densityplot()(观测数据和估算数据的密度图)
- stripplot()(观测数据和估算数据的条状图)
- xyplot()(观察数据和估算数据的散点图)
希望对您有所帮助。所以我的建议是看一下这个包,然后用你的新知识开始一种新的方法。