Написание OLS функционирует, чтобы управлять регрессом на больших ценностях структуры данных

У меня есть мега структура данных, содержащая ежемесячную прибыль запаса с января 1970 до декабря 2009 (ряды) для 7 разных стран включая США (колонки). Моя задача состоит в том, чтобы возвратиться прибыль запаса каждой страны (зависимая переменная) по прибыли запаса США (независимая переменная), используя ценности 4 различных периодов времени а именно, 70-е, 80-е, 90-е и 00-е.

The data set (.csv) can be downloaded at: https://docs.google.com/file/d/0BxaWFk-EO7tjbG43Yl9iQVlvazQ/edit

Это означает, что у меня есть 24 регресса, чтобы бежать отдельно и сообщить о результатах, которые я уже сделал использование lm() функция. Однако я в настоящее время пытаюсь использовать R умнее и создать таможенные функции, которые достигнут моей цели и произведут 24 набора результатов.

Я создал sub структуры данных, содержащие наблюдения, сгруппированные согласно периодам времени, зная, что есть 120 месяцев за десятилетие.

seventies = mydata[1:120, ] # 1970s (from Jan. 1970 to Dec. 1979)
eighties = mydata[121:240, ] # 1980s (from Jan. 1980to Dec. 1989)
nineties = mydata[241:360, ] # 1990s (from Jan. 1990 to Dec. 1999)
twenties = mydata[361:480, ] # 2000s (from Jan. 2000 to Dec. 2009)

NB: Каждая из недавно созданных переменных - 120 x 7 матриц для 120 наблюдений по 7 странам.

Управление этими 24 регрессами, используя Яву потребовало бы использования клавших внахлест для петли.

Кто-либо мог обеспечить шаги, которые я должен сделать, чтобы написать функцию, которая прибудет желаемый результат? Некоторые отрывки кода R также ценились бы. Я также думаю mapply , функция будет использоваться.

Спасибо и сообщило мне, нужно ли моему посту некоторое редактирование.

