2016-07-15 5 views
0

Я написал код для вычисления эффектов с использованием метода Delta в RВычислить эффекты с использованием методы дельты в R

У меня есть dataframe dpcp с переменными x1, x2, x3, x4 и матрицей 1000 извлекает из многофакторных нормальный, m4[1000,4].

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

Как я могу запустить его быстрее:

n = nrow(dpcp) 
for (i in 1: n) { 
    for (j in 1: 1000) { 
     marg_effects[i, j] = (m4[j, 1] * dpcp[i, ] $x1) + (m4[j, 2] * dpcp[i, ] $x2)+ (m4[j, 3] * dpcp[i, ] $x3) + (m4[j, 4] * dpcp[i, ] $x4) 
    } 
} 

в настоящее время код занимает свыше 5 часов даже 2000 наблюдений.

ответ

0

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

marg_effects <- as.matrix(dpcp) %*% t(m4) 

Оператор %*% для умножения матриц и функция t() является транспонировать m4

Надеются, что это помогает.

+0

Да, это было очень полезно для ускорения кода. Я проверил ссылку, она включает в себя расчет эффектов на среднем уровне, в то время как код, приведенный выше, предназначен для расчета их на отдельном уровне наблюдения. – Nan

0

Одна из причин, по которой ваш код работает медленно, состоит в том, что вы не предварительно определили матрицу marg_effects[i, j]. Поэтому каждый прогон должен добавить новую строку в матрицу, которая очень эффективно вычисляется. Сначала определение матрицы должно привести к более быстрому времени работы:

n = nrow(dpcp) 
marg_effects <- matrix(nrow = n, ncol = 1000) 
for (i in 1: n) { 
    for (j in 1: 1000) { 
     marg_effects[i, j] = (m4[j, 1] * dpcp[i, ] $x1) + (m4[j, 2] * dpcp[i, ] $x2)+ (m4[j, 3] * dpcp[i, ] $x3) + (m4[j, 4] * dpcp[i, ] $x4) 
    } 
} 
Смежные вопросы