#r #regression #plm
Вопрос:
Я пытаюсь построить регрессию с фиксированными эффектами с помощью пакета plm в R. Я использую данные панели на уровне страны с фиксированными эффектами за год и страну. Моя проблема касается 2 объясняющих переменных. Один — это член взаимодействия двух переменных, а другой-квадратный член одной из переменных.
модель в основном такова: y = x1 x1^2 x3 x1*x3 … xn , при этом все переменные представлены в виде журнала
Центральное место в модели занимает включение квадратного члена, но когда я запускаю регрессию, она всегда исключается из-за «особенностей», поскольку x1 и x1^2 явно коррелируют. Это означает, что регрессия работает, и я получаю оценки для своих переменных, только не для x1^2 и x1*x2. Как мне обойти это?
library(plm) fe_reglt;- plm(log(y) ~ log(x1) log(x2) log(x2^2) log(x1*x2) dummy, data = df, index = c("country", "year"), model = "within", effect = "twoways") summary(fe_reg) ´´´ #I have tried defining the interaction and squared terms as vectors, which helped with the #interaction term but not the squared term. df1.pdlt;- df1 %gt;% mutate_at(c('x1'), ~(scale(.) %gt;% as.vector)) df1.pdlt;- df1 %gt;% mutate_at(c('x2'), ~(scale(.) %gt;% as.vector)) ´´´ I am pretty new to R, so apologies if this not a very well structured question.
Ответ №1:
Вы только что нашли два свойства функции логарифма:
журнал(x^2) = 2 * журнал(x)
журнал(x*y) = журнал(x) журнал(y)
Тогда, очевидно, log(x) коллинеарен с 2*log(x), и одна из двух коллинеарных переменных исключается из оценки. То же самое для журнала(x*y) и журнала(x) журнала(y).
Таким образом, модель, которую вы хотите оценить, не поддается оценке методами линейной регрессии. Возможно, вам захочется выполнить преобразования данных, отличные от учета в журнале или исходных переменных.
См. Также воспроизводимый пример ниже, где я только что использовал log(x^2) = 2*log(x). Линейная зависимость может быть обнаружена, например, с помощью функции detect.lindep
из пакета plm
(см. Также ниже). Удаление коэффициентов из оценки также указывает на коллинеарные столбцы в матрице оценки модели. Иногда линейная зависимость появляется только после преобразований данных, выполняемых в функциях оценки (см. Пример преобразования внутри страницы справки ?detect.lindep
в разделе Пример).
library(plm) data("Grunfeld") pGrun lt;- pdata.frame(Grunfeld) pGrun$lvalue lt;- log(pGrun$value) # log(x) pGrun$lvalue2 lt;- log(pGrun$value^2) # log(x^2) == 2 * log(x) mod lt;- plm(inv ~ lvalue lvalue2 capital, data = pGrun, model = "within") summary(mod) #gt; Oneway (individual) effect Within Model #gt; #gt; Call: #gt; plm(formula = inv ~ lvalue lvalue2 capital, data = pGrun, #gt; model = "within") #gt; #gt; Balanced Panel: n = 10, T = 20, N = 200 #gt; #gt; Residuals: #gt; Min. 1st Qu. Median 3rd Qu. Max. #gt; -186.62916 -20.56311 -0.17669 20.66673 300.87714 #gt; #gt; Coefficients: (1 dropped because of singularities) #gt; Estimate Std. Error t-value Pr(gt;|t|) #gt; lvalue 30.979345 17.592730 1.7609 0.07988 . #gt; capital 0.360764 0.020078 17.9678 lt; 2e-16 *** #gt; --- #gt; Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 #gt; #gt; Total Sum of Squares: 2244400 #gt; Residual Sum of Squares: 751290 #gt; R-Squared: 0.66525 #gt; Adj. R-Squared: 0.64567 #gt; F-statistic: 186.81 on 2 and 188 DF, p-value: lt; 2.22e-16 detect.lindep(mod) # run on the model #gt; [1] "Suspicious column number(s): 1, 2" #gt; [1] "Suspicious column name(s): lvalue, lvalue2" detect.lindep(pGrun) # run on the data #gt; [1] "Suspicious column number(s): 6, 7" #gt; [1] "Suspicious column name(s): lvalue, lvalue2"
Комментарии:
1. журнал(x*y) также эквивалентен журналу(x) журналу(y), который является другим термином, который отбрасывается.
2. О, да, конечно, я пропустил это! Спасибо! Я отредактировал свой ответ.