web-dev-qa-db-ja.com

最適な線Rをプロットします

現在、私は温度が常に上下する大きなデータセットを持っています。データを平滑化し、すべての温度で最適な線をプロットしたいのですが、

データは次のとおりです。

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        

など............... 2009年12月31日まで

現在のグラフは次のようになり、データは移動平均または黄土のような回帰に適合します。

enter image description here

しかし、移動平均に合わせようとすると、次のようになりました。

enter image description here

これが私のコードです。

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

誰かが私に手を貸してくれませんか?

5
londwwq1

実際のデータとそれをどのように平滑化するか、そしてなぜそれを平滑化するかによって、さまざまなオプションがあります。

線形回帰(1次および2次)と局所回帰(LOESS)の例を示しています。これらは、データに使用するのに適した統計モデルである場合とそうでない場合がありますが、それを見ずに判断することは困難です。とにかく:

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)

別のオプションは、移動平均を使用することです。

例えば:

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

examples of smoothing

15
nico