簡體   English   中英

R smooth.spline() 晶石發現消息

[英]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 級別的消息,不能被suppressMessagessuppressWarnings 但無論如何,這既不是警告也不是錯誤。 它只是報告 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 = FALSEsmooth.spline的默認值。 我建議你堅持 GCV。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM