Я работаю над анализом сравнительно большой панели с 18 годами и 88 лицами, использующими пакет plm
в R
.
Среди других анализов я хотел бы рассчитать оценку случайного эффектамодель, но я получил эту ошибку:
Error in solve.default(crossprod(ZBeta)) :
system is computationally singular: reciprocal condition number = 3.27049e-18
Теперь я понимаю, что это связано с тем, что в вычислительном отношении R рассматривает очень маленькие числа как ноль.Это делает невозможным вычисление обратной матрицы ковариации.В других пакетах и функциях можно установить значение допуска, которое не позволяет R приблизить определенный порядок величины к нулю.Например, в моем случае я мог бы указать tol=1e-19
, чтобы решить мою проблему, но, очевидно, plm
не принимает опцию tol
.
Может кто-нибудь предложить любую другую команду, чтобы установить больший допуск для этогопакет?
traceback()
6: solve.default(crossprod(ZBeta))
5: solve(crossprod(ZBeta))
4: ercomp.formula(formula, data, effect, method = random.method,
models = random.models, dfcor = random.dfcor)
3: ercomp(formula, data, effect, method = random.method, models = random.models,
dfcor = random.dfcor)
2: plm.fit(formula, data, model, effect, random.method, random.models,
random.dfcor, inst.method)
1: plm(log(tot_events + 1) ~ var_log, data = pdata_ctrls_num, model = "random",
na.action = na.omit)
РЕДАКТИРОВАТЬ :
Я наконец обошел проблему, изменив random.method
со значения по умолчанию "swar"
на "walhus"
.
Возможно, другой возможностью было бы настроить параметр restrict.matrix
таким образом, чтобы избежать таких малых количеств, но я не уверен в этом.
Это просто обходной путь, ябыл бы счастлив, если бы у меня была возможность изменить настройки допуска.