Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Добавить ответ в эту темуОткрыть тему
> Помогите, пожалуйста, написать алгоритм для R
p2004r
сообщение 7.11.2012 - 21:49
Сообщение #16





Группа: Пользователи
Сообщений: 1091
Регистрация: 26.08.2010
Пользователь №: 22699



Цитата(Olga_ @ 6.11.2012 - 18:08) *
Решили оставить вариант с уровнем полютантов за предыдущие 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.



Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Olga_
сообщение 7.11.2012 - 22:10
Сообщение #17





Группа: Пользователи
Сообщений: 43
Регистрация: 4.01.2012
Пользователь №: 23400



Спасибо, я уже сама нашла и создала искусственные промежутки времени, но только как разместить мои реальные даты пока еще не могу понять.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 8.11.2012 - 21:18
Сообщение #18





Группа: Пользователи
Сообщений: 1091
Регистрация: 26.08.2010
Пользователь №: 22699



Цитата(Olga_ @ 7.11.2012 - 22:10) *
Спасибо, я уже сама нашла и создала искусственные промежутки времени, но только как разместить мои реальные даты пока еще не могу понять.


сначала как мне кажется должен быть создан временной ряд с иррегулярным расстоянием (это Ваш данные). на втором этапе его надо конвертировать в регулярный ряд с нужными отсчетами.


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Olga_
сообщение 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
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 8.11.2012 - 23:33
Сообщение #20





Группа: Пользователи
Сообщений: 1091
Регистрация: 26.08.2010
Пользователь №: 22699



Цитата(Olga_ @ 8.11.2012 - 22:30) *
Временной ряд уже создан, это все те же данные
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.


не понимаю что Вы пытаетесь сделать smile.gif

ну вот почитайте ?na.approx в zoo, там в примере есть пересчет серии using na.approx to create regularly spaced series


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
Olga_
сообщение 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 функция для пропущенных значений.



Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 9.11.2012 - 12:57
Сообщение #22





Группа: Пользователи
Сообщений: 1091
Регистрация: 26.08.2010
Пользователь №: 22699



Ха, какой тонкий тролинг smile.gif

не говорим попусту, а читаем.
Код
## 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)
     }




Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

2 страниц V  < 1 2
Добавить ответ в эту темуОткрыть тему