2011-11-08 43 views
37

我試圖讓我的頭繞着使用代字符運算符和相關函數。我的第一個問題是爲什麼I()需要用來指定算術運算符?例如,這些2繪出產生不同的結果(前者具有直線,而後者的預期曲線)在R公式中,爲什麼我必須使用I()函數的冪項,如y〜I(x^3)

x <- c(1:100) 
y <- seq(0.1,10,0.1) 

plot(y~x^3) 
plot(y~I(x^3)) 

進一步,下面的兩個曲線圖的也產生預期的結果

plot(x^3, y) 
plot(I(x^3), y) 

我的第二個問題是,或許我使用的例子太簡單了,但我不明白~應該在哪裏實際使用。

+8

對這個問題的任何優秀答案都會嚴重影響'?公式'中包含的內容。 – joran

+0

重複;我們應該關閉其中的一個,並使其他規範:[R線性迴歸公式中的大寫字母「I」是什麼意思?](http://stackoverflow.com/questions/24192428/capital-letter-i-in- r-linear-regression) – smci

回答

38

這裏的問題是如何解釋公式。在公式中,代字號將左手側和右手側分開。在公式中,^運算符用於構建交互作用,使得x = x^2 = x^3而不是可能期望的數學能力。如果您輸入了(x+y)^2,則R解釋程序將生成(爲了其自身良好的內部使用),而不是數學:x^2 +2xy +y^2,而是符號:x + y +x:y其中x:y是一個交互項。

?formula 

I()函數的作用是爲「as.is」,即你所期望的參數轉換。所以我(x^2)會返回一個向量,其值爲第二次方。

~應該被認爲是在迴歸函數中看到的「分佈爲」或「依賴於」。它意味着模型描述中的錯誤術語,通常將其標記爲「(截取)」,並且函數上下文和參數還可以進一步確定鏈接函數,例如log()或logit()。

在plot()函數中,它基本上顛倒了plot函數通常需要的通常的參數(x, y)的順序。寫了一個plot.formula方法,以便公式可以用作與R進行通信的更「數學」模式。在graphics::plot.formulacurve和'lattice'和'ggplot'函數中,它控制着多個因子或數值向量被顯示並且「切面」。

我後來知道~實際上是一箇中綴(或前綴)原始函數,它創建一個R'調用',它可以使用列表提取操作符來訪問。所有這些對於典型用戶來說都是隱藏的,但它可以是更多高級功能作者使用的工具。

「+」運算符的重載在下面的註釋中討論,也在繪圖軟件包中完成:ggplot2和gridExtra它在哪裏分離傳遞對象結果的函數,因此它作爲代理並作爲傳遞和分層運算符。具有公式方法的聚合函數使用「+」作爲「排列」和分組操作符。

+0

我已經讀過'?公式'(儘管從我的問題來看這並不明確)。在模型制定中,運營商的概念讓我困惑。例如,我完全不知道'+符號如何可能意味着除了將兩個值相加在一起 – ChrisW

+2

在迴歸函數中的一個公式中,您隱含地要求返回一組(估計)與(通常乘以)每個由「+」連接的項。 –

+3

@ChrisW'+'運算符在公式的上下文中被重載。這是爲了給配方規格更直觀的感覺。否則,迴歸調用看起來就像'lm(formula = formula(y.var,x.var1,x.var2))',這不太容易理解。 –

相關問題