I am using ggplot2 to get a smoothed estimation of my data
ggplot(yy)+geom_smooth(aes(x=Date,y=value),method='loess')

It works fine. Now, when try to reproduce this using loess function directly, I get an error:
loess(value~Date,yy)
Error in simpleLoess(y, x, w, span, degree, parametric, drop.square, normalize, :
NA/NaN/Inf in foreign function call (arg 2)
In addition: Warning message:
In simpleLoess(y, x, w, span, degree, parametric, drop.square, normalize, :
NAs introduced by coercion
I think that ggplot2 version works because it sets some default parameters.
Here my data yy :
dput(yy)
structure(list(Date = structure(c(9862, 9893, 9921, 9982, 10043,
10105, 10135, 10196, 10227, 10258, 10317, 10408, 10470, 11778,
12753, 13118, 13483, 13848, 14518, 10013, 10166, 11747, 11869,
11931, 12053, 12173, 12234, 12296, 12357, 12418, 12509, 12631,
12662, 12723, 12904, 12996, 13088, 13545, 13665, 13757, 13818,
14304, 14457, 10682, 10712, 10743, 10773, 13910, 14031, 14184,
13970, 10286, 10347, 10378, 10439, 10500, 10531, 10561, 10592,
10623, 10651, 10804, 10835, 10865, 10896, 11900, 12539, 12570,
12600, 12692, 11017, 11048, 11078, 11109, 11139, 11170, 11201,
11231, 11262, 11354, 11413, 11443, 11474, 11504, 11535, 11566,
11627, 11688, 11839, 12022, 12204, 12843, 11382, 11808, 11992,
12326, 12387, 13361, 13634, 14000, 14365, 11596, 11657, 11719,
11961, 12084, 12112, 12143, 12265, 12784, 13149, 13726, 14123,
14549, 14396), class = "Date"), value = c(31.8333333333333, 38.2,
28.8333333333333, 29.1666666666667, 50.6, 28.8333333333333, 34.6,
34.4, 34.4, 35.6, 79.1666666666667, 96.5714285714286, 124, 29.2,
8, 10, 66.6, 10, 20.25, 23.75, 49, 93, 49.7142857142857, 40.5,
73.8, 55, 71.2, 32.6, 27.25, 27.5, 24.75, 30.2, 21.4, 16.2, 27.5,
26.75, 18.75, 25.3333333333333, 39.8, 43.25, 22.6666666666667,
54.6666666666667, 67, 112, 91.5, 93, 106.666666666667, 91, 48.6666666666667,
50, 68, 300, 280, 290, 200, 301, 303, 300, 200, 150, 200, 200,
200, 100, 100, 63.3333333333333, 2, 3, 2, 2, 173, 169, 62, 130,
108, 154, 65, 94, 68, 220.5, 223, 210, 211, 214, 202, 212.333333333333,
193, 198.666666666667, 112.5, 133.666666666667, 106, 216.5, 206,
121.5, 39, 87, 93, 118, 115, 206, 95, 213, 90, 84, 85, 54, 34,
48, 52, 218, 187, 114, 96, 114, 42)), row.names = c(NA, -115L
), class = c("data.table", "data.frame"), .Names = c("Date",
"value"), .internal.selfref = <pointer: 0x0000000000230788>)
You need to convert the "Date" class object Date to a numeric vector:
R> loess(value ~ as.numeric(Date), yy)
Call:
loess(formula = value ~ as.numeric(Date), data = yy)
Number of Observations: 115
Equivalent Number of Parameters: 4.53
Residual Standard Error: 66.7
That coercion will be going on internally with ggplot()'s code - after all, those dates need to be assigned to cartesian coordinates at some point in order to plot them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With