Build the line of best fit R

Right now I have a large dataset with a constant temperature rising and falling. I want to smooth my data and build the best line of correspondence with the whole temperature,

Here are the data:

weather.data date mtemp 1 2008-01-01 12.9 2 2008-01-02 12.9 3 2008-01-03 14.5 4 2008-01-04 15.7 5 2008-01-05 17.0 6 2008-01-06 17.8 7 2008-01-07 20.2 8 2008-01-08 20.8 9 2008-01-09 21.4 10 2008-01-10 20.8 11 2008-01-11 21.4 12 2008-01-12 22.0 

etc ................. until December 31, 2009

My current graph looks like this, and my data corresponds to a regression, for example, the current average or forest:

enter image description here

However, when I tried to put it with the current average, it became something like this:

enter image description here

Here is my code.

 plot(weather.data$date,weather.data$mtemp,ylim=c(0,30),type='l',col="orange") par(new=TRUE) 

Can anyone give me a hand?

+5
source share
1 answer

Depending on your actual data and how you want to smooth it, and why you want to smooth it, there are various options.

I show you examples with linear regression (first and second order) and local regression (LOESS). These may or may not be good statistical models for using your data, but it's hard to say without seeing it. Anyway:

 time <- 0:100 temp <- 20+ 0.01 * time^2 + 0.8 * time + rnorm(101, 0, 5) # Generate first order linear model lin.mod <- lm(temp~time) # Generate second order linear model lin.mod2 <- lm(temp~I(time^2)+time) # Calculate local regression ls <- loess(temp~time) # Predict the data (passing only the model runs the prediction # on the data points used to generate the model itself) pr.lm <- predict(lin.mod) pr.lm2 <- predict(lin.mod2) pr.loess <- predict(ls) par(mfrow=c(2,2)) plot(time, temp, "l", las=1, xlab="Time", ylab="Temperature") lines(pr.lm~time, col="blue", lwd=2) plot(time, temp, "l", las=1, xlab="Time", ylab="Temperature") lines(pr.lm2~time, col="green", lwd=2) plot(time, temp, "l", las=1, xlab="Time", ylab="Temperature") lines(pr.loess~time, col="red", lwd=2) 

Another option is to use a moving average.

For instance:

 library(zoo) mov.avg <- rollmean(temp, 5, fill=NA) plot(time, temp, "l") lines(time, mov.avg, col="orange", lwd=2) 

examples of smoothing

+14
source

Source: https://habr.com/ru/post/1200208/


All Articles