为什么预测函数不预测 NA 值?

Why isn't the predict function predicting NA values?

我 运行 遇到了一些本来应该很容易的事情,但我不确定为什么它不起作用。我有一个数据框 modis.raw2,其中有一列 day,其中包含我正在查看的时间序列中的所有日期。另一列 sr.og 有值,其中一些是 NA

我正在尝试使用 lowess 来平滑我的数据并填写 NA 值,但我一直收到错误消息:

Error in `$<-.data.frame`(`*tmp*`, sr.smooth, value = c(0.631508837997043,  : 
  replacement has 50 rows, data has 128

我真的不知道发生了什么。有任何想法吗? 这是一个示例数据集和我的代码。

modis.raw2 = structure(list(day = c(86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 
109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 
122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 
148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 
161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 
174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 
187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 
200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 
213), sr.og = c(0.636095833333333, NA, NA, NA, NA, 0.665508333333333, 
NA, 0.67995, NA, 0.616720833333333, 0.695445833333333, 0.70355, 
0.687008333333333, NA, NA, 0.6801125, 0.662941666666667, 0.688133333333333, 
NA, NA, NA, NA, 0.441654166666667, 0.708595833333333, 0.698195833333333, 
0.696716666666667, 0.668525, 0.622370833333333, 0.632875, 0.617458333333333, 
NA, NA, NA, NA, NA, 0.64325, NA, 0.5615375, 0.547720833333333, 
NA, 0.551554166666667, 0.544858333333333, 0.539941666666667, 
NA, NA, 0.469941666666667, NA, 0.478479166666667, NA, 0.336470833333333, 
0.3274375, 0.350295833333333, 0.288670833333333, 0.131925, 0.2291625, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.0913333333333333, 
NA, 0.1071125, 0.1076, 0.100704166666667, 0.1160625, NA, 0.101416666666667, 
0.152929166666667, 0.1267625, NA, NA, NA, NA, NA, NA, NA, 0.1174125, 
0.217633333333333, NA, NA, NA, NA, 0.225133333333333, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.149670833333333, 0.154854166666667, 
0.239479166666667, NA, NA, NA, NA, NA, NA, 0.153670833333333, 
NA, 0.079125, NA, NA, NA, 0.208341666666667, NA, 0.102675, NA, 
NA, NA, NA, NA, NA, NA)), .Names = c("day", "sr.og"), row.names = c(NA, 
-128L), class = c("tbl_df", "tbl", "data.frame"))

sr.loess = loess(sr.og ~ day, data=modis.raw2, span=0.3)
complete <- tibble(day=modis.raw2$day)
complete$sr.smooth = stats::predict(sr.loess, data=complete)

predict() 函数使用名为 newdata= 的参数,而不是 data=。您只是在此处提取拟合值。尝试

complete$sr.smooth = stats::predict(sr.loess, newdata=complete)