簡體   English   中英

R; 傳感器數據的時間序列分析

[英]R; Time series analysis on sensor data

我有一個傳感器數據的數據框

我有一個數據框,如下所示:

pressure    datetime
4.848374    2016-04-12 10:04:00   
4.683901    2016-04-12 10:04:32   
5.237860    2016-04-12 10:13:20 

現在,我想應用ARIMA進行預測分析。

由於數據不是統一采樣的,因此我按小時匯總,如下所示:

datetime                    pressure
"2016-04-19 00:00:00 BST"   5.581806
"2016-04-19 01:00:00 BST"   4.769832
"2016-04-19 02:00:00 BST"   4.769832  
"2016-04-19 03:00:00 BST"   4.553711  
"2016-04-19 04:00:00 BST"   6.285599  
"2016-04-19 05:00:00 BST"   5.873414

每小時的壓力如下所示:

在此處輸入圖片說明

但是我無法創建ts對象,因為我不確定每小時數據的頻率。

您的問題已經在評論部分得到了回答,但是為了重申這一點,您應該將頻率設置為24,因為您希望預測每小時的數據:

sensor = ts(hourlyPressure, frequency = 24)

關於固定繪圖中的日期,接下來要講的是一些示例數據:

###Sequence of numbers to forecast    
hourlyPressure<-c(1:24, 12:36, 24:48, 36:60)
###Sequence of Accompanying Dates
dates<-seq(as.POSIXct("2016-04-19 00:00:00"), as.POSIXct("2016-04-23 02:00:00"), by="hour")

現在我們可以將hourlyPressure數據設置為ts()對象(讓我們忽略日期一分鍾)

sensor <- ts(hourlyPressure, frequency=24)

現在適合您的Arima模型,在本示例中,我將使用預測包中的auto.arima函數,因為這里找不到關注的最佳Arima模型(盡管使用auto.arima()是查找模型的一種非常可靠的方法)適合您數據的最佳Arima模型):

###fit arima model to sensor data
sensor_arima_fit<- auto.arima(sensor)

然后,只需在plot()函數中指定x值,就可以用適當的日期繪制此數據

plot(y=sensor_arima_fit$x, x=dates)

當我們預測我們的數據並想要繪制原始數據,預測並正確設置日期時,會遇到一些困難。

###now forecast ahead (lets say 2 days) using the arima model that was fit above
forecast_sensor <- forecast(sensor_arima_fit, h = 48)

現在要繪制原始數據,並以正確的日期進行預測,我們可以執行以下操作:

###set h to be the same as above
h <- c(48)
###calculate the dates for the forecasted values
forecasted_dates<-seq(dates[length(dates)]+(60*60)*(1), 
                  dates[length(dates)]+(60*60)*(h), by="hour")

###now plot the data
plot(y=c(forecast_sensor$x, forecast_sensor$mean), 
     x=seq(as.POSIXct("2016-04-19 00:00:00"),as.POSIXct(forecasted_dates[length(forecasted_dates)]), by="hour"),
     xaxt="n", 
     type="l", 
     main="Plot of Original Series and Forecasts", 
     xlab="Date", 
     ylab="Pressure")

###correctly formatted x axis
axis.POSIXct(1, at=seq(as.POSIXct("2016-04-19 00:00:00"), 
                       as.POSIXct(forecasted_dates[length(forecasted_dates)]), 
                       by="hour"), 
             format="%b %d", 
             tick = FALSE)

這會繪制帶有預測的原始數據,並且日期正確。 但是,就像預測軟件包提供的那樣,也許我們希望預測是藍色的。

###keep same plot as before
plot(y=c(forecast_sensor$x, forecast_sensor$mean), 
     x=seq(as.POSIXct("2016-04-19 00:00:00"),as.POSIXct(forecasted_dates[length(forecasted_dates)]), by="hour"),
     xaxt="n", 
     type="l", 
     main="Plot of Original Series and Forecasts", 
     xlab="Date", 
     ylab="Pressure")

axis.POSIXct(1, at=seq(as.POSIXct("2016-04-19 00:00:00"), 
                       as.POSIXct(forecasted_dates[length(forecasted_dates)]), 
                       by="hour"), 
             format="%b %d", 
             tick = FALSE)

###This time however, lets add a different color line for the forecasts
lines(y=forecast_sensor$mean, x= forecasted_dates, col="blue")

暫無
暫無

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

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