當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R recipes step_harmonic 添加正弦和餘弦項以進行諧波分析


step_harmonic() 創建配方步驟的規範,該步驟將添加 sin()cos() 項進行諧波分析。

用法

step_harmonic(
  recipe,
  ...,
  role = "predictor",
  trained = FALSE,
  frequency = NA_real_,
  cycle_size = NA_real_,
  starting_val = NA_real_,
  keep_original_cols = FALSE,
  columns = NULL,
  skip = FALSE,
  id = rand_id("harmonic")
)

參數

recipe

一個菜譜對象。該步驟將添加到此配方的操作序列中。

...

一個或多個選擇器函數用於為此步驟選擇變量。有關更多詳細信息,請參閱selections()。這通常是單個變量。

role

對於此步驟創建的模型項,應為其分配什麽分析角色?默認情況下,此步驟根據原始變量創建的新列將用作模型中的預測變量。

trained

指示預處理數量是否已估計的邏輯。

frequency

具有至少一個值的數值向量。該值必須大於零且有限。

cycle_size

一種數值向量,至少有一個值指示單個周期的大小。 cycle_size 應與輸入變量具有相同的單位。

starting_val

NA 、數字、日期或 POSIXt 值,指示每個輸入變量的 sin 和 cos 曲線的參考點。如果該值為 DatePOISXt,則使用 as.numeric 將值轉換為數字。可以指定該參數以增強對信號相位的控製。如果未指定 starting_val,則默認值為 0。

keep_original_cols

將原始變量保留在輸出中的邏輯。默認為 FALSE

columns

所選變量名稱的字符串。該字段是一個占位符,一旦使用 prep() 就會被填充。

skip

一個合乎邏輯的。當bake() 烘焙食譜時是否應該跳過此步驟?雖然所有操作都是在 prep() 運行時烘焙的,但某些操作可能無法對新數據進行(例如處理結果變量)。使用skip = TRUE時應小心,因為它可能會影響後續操作的計算。

id

該步驟特有的字符串,用於標識它。

recipe 的更新版本,將新步驟添加到任何現有操作的序列中。

細節

此步驟旨在使用正弦波和餘弦波的組合來說明觀測數據的周期性分量。為此,使用一個 sin 和一個 cos 項對指定頻率的每個波進行建模。然後可以使用每個頻率的這兩項來估計觀測數據中周期信號的幅度和相移。將已知頻率但未知相位和振幅的餘弦波與正弦和餘弦項之和相關聯的方程如下:

A_j cos(\sigma_j t_i - \Phi_j) = C_j cos(\sigma_j t_i) + S_j sin(\sigma_j t_i)

求解方程產生 。然後可以通過以下方式獲得振幅:

A_j = \sqrt{C^2_j + S^2_j}

相位可以通過以下方式獲得:

\Phi_j = \arctan{(S_j / C_j)}

其中:

  • 頻率的幅度

  • 頻率的相位

  • 頻率的 cos 項係數

  • 頻率的 sin 項係數

周期分量由frequencycycle_size 參數指定。周期大小將指定頻率與輸入列單位相關。有多種方法可以指定給定頻率的波,例如,POSIXct 輸入列的 frequency 為 24,cycle_size 等於 86400,相當於 frequency 為 1.0,cycle_size 等於至 3600。

調整參數

此步驟有 1 個調整參數:

  • frequency:諧波頻率(類型:double,默認值:NA)

箱重

底層操作不允許使用案例權重。

參考

多蘭 H. E. 和奎爾基 J. J. (1972)。季節性數據的諧波分析:一些重要的屬性。 《美國農業經濟學雜誌》,54,第 4 卷,第 1 部分,646-651。

福爾曼,M.G.G. 和亨利,R.F. (1989)。潮汐模型時間序列的調和分析。水資源進展,12(3), 109-120。

也可以看看

例子

library(ggplot2, quietly = TRUE)
library(dplyr)

data(sunspot.year)
sunspots <-
  tibble(
    year = 1700:1988,
    n_sunspot = sunspot.year,
    type = "measured"
  ) %>%
  slice(1:75)

# sunspots period is around 11 years, sample spacing is one year
dat <- recipe(n_sunspot ~ year, data = sunspots) %>%
  step_harmonic(year, frequency = 1 / 11, cycle_size = 1) %>%
  prep() %>%
  bake(new_data = NULL)

fit <- lm(n_sunspot ~ year_sin_1 + year_cos_1, data = dat)

preds <- tibble(
  year = sunspots$year,
  n_sunspot = fit$fitted.values,
  type = "predicted"
)

bind_rows(sunspots, preds) %>%
  ggplot(aes(x = year, y = n_sunspot, color = type)) +
  geom_line()



# ------------------------------------------------------------------------------
# POSIXct example

date_time <-
  as.POSIXct(
    paste0(rep(1959:1997, each = 12), "-", rep(1:12, length(1959:1997)), "-01"),
    tz = "UTC"
  )

carbon_dioxide <- tibble(
  date_time = date_time,
  co2 = as.numeric(co2),
  type = "measured"
)

# yearly co2 fluctuations
dat <-
  recipe(co2 ~ date_time,
    data = carbon_dioxide
  ) %>%
  step_mutate(date_time_num = as.numeric(date_time)) %>%
  step_ns(date_time_num, deg_free = 3) %>%
  step_harmonic(date_time, frequency = 1, cycle_size = 86400 * 365.24) %>%
  prep() %>%
  bake(new_data = NULL)

fit <- lm(co2 ~ date_time_num_ns_1 + date_time_num_ns_2 +
  date_time_num_ns_3 + date_time_sin_1 +
  date_time_cos_1, data = dat)

preds <- tibble(
  date_time = date_time,
  co2 = fit$fitted.values,
  type = "predicted"
)

bind_rows(carbon_dioxide, preds) %>%
  ggplot(aes(x = date_time, y = co2, color = type)) +
  geom_line()

源代碼:R/harmonic.R

相關用法


注:本文由純淨天空篩選整理自Max Kuhn等大神的英文原創作品 Add sin and cos terms for harmonic analysis。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。