0
nl ja de
@PeterEllis Как я объяснил ранее, я уже сделал осуществление, используя lm() функция, вырезающая и вставляющая 24 раза. Но I' m изучение, как написать функции в R, особенно как не использовать петли и я думал, что это осуществление подходило, чтобы получить такое знание, которое могло быть более полезным в будущем, так как я хочу сделать R моим главным языком программирования.
добавлено автор SavedByJESUS, источник
Если вы только хотите подсказки на эффективном R, кодирующем, это должно, вероятно, пойти в переполнение стека. Если вы хотите совет относительно того, является ли lm хорошим инструментом с этой целью или чем могла бы быть альтернативная стратегия, это может принять во внимание природу временного ряда данных, это в порядке здесь (но вы haven' t задал тот вопрос).как есть Хотя я don' t вполне заставляют цель осуществления - 24 модели соответствовать doesn' t кажутся чрезмерными, даже если вы делаете это, вырезая и вставляя линию времен кода 24, и набор данных довольно маленький, что императив открытия - эффективный способ сделать его?
добавлено автор Peter Ellis, источник
Я голосовал, чтобы закрыться и мигрировать, чтобы сложить обмен. I' ve, учитывая ответ вроде программного примера домашней работы, игнорирующего статистические проблемы - но примечание, что использование регресса как это с двумя временными рядами является почти всегда плохой идеей, высоко склонной дать поддельные результаты.
добавлено автор Peter Ellis, источник

1 ответы

Это не полный ответ, а начало.

Во-первых, я думаю, что это - ошибка разделить ваш набор данных на различные объекты. Это просто делает его тяжелее, чтобы обращаться. Лучше должен был бы добавить переменную индикатора к вашему телу данных, например,

> mydata <- as.data.frame(matrix(round(rnorm(480*7),1), ncol=7))
> names(mydata) <- c("USA", paste("country", 1:6, sep=""))
> 
> mydata$decade <- rep(c("seventies", "eighties", "nineties", "twenties"), rep(120,4))
> 
> head(mydata)
   USA country1 country2 country3 country4 country5 country6    decade
1  0.2     -0.1      0.8      0.9     -1.6     -0.1     -1.1 seventies
2  0.0     -0.5      0.1     -0.4     -1.2     -0.9      1.3 seventies
3  2.2      1.4      1.7      1.0     -1.6     -1.5      0.6 seventies
4 -0.5      2.5      0.2     -0.9      2.3      1.0      0.1 seventies
5 -0.1      0.0     -0.9     -1.4      0.7     -0.1     -0.1 seventies
6  0.3     -0.4      0.1      0.5      0.2      0.9     -0.5 seventies

Мой второй наконечник должен был бы преобразовать это в длинный формат, используя изменение или reshape2 библиотеку, например,

> library(reshape2)
> mydata.m <- melt(mydata, id.vars=c("USA", "decade"))
> head(mydata.m)
   USA    decade variable value
1  0.2 seventies country1  -0.1
2  0.0 seventies country1  -0.5
3  2.2 seventies country1   1.4
4 -0.5 seventies country1   2.5
5 -0.1 seventies country1   0.0
6  0.3 seventies country1  -0.4

Отсюда у вас есть ряд вариантов. Вы могли использовать tapply() от основы или чего-то от plyr пакета. Вы могли даже соответствовать ему как одной большой модели, со взаимодействием между переменной и десятилетие (дает подобный, но не идентичные результаты к вашим 24 моделям, которые внизу отделят оценки остаточного различия). например, с tapply начинают:

> country <- with(mydata.m, tapply(USA, list(decade, variable), function(x){x}))
> country
          country1    country2    country3    country4    country5    country6   
eighties  Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120
nineties  Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120
seventies Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120
twenties  Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120 Numeric,120
> country[1,1]
[[1]]
  [1]  0.2  1.1  0.2  0.1 -0.1  2.1 -2.4 -0.5 -0.5 -0.3  0.1 -0.9 -0.6 -0.1  0.8  0.9  0.4  0.6 -0.5  0.4
 [21] -1.3  0.9  0.0 -1.0  0.2 -0.2  0.0 -0.5  0.0  1.4  0.7 -0.9 -1.1  1.7  0.5 -1.0  1.1  0.1  0.3  0.8
 [41] -0.5 -1.9 -1.5 -0.2  0.5 -0.8 -1.2  1.0  0.3  1.7 -0.5  1.2 -0.1  0.9  0.9  0.5 -1.8  0.7  0.1  0.7
 [61]  0.4  0.2 -0.7  2.1  0.2 -1.1 -1.4  1.7 -0.4 -1.0  0.0  1.0 -0.6  1.5  0.4  0.3 -0.2 -1.0 -0.8  1.0
 [81]  0.4 -0.3  1.2  0.9 -0.8  0.2 -0.7 -1.3  0.4 -0.7  0.7  1.5 -0.7 -0.3 -2.3  0.3  0.6 -0.9 -0.5  0.4
[101]  0.4 -0.8  0.2  0.2  0.3 -1.0 -1.0  0.6 -2.8 -0.2  2.7  1.1 -0.5 -0.1 -0.6 -0.6 -0.2  0.1  0.0 -0.9

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

Я не боялся бы использовать петли в какой-то момент, если это кажется необходимым. Петли - почти всегда плохая идея в R для того, чтобы сделать что-то один элемент за один раз в векторе, но использовать их, чтобы сделать что-то одна модель за один раз может иногда быть более прозрачной для читателя кода, чем более тайные операции. Когда данные будут посчитаны в тысячах рядов, а не миллионах, скорость операции не будет проблемой (ваш набор данных здесь на самом деле довольно маленький, например), таким образом, прозрачность кода и непринужденность проверки становятся реальным критерием в выборе вашего программного подхода.

1
добавлено
! Большое спасибо за ваш подробный ответ!!!
добавлено автор SavedByJESUS, источник