1. 문제
acf 거래 계산을 위해 TSdist 패키지의 TSDatabaseDistances 함수를 사용하다 오류가 발생했어요.
기출문제 풀이를 해보려는 과정에서 (2022.07.14 - [ADP 실기 준비(R)] - [ADP 실기 study log] ADP 23회 코로나 시계열 데이터 ) <simpleError in .common.ts.sanity.check(x): NA in the series> 에러가 발생했습니다.
2. 재현
rm(list=ls())
pacman::p_load(tidyverse,magrittr,lubridate,reshape2,recipes,forecast, factoextra, dtw)
library(TSdist)
temp <- "https://www.sharpsightlabs.com/datasets/covid19/covid_data_2020-05-08.csv" %>%
read_delim(delim = ";") %>%
select(date, country, confirmed, new_cases, dead)
temp %>%
group_by(country) %>%
mutate (row =row_number()) %>%
pivot_wider(names_from = country,
values_from = new_cases) %>%
ungroup() %>%
select (-date, -row) %>%
t() %>%
TSdist::TSDatabaseDistances( distance = "acf")
<simpleError in .common.ts.sanity.check(x): NA in the series>
3. 문제 원인
오류메시지 <simpleError in .common.ts.sanity.check(x): NA in the series> 내용과 동일하게 데이터에 NA 데이터가 있음.
temp 에 NA 가 포함되어 있고 변환 가공시에 이 결측치가 해소되지 않고 TSDatabaseDistances 함수의 인자로 전달되어 발생함.
4. 해결 방법
temp 에 포함된 결측치를 적절한 방식으로 처리해야 하지만, 오류해결 관점의 quick fix 코드는 다음과 같습니다.
rm(list=ls())
pacman::p_load(tidyverse,magrittr,lubridate,reshape2,recipes,forecast, factoextra, dtw)
temp <- "https://www.sharpsightlabs.com/datasets/covid19/covid_data_2020-05-08.csv" %>%
read_delim(delim = ";") %>%
select(date, country, confirmed, new_cases, dead)
library(TSdist)
temp %>%
na.omit() %>%
group_by(country) %>%
mutate (row =row_number()) %>%
pivot_wider(names_from = country,
values_from = new_cases) %>%
ungroup() %>%
select (-date, -row) %>%
t() %>%
TSdist::TSDatabaseDistances( distance = "acf")
5. 연구 기록
?TSDatabaseDistances 를 통해 함수 설명서를 예제를 참고합니다.
help(example.database)
data(example.database)
# To calculate the distance matrix of this database:
TSDatabaseDistances(example.database, distance="manhattan")
함수 설명을 확인했습니다.
X Time series database saved in a numeric matrix, a list, an mts object, a zoo object or xts object.
temp 가 변환되어 TSDatabaseDistances 인자로 전달된 개체는 numeric matrix 로서 NA 를 포함하고 있는 것으로 보입니다.
NA 가 포함된 numeric matrix 를 생성하여 가설이 맞는지 확인해봅니다.
# 정상적인 케이스
X <- matrix(c(1,2,3,4),nrow = 2)
TSDatabaseDistances(X, distance="acf")
# 문제 발생 케이스
X <- matrix(c(1,2,3,NA),nrow = 2)
TSDatabaseDistances(X, distance="acf")
예상 대로 NA 가 포함된 경우 Error 메시지가 발생합니다.
실제 스크립트에서 발생하는 오류를 해결하기위해 temp 에 포함된 결측치 총 갯수를 확인해보니 266 개의 결측치가 존재합니다
sum(is.na(temp))
[1] 266
values_fill =0 으로 결측치가 해소되는지 확인해보았으나 결과는 동일합니다.
temp %>%
group_by(country) %>%
mutate (row =row_number()) %>%
pivot_wider(names_from = country,
values_from = new_cases,
values_fill =0) %>%
ungroup() %>%
select (-date, -row) %>% is.na() %>% sum()
[1] 266
'ADP (R)' 카테고리의 다른 글
[R] not more than 65536 오류(pam) 해결 (0) | 2022.08.08 |
---|---|
오늘의 ADP 준비 / 2022-08-08 월(D48) (0) | 2022.08.08 |
[R] Entry “TSDistances” not in registry 오류 해결 (0) | 2022.08.07 |
오늘의 ADP 준비 / 2022-08-07 일(D49) (0) | 2022.08.07 |
매개효과분석 (0) | 2022.08.06 |