Помогите, пожалуйста, написать алгоритм для R |
Здравствуйте, гость ( Вход | Регистрация )
Помогите, пожалуйста, написать алгоритм для R |
7.11.2012 - 21:49
Сообщение
#16
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Решили оставить вариант с уровнем полютантов за предыдущие 7 дней. Хотела бы использовать также для анализа время, в моем исследовании это 1 неделя. Но как было отмечено выше, время Исследований имеет неодинаковый промежуток. 1. Сначала, хотела бы создать одинаковые промежутки времени- недели начиная, к примеру с 01.01.1999. Какой это пакет в R? Где то кто то уже рекомендовал этот пакет, но не могу вспомнить 2. Затем интерполировать реальные даты в искусственные промежутки времени. С помощью какого пакета/пакетов R можно это выполнить? Спасибо заранее. Например. The zoo package provides infrastructure for regularly and irregularly spaced time series using arbitrary classes for the time stamps (i.e., allowing all classes from the previous section). It is designed to be as consistent as possible with "ts". Coercion from and to "zoo" is available for all other classes mentioned in this section. |
|
7.11.2012 - 22:10
Сообщение
#17
|
|
Группа: Пользователи Сообщений: 43 Регистрация: 4.01.2012 Пользователь №: 23400 |
Спасибо, я уже сама нашла и создала искусственные промежутки времени, но только как разместить мои реальные даты пока еще не могу понять.
|
|
8.11.2012 - 21:18
Сообщение
#18
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Спасибо, я уже сама нашла и создала искусственные промежутки времени, но только как разместить мои реальные даты пока еще не могу понять. сначала как мне кажется должен быть создан временной ряд с иррегулярным расстоянием (это Ваш данные). на втором этапе его надо конвертировать в регулярный ряд с нужными отсчетами. |
|
8.11.2012 - 22:30
Сообщение
#19
|
|
Группа: Пользователи Сообщений: 43 Регистрация: 4.01.2012 Пользователь №: 23400 |
Временной ряд уже создан, это все те же данные
FID stday week 1 28apr1999 1 1 07may1999 2 1 14may1999 3 1 21may1999 4 1 27may1999 5 1 04jun1999 6 1 11jun1999 7 1 18jun1999 8 1 25jun1999 9 1 02jul1999 10 1 09jul1999 11 1 16jul1999 12 1 23jul1999 13 1 30jul1999 14 1 06aug1999 15 1 13aug1999 16 1 20aug1999 17 1 27aug1999 18 1 03sep1999 19 1 10sep1999 20 1 17sep1999 21 > summary(data$stday) Min. 1st Qu. Median Mean 3rd Qu. Max. "1999-04-28" "2003-08-26" "2005-12-20" "2006-02-11" "2009-01-13" "2012-02-23" > y<-zooreg(seq(1,,length=676),as.Date(data$stday,format="%Y-%m-%d"),start=as.Date("1999-04-28"),end=as.Date("2012-02-23"),freq=1,deltat=7) > y[500:505] 2008-11-19 2008-11-26 2008-12-03 2008-12-10 2008-12-17 2008-12-24 500 501 502 503 504 505 Или же другой вариант y0<-zoo(seq(1,,length=676),as.Date(data$stday,format="%Y-%m-%d")) Warning message: In zoo(rval[i], index(x)[i]) : some methods for ?zoo? objects do not work if the index entries in ?order.by? are not unique > y0[500:505] 2000-02-21 2000-02-21 2000-02-21 2000-02-21 2000-02-21 2000-02-21 194 298 503 557 606 185 > data$stday[500:505] [1] "2000-01-31" "2000-02-07" "2000-02-14" "2000-02-21" "2000-02-28" [6] "2000-03-06" Результаты мне кажутся сомнительными... Не понимаю, как решить эту задачку и есть ли решение в R. Сообщение отредактировал Olga_ - 8.11.2012 - 22:34 |
|
8.11.2012 - 23:33
Сообщение
#20
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Временной ряд уже создан, это все те же данные FID stday week 1 28apr1999 1 1 07may1999 2 1 14may1999 3 1 21may1999 4 1 27may1999 5 1 04jun1999 6 1 11jun1999 7 1 18jun1999 8 1 25jun1999 9 1 02jul1999 10 1 09jul1999 11 1 16jul1999 12 1 23jul1999 13 1 30jul1999 14 1 06aug1999 15 1 13aug1999 16 1 20aug1999 17 1 27aug1999 18 1 03sep1999 19 1 10sep1999 20 1 17sep1999 21 > summary(data$stday) Min. 1st Qu. Median Mean 3rd Qu. Max. "1999-04-28" "2003-08-26" "2005-12-20" "2006-02-11" "2009-01-13" "2012-02-23" > y<-zooreg(seq(1,,length=676),as.Date(data$stday,format="%Y-%m-%d"),start=as.Date("1999-04-28"),end=as.Date("2012-02-23"),freq=1,deltat=7) > y[500:505] 2008-11-19 2008-11-26 2008-12-03 2008-12-10 2008-12-17 2008-12-24 500 501 502 503 504 505 Или же другой вариант y0<-zoo(seq(1,,length=676),as.Date(data$stday,format="%Y-%m-%d")) Warning message: In zoo(rval[i], index(x)[i]) : some methods for ?zoo? objects do not work if the index entries in ?order.by? are not unique > y0[500:505] 2000-02-21 2000-02-21 2000-02-21 2000-02-21 2000-02-21 2000-02-21 194 298 503 557 606 185 > data$stday[500:505] [1] "2000-01-31" "2000-02-07" "2000-02-14" "2000-02-21" "2000-02-28" [6] "2000-03-06" Результаты мне кажутся сомнительными... Не понимаю, как решить эту задачку и есть ли решение в R. не понимаю что Вы пытаетесь сделать ну вот почитайте ?na.approx в zoo, там в примере есть пересчет серии using na.approx to create regularly spaced series |
|
9.11.2012 - 00:32
Сообщение
#21
|
|
Группа: Пользователи Сообщений: 43 Регистрация: 4.01.2012 Пользователь №: 23400 |
У меня time series data с нерегулярными интервалами времени. Я хочу организовать мои данные таким образом, чтобы каждый пациент имел 1 измерение в неделю, в среднем у каждого пациента было 52 измерения, то есть каждую неделю в течении года. Поэтому встречаюся повторные измерения в один и тот же день (исследовали сразу несколько пациентов).
id stday week 1 28apr1999 1 1 07may1999 2 1 14may1999 3 1 21may1999 4 1 27may1999 5 1 04jun1999 6 1 11jun1999 7 1 18jun1999 8 1 25jun1999 9 1 02jul1999 10 1 09jul1999 11 1 16jul1999 12 1 23jul1999 13 1 30jul1999 14 1 06aug1999 15 Конечные данные должны выглыдеть так id week day 1 1 25.04.99 1 2 02.05.99 1 3 09.05.99 1 4 16.05.99 1 5 23.05.99 1 6 30.05.99 1 7 06.06.99 1 8 13.06.99 1 9 20.06.99 1 10 27.06.99 1 11 04.07.99 1 12 11.07.99 1 12 11.07.99 2 12 11.07.99 6 12 11.07.99 9 12 11.07.99 Здесь каждый пациент имел и измерение каждое воскресение, данные были организованы в matlab, которого у меня на данный момент нет, да и как работать в матлабе имею смутное представление.. na.approx функция для пропущенных значений. |
|
9.11.2012 - 12:57
Сообщение
#22
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Ха, какой тонкий тролинг
не говорим попусту, а читаем. Код ## using na.approx for disaggregation zy <- zoo(1:3, 2000:2001) # yearly to monthly series zmo <- na.approx(zy, xout = as.yearmon(2000+0:13/12)) zmo # monthly to daily series sq <- seq(as.Date(start(zmo)), as.Date(end(zmo), frac = 1), by = "day") zd <- na.approx(zmo, x = as.Date, xout = sq) head(zd) # weekly to daily series zww <- zoo(1:3, as.Date("2001-01-01") + seq(0, length = 3, by = 7)) zww zdd <- na.approx(zww, xout = seq(start(zww), end(zww), by = "day")) zdd и Код # using na.approx to create regularly spaced series # z has points at 10, 20 and 40 minutes while output also has a point at 30 if(require("chron")) { tt <- as.chron("2000-01-01 10:00:00") + c(1, 2, 4) * as.numeric(times("00:10:00")) z <- zoo(1:3, tt) tseq <- seq(start(z), end(z), by = times("00:10:00")) na.approx(z, xout = tseq) } |
|