使用lm、glm和plm等函數進行回歸估計,或是使用cast等函數進行數據重塑的時候,都要用到一類特殊的對象:formula。回歸模型的表達式就是一個formula對象。

f <- formula(y~x+z)
f <- as.formula(y~x+z)
f <- y~x+z
#以上三行代碼完全等價,創建的都是一個formula對象

y~x+z是一個簡單的formula。~和+是formula中的運算符,但它們與人們通常理解中的數學運算符相去甚遠。

以下是formula中運算符的含義:

  • ~ :~連接公式兩側,~的左側是因變數,右側是自變數。
  • + :模型中不同的項用+分隔。注意R語言中默認表達式帶常數項,因此估計 y=eta_{0} +eta_{1}x 只需要寫y~x。
  • - :-表示從模型中移除某一項,y~x-1表示從模型中移除常數項,估計的是一個不帶截距項的過原點的回歸方程。此外,y~x+0或y~0+x也可以表示不帶截距項的回歸方程。
  • ::冒號在formula中表示交互項
  • * :*不表示乘法, a*ba+b+a:b 是等價的, (a+b+c)*(a+b+c)a+b+c+a:b+b:c+c:a 等價
  • ^ : (a+b) ^2與 (a+b)*(a+b) 等價,所以 a ^2在formula中並不是 a 的平方的意思

如果想要在表達式中加入數學運算符,應該怎麼辦呢?對某一變數取對數,可以直接寫log(y)~log(x),這一表達式的含義就是估計 log(y)=eta_{1}log(x)+eta_{0} ;自然指數同樣也可以直接表示為exp();但如果想要表示加減乘除和平方之類,需要用到I()這個運算符。(←是大寫的i不是小寫的L)

y~x+I(z^2)的含義: y=eta_{0} +eta_{1}x+eta_{2}z^2

y~x+z^2的含義: y=eta_{0} +eta_{1}x+eta_{2}z (因為z沒法和自己交互)

那麼,y~x+w+z和y~x+I(w+z)有什麼區別呢?

y~x+w+z的含義: y=eta_{0} +eta_{1}x+eta_{2}w+eta_{3}z

y~x+I(w+z)的含義: y=eta_{0} +eta_{1}x+eta_{2}(w+z)

可以看到,第二個式子將w+z作為一個整體估計這一變數的參數。

如果要估計動態面板模型,在plm包中,滯後變數(lagged variable)用運算符lag()表示,如lag(x,1)表示x滯後一期的滯後變數,lag(log(z),2)表示log(z)滯後兩期的滯後變數;差分項則使用運算符diff()表示。正如我們使用formula和as.formula函數創建formula對象一樣,dynformula函數用於創建動態面板模型的表達式,在這裡不詳細展開。

推薦閱讀:

相关文章