2016-02-05 2 views
2

Я пытаюсь использовать различные функции сглаживания, но не нашел для меня подходящего. У меня есть кадр данных чтения из CSV-файла, который содержит данные датчика и имеет временную метку даты для каждой строки:Функция сглаживания на кадре данных

df 
#datetime value1 value2 value3 ... 
#2015-10-2 05-10-12 0.1 1000 28 ... 
#2015-10-2 05-10-14 0.21 2500 17 ... 
#2015-10-2 05-10-19 0.52 1700 37 ... 
#2015-10-2 05-11-01 0.31 1530 42 ... 
#2015-10-2 05-11-03 0.25 1956 33 ... 
#2015-10-2 05-11-10 0.63 2750 22 ... 
#2015-10-2 05-11-30 0.23 322 32 ... 
#2015-10-2 15-00-43 0.12 933 17 ... 
#2015-10-3 10-43-52 0.03 3244 43 ... 
#2015-10-3 12-11-45 0.73 2334 12 ... 
#2015-10-4 00-32-34 0.54 2321 27 ... 
... 

Как вы видите столбец даты и время не имеет постоянных интервалов. Я думаю, что это проблема. Теперь я хочу сгладить значение столбца кадра данных1.

Хорошо, мой вопрос был приостановлен, поэтому я хотел бы задать более подробно. Прошу прощения, я новичок в R (с тех пор несколько дней), а также новичок в этом форуме (со вчерашнего дня), поэтому я должен извиниться за то, что не достаточно ясно дал мне вопрос и не знал о каждом правиле форматирования. Но я постараюсь изо всех сил вовлечься!

Я выбрал пример с этой страницы https://stats.stackexchange.com/questions/30975/how-to-add-non-linear-trend-line-to-a-scatter-plot-in-r:

n <- 10 
x <-seq(n) 
y <- rnorm(n, 50 + 30 * x^(-0.2), 1) 
Data <- data.frame(x,y) 

plot(y ~ x, Data) 

loess_fit <- loess(y ~ x, Data) 
lines(Data$x, predict(loess_fit), col = "blue") 

nls_fit <- nls(y ~ a + b * x^(-c), Data, start = list(a = 80, b = 20, c = 0.2)) 
lines(Data$x, predict(nls_fit), col = "red") 

Этот пример показывает ясно, как добавить линию тренда сглаживания на дисплее значений.

Теперь моя проблема в том, что у меня нет последующих числовых значений как x, но у меня есть значения даты и времени. Так что я изменить приведенный выше пример этому:

x <- strptime(c("2015-10-02 11:07:43", "2015-10-02 12:09:45", "2015-10-02 15:10:10", "2015-10-02 18:00:23", 
"2015-10-02 22:31:12", "2015-10-03 02:01:53", "2015-10-03 02:05:52", "2015-10-03 04:12:37", 
"2015-10-03 07:47:08", "2015-10-03 11:43:41"), format = "%Y-%m-%d %H:%M:%S") 
Data <- data.frame(x,y) 

plot(y ~ x, Data) 

loess_fit <- loess(y ~ x, Data) 
lines(Data$x, predict(loess_fit), col = "blue") 

nls_fit <- nls(y ~ a + b * x^(-c), Data, start = list(a = 80, b = 20, c = 0.2)) 
lines(Data$x, predict(nls_fit), col = "red") 

Если я запускаю этот пример я получаю ошибку в строке

loess_fit <- loess(y ~ x, Data) 

говоря:

Error in simpleLoess(y, x, w, span, degree = degree, parametric = parametric, : 
(converted from warning) NAs introduced by coercion 

Любой намек на получение сглаживание тенденции к этим данным?

+0

_ «Но не нашел для меня подходящего» _ ... что именно вы имеете в виду? – miradulo

+0

Я нашел некоторую функцию «лесс», которая работает с последующими значениями x, а не с датами – Juppes

+0

Добро пожаловать в StackOverflow! Пожалуйста, прочитайте информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com/questions/ 5963269/как к Make-A-пра-р-воспроизводимая-пример/5963610). Это облегчит вам помощь другим людям. – Jaap

ответ

1

help("loess") указывает, что функция ожидает «числовой отклик и от одного до четырех числовых предикторов». Переменная POSIXlt не является числовой переменной. Тем не менее, это работает:

loess_fit <- loess(y ~ as.numeric(x), Data) 
lines(Data$x, predict(loess_fit), col = "blue") 

PS: Я вообще советую избегать POSIXlt и использовать as.POSIXct вместо strptime. Вы также должны всегда указывать часовой пояс явно.

+0

Большое спасибо за этот намек! Он отлично работал. Также я буду помнить ваши советы ;-)) – Juppes