[英]R smooth.spline() spar-finding message
我正在使用從一些smooth.spline
文件中讀取的數據的excel
。 這是電話:
smooth.spline(date,value,cv=TRUE)
一切似乎都運行順利(雙關語不是故意的),但如果我使用較少的數據(例如,僅選擇 10 個文件中的最后 4 個),我會收到以下紅色消息:
spar-finding:非有限值 inf; 使用 BIG 值
我知道這不是錯誤,因為我得到了預期的 output,所以我猜這是某種信息性消息,但我不確定。
如果使用此數據,我會收到兩次消息。
dat <- structure(list(date = structure(c(18809, 18810, 18811, 18812,
18813, 18814, 18815, 18816, 18817, 18818, 18819, 18820, 18821,
18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830,
18831, 18832, 18833, 18834, 18835, 18836, 18837, 18838, 18839,
18840, 18841, 18842, 18843, 18844, 18845, 18846, 18847, 18848,
18849, 18850, 18851, 18852, 18853, 18854, 18855, 18856, 18857,
18858, 18859, 18860, 18861, 18862, 18863, 18864, 18865, 18866,
18867, 18868, 18869, 18870, 18871, 18872, 18873, 18874, 18875,
18876, 18877, 18878, 18879, 18880, 18881, 18882, 18883, 18884,
18885, 18886, 18887, 18888, 18889, 18890, 18891, 18892, 18893,
18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902,
18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911,
18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18920,
18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929,
18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938,
18939, 18940, 18941, 18942, 18943, 18944, 18945, 18946, 18947,
18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956,
18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965,
18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 18974,
18975, 18976, 18977, 18978, 18979, 18980, 18981, 18982, 18983,
18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992
), class = "Date"), value = c(NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 254183,
NA, NA, NA, NA, 254552, NA, 254702, NA, NA, NA, 254792, NA, 254840,
254860, NA, NA, NA, 254953, NA, 254994, NA, 255043, NA, NA, NA,
255134, NA, 255198, NA, NA, NA, NA, 255310, NA, 255354, NA, NA,
NA, NA, 255473, NA, NA, 255543, NA, NA, NA, NA, NA, 255677, NA,
NA, NA, NA, 255900, NA, NA, 256162, NA, NA, 256338, NA, 256451,
NA, 256570, NA, NA, NA, 256812, 256866, NA, 256991, NA, NA, 257164,
257226, 257280, NA, 257398, NA, NA, NA, NA, NA, NA, 257812, NA,
NA, NA, NA, 258114, NA, 258232, NA, NA, NA, NA, 258528, NA, 258680,
NA, NA, NA, NA, NA, 259110, NA, NA, NA, NA, 259401, NA, NA, NA,
NA, NA, 259754, NA, NA, 259930, NA, NA, NA, NA, 260219, NA, 260328,
NA, NA, NA, 260575, NA, NA, 260748, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 261454, NA, NA, 261630, NA, NA, NA, 261863, NA,
NA, 262036, NA, NA, NA, 262266, 262330, NA, NA)), row.names = c(NA,
-184L), class = c("tbl_df", "tbl", "data.frame"))
但隨后我又添加了一個月的收集數據,一切都很好。
dat2 <- structure(list(date = structure(c(18809, 18810, 18811, 18812,
18813, 18814, 18815, 18816, 18817, 18818, 18819, 18820, 18821,
18822, 18823, 18824, 18825, 18826, 18827, 18828, 18829, 18830,
18831, 18832, 18833, 18834, 18835, 18836, 18837, 18838, 18839,
18840, 18841, 18842, 18843, 18844, 18845, 18846, 18847, 18848,
18849, 18850, 18851, 18852, 18853, 18854, 18855, 18856, 18857,
18858, 18859, 18860, 18861, 18862, 18863, 18864, 18865, 18866,
18867, 18868, 18869, 18870, 18871, 18872, 18873, 18874, 18875,
18876, 18877, 18878, 18879, 18880, 18881, 18882, 18883, 18884,
18885, 18886, 18887, 18888, 18889, 18890, 18891, 18892, 18893,
18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902,
18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911,
18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18920,
18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929,
18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938,
18939, 18940, 18941, 18942, 18943, 18944, 18945, 18946, 18947,
18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956,
18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965,
18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 18974,
18975, 18976, 18977, 18978, 18979, 18980, 18981, 18982, 18983,
18984, 18985, 18986, 18987, 18988, 18989, 18990, 18991, 18992,
18993, 18994, 18995, 18996, 18997, 18998, 18999, 19000, 19001,
19002, 19003, 19004, 19005, 19006, 19007, 19008, 19009, 19010,
19011, 19012, 19013, 19014, 19015, 19016, 19017, 19018, 19019,
19020, 19021, 19022, 19023), class = "Date"), value = c(NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, 254183, NA, NA, NA, NA, 254552, NA, 254702, NA,
NA, NA, 254792, NA, 254840, 254860, NA, NA, NA, 254953, NA, 254994,
NA, 255043, NA, NA, NA, 255134, NA, 255198, NA, NA, NA, NA, 255310,
NA, 255354, NA, NA, NA, NA, 255473, NA, NA, 255543, NA, NA, NA,
NA, NA, 255677, NA, NA, NA, NA, 255900, NA, NA, 256162, NA, NA,
256338, NA, 256451, NA, 256570, NA, NA, NA, 256812, 256866, NA,
256991, NA, NA, 257164, 257226, 257280, NA, 257398, NA, NA, NA,
NA, NA, NA, 257812, NA, NA, NA, NA, 258114, NA, 258232, NA, NA,
NA, NA, 258528, NA, 258680, NA, NA, NA, NA, NA, 259110, NA, NA,
NA, NA, 259401, NA, NA, NA, NA, NA, 259754, NA, NA, 259930, NA,
NA, NA, NA, 260219, NA, 260328, NA, NA, NA, 260575, NA, NA, 260748,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 261454, NA, NA, 261630,
NA, NA, NA, 261863, NA, NA, 262036, NA, NA, NA, 262266, 262330,
NA, NA, NA, NA, 262614, NA, 262738, NA, NA, NA, NA, NA, 263093,
NA, NA, 263269, NA, NA, NA, 263504, NA, NA, 263675, NA, NA, 263843,
NA, NA, NA, 264091, NA, NA, NA)), row.names = c(NA, -215L), class = c("tbl_df",
"tbl", "data.frame"))
注意:我之前過濾了我的數據,因此我只使用非NA
值。
有誰知道這意味着什么和/或可能是什么原因造成的?
我可以壓制它或讓它安靜下來還是應該把它留在那里? 我正在嘗試這樣做,以便不知道R
的人可以使用它,並且我不希望人們在看到不重要的紅色時感到恐慌。
它是 FORTRAN 級別的消息,不能被suppressMessages
或suppressWarnings
。 但無論如何,這既不是警告也不是錯誤。 它只是報告 Inf 在計算過程中受限於一些 BIG 值。 純粹是為了“安全”。
那么為什么會這樣呢? 我的猜測如下。 smooth.spline 使用的smooth.spline
例程老實說有點老了。 它是在 1980 年代末或 1990 年代初使用單精度浮點數開發的。 這限制了數值計算的准確性,並且存在上溢或下溢的危險。 結果,代碼做了許多巧妙的技巧來穩定計算。 顯然,如果一個數字超出了單精度所能提供的范圍,則應將其截斷為最大可表示值。
我已經使用smooth.spline
很多年了,直到你提出問題才看到這條消息。 事實上,如果我改變你的代碼
dat <- na.omit(dat)
smooth.spline(dat$date, dat$value, cv = TRUE)
至
dat <- na.omit(dat)
smooth.spline(dat$date, dat$value)
也就是說,如果我使用廣義交叉驗證 (GCV),那么消息就消失了。
請注意,對於平滑樣條曲線,GCV 在理論上優於原始 CV。 這就是為什么cv = FALSE
是smooth.spline
的默認值。 我建議你堅持 GCV。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.