2014-11-26 3 views
1

Я пытаюсь вычислить следующий для набора данных, чтобы узнать некоторый анализ временных рядов, а затем блокировать загрузки ремня стандартных ошибок для физических лиц:серии Задержки и корреляции (автокорреляция)

enter image description here

Вот набор данных:

https://www.dropbox.com/s/z066lnxetz9uaf6/health.csv?dl=0

А вот код, который я сделал для Cor:

#Check for duplicates 
health.d <- health.d[!duplicated(health.d),] 

health.d$lnincome <- log(health.d$Income + 1) 

health.d <- health.d[(health.d$sex == 1 & health.d$married == 0),] 

#First Difference for each individual (%>% , group_by and mutate are functions in dplyr package) 
health.d <- health.d %>%  
    group_by(ID) %>%     
    mutate(Dy = lnincome - lag(lnincome, 1)) 

#Remove NA from Dy 
health.d <- health.d[!is.na(health.d$Dy),] 

#Autocorretion 

health.d <- arrange(health.d, ID, year) 
health.d <- transform(health.d, time = as.numeric(interaction(ID, drop=TRUE))) 

health.d$lag1DY <- health.d$lnincome - lag(health.d$lnincome, 1) 
health.d$lagDY_s1 <- lag(health.d$lnincome,1) - lag(health.d$lnincome, 2) 
health.d$lagDY_s2 <- lag(health.d$lnincome,2) - lag(health.d$lnincome, 3) 
health.d$lagDY_s3 <- lag(health.d$lnincome,3) - lag(health.d$lnincome, 4) 
health.d$lagDY_s4 <- lag(health.d$lnincome,4) - lag(health.d$lnincome, 5) 

#Remove NA from lag 
health.d <- health.d[!is.na(health.d$lag1DY),] 
health.d <- health.d[!is.na(health.d$lagDY_s1),] 
health.d <- health.d[!is.na(health.d$lagDY_s2),] 
health.d <- health.d[!is.na(health.d$lagDY_s3),] 
health.d <- health.d[!is.na(health.d$lagDY_s4),] 

cor(health.d$lag1DY, health.d$lagDY_s1) 
cor(health.d$lag1DY, health.d$lagDY_s2) 
cor(health.d$lag1DY, health.d$lagDY_s3) 
cor(health.d$lag1DY, health.d$lagDY_s4) 

Результатов:

> cor(health.d$lag1DY, health.d$lagDY_s1) 
    [1] -0.05593212 
    > cor(health.d$lag1DY, health.d$lagDY_s2) 
    [1] -0.1033625 
    > cor(health.d$lag1DY, health.d$lagDY_s3) 
    [1] -0.0804236 
    > cor(health.d$lag1DY, health.d$lagDY_s4) 
    [1] -0.1235624 

Они, кажется, не так, как должна быть высокой корреляцией между периодами времени из-за доход, но я не могу понять, что я сделал неправильно.

Редактировать: Я обновил свой код, чтобы включить текущие результаты, которые я достиг. Они не кажутся правильными, но (1) я не знаю правильных чисел, и (2) я не знаю, где мой код ошибочен. Я публикую свои текущие результаты в надежде, что кто-то может исправить меня :)

Любая помощь с блочной загрузкой стандартных ошибок?

Заранее спасибо.

+0

Я не могу воспроизвести ваши результаты 'cor' из чистого сеанса R, потому что' lag.default' фактически не изменяет ваши данные. Он просто добавляет атрибут 'tsp' и меняет его. Таким образом, все результаты 'cor' - это' NA', потому что стандартное отклонение равно нулю. У вас есть прилагаемый пакет, который маскирует 'lag'? –

+0

@Joshua Ulrich извините ..... смотрите обновленный код. Я использую dplyr. Виноват. – Vedda

+0

Я могу реплицировать результаты, если я рассчитываю лаги вручную. Это означает, что это скорее статистический вопрос, чем вопрос программирования. Я помечен для перехода на stats.stackexchange.com. –

ответ

2

Возможно, все, что вам нужно, это использовать функцию acf в stats упаковке. Он будет делать корреляции для многих лагов, как вы предпочитаете.

library(stats) # for the use of "acf" function 
health.d <- health.d[!duplicated(health.d),] 
health.d$lnincome <- log(health.d$Income + 1) 
health.d <- health.d[(health.d$sex == 1 & health.d$married == 0),] 
#First Difference for each individual (%>% , group_by and mutate are functions in dplyr package) 
health.d <- health.d %>% 
group_by(ID) %>% 
mutate(Dy = lnincome - lag(lnincome, 1)) 
acf.results<-acf(health.d$Dy, lag.max = 5, type = "correlation",plot = TRUE, na.action = na.pass) 
plot(acf.results, main="Auto-correlation") 

Это даст вам следующий график авто-коррекции на 5 лагов, указанный в acf аргумент

enter image description here

Если вы хотите получить доступ к ACF результатов вы можете использовать:

print(acf.results) 

и вы получите следующее:

Autocorrelations of series ‘health.d$Dy’, by lag 

    0  1  2  3  4  5 
1.000 -0.225 0.016 -0.030 -0.002 0.002 
+0

Спасибо! Это то, что я пытался сделать с acf раньше, но не смог получить результаты. Я пытаюсь сделать блок начальной загрузки стандартных ошибок. Вы можете помочь с этим? Я не могу понять, как правильно использовать функцию загрузки. – Vedda

+0

@Amstell. К сожалению, я не делал блок-бутстрап перед использованием R. Но я посмотрю на него. – athraa

+0

ОК спасибо! Я ценю вашу помощь. – Vedda

Смежные вопросы