R語言筆記.formula
使用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~x。
- - :-表示從模型中移除某一項,y~x-1表示從模型中移除常數項,估計的是一個不帶截距項的過原點的回歸方程。此外,y~x+0或y~0+x也可以表示不帶截距項的回歸方程。
- ::冒號在formula中表示交互項
- * :*不表示乘法, 與 是等價的, 與 等價
- ^ : ^2與 等價,所以 ^2在formula中並不是 的平方的意思
如果想要在表達式中加入數學運算符,應該怎麼辦呢?對某一變數取對數,可以直接寫log(y)~log(x),這一表達式的含義就是估計 ;自然指數同樣也可以直接表示為exp();但如果想要表示加減乘除和平方之類,需要用到I()這個運算符。(←是大寫的i不是小寫的L)
y~x+I(z^2)的含義:
y~x+z^2的含義: (因為z沒法和自己交互)那麼,y~x+w+z和y~x+I(w+z)有什麼區別呢?
y~x+w+z的含義:
y~x+I(w+z)的含義:可以看到,第二個式子將w+z作為一個整體估計這一變數的參數。
如果要估計動態面板模型,在plm包中,滯後變數(lagged variable)用運算符lag()表示,如lag(x,1)表示x滯後一期的滯後變數,lag(log(z),2)表示log(z)滯後兩期的滯後變數;差分項則使用運算符diff()表示。正如我們使用formula和as.formula函數創建formula對象一樣,dynformula函數用於創建動態面板模型的表達式,在這裡不詳細展開。
推薦閱讀: