簡體   English   中英

R代碼運算符:〜0 + a表示什么?

[英]R tilde operator: What does ~0+a means?

我已經看到如何在公式中使用〜運算符。 例如, y~x表示:y分布為x。

但是我真的很困惑這個代碼中的~0+a手段:

require(limma)
a = factor(1:3)
model.matrix(~0+a)

為什么只有model.matrix(a)不起作用? 為什么model.matrix(~a)的結果與model.matrix(~0+a) 最后〜操作符的含義是什么?

~創建一個公式 - 它將公式的右側和左側分開

?`~`

Tilde用於分離模型公式中的左側和右側

引用公式的幫助

通過例如lm和glm函數擬合的模型以緊湊的符號形式指定。 〜運算符是這種模型形成的基礎。 形式為y~exode的表達式被解釋為響應y由由模型符號指定的線性預測器建模的規范。 這樣的模型由一系列由+運算符分隔的術語組成。 術語本身由變量和因子名稱組成,由運算符分隔。 這個術語被解釋為該術語中出現的所有變量和因素的相互作用。

除了+和:之外,許多其他運算符在模型公式中也很有用。 *運算符表示因子交叉:a * b被解釋為a + b + a:b。 ^運算符表示交叉到指定的度數。 例如(a + b + c)^ 2與(a + b + c)*(a + b + c)相同,后者又擴展為包含a,b和c及其第二個的主效應的公式訂單交互。 %in%運算符表示其左側的術語嵌套在右側的術語中。 例如,a + b%in%a擴展為公式a + a:b。 - 運算符刪除指定的項,因此(a + b + c)^ 2 - a:b與a + b + c + b:c + a:c相同。 它還可用於刪除截距項:當擬合線性模型時,y~x - 1指定通過原點的直線。 沒有截距的模型也可以指定為y~x + 0或y~0 + x。

所以關於~a+0具體問題

  • 您創建沒有截距的模型矩陣。 作為a因素, model.matrix(~a)將返回一個攔截列,即a1 (你需要n-1指標才能完全指定n類)

每個功能的幫助文件都寫得很好,詳細且易於查找!

為什么沒有model.matrix(a)工作

model.matrix(a)不起作用,因為afactor變量,而不是公式或術語對象

來自model.matrix的幫助

對象一個適當類的對象。 對於默認方法,模型公式或術語對象。

R正在尋找一個特定的對象類,通過傳遞一個公式~a你傳遞一個類formula的對象。 model.matrix(terms(~a))也可以工作,(傳遞對應於公式的術語對象~a


一般說明

@BenBolker在評論中有用地指出,這是威爾金森 - 羅傑斯符號的修改版本。

R簡介中有一個很好的描述。

在閱讀了幾本手冊之后,我最近對model.matrix(~0+x)的含義感到困惑,我發現這本書精彩

在數學中, 0+a等於a ,寫一個像0+a這樣的術語非常奇怪。 然而,我們在這里處理線性模型:一個簡單的高中方程,如y=ax+b ,它揭示了預測變量(x)和觀測值(y)之間的關系。

因此我們可以將~0+x或同等~x+0視為形式的等式: y=ax+b 通過加0我們強制b為零,這意味着我們正在尋找一條通過原點的線(沒有截距)。 如果我們指出像~x+1或只是~x ,那么擬合方程可能包含非零項b 同樣,我們可以通過公式~x-1~-1+x ~x-1 ~-1+x來限制b ,這兩者都意味着:沒有截距(與我們通過負指數排除R中的行或列的方式相同)。 然而,像~x-2~x+3是沒有意義的。

感謝@mnel的有用評論,最后是什么原因使用~而不是= 在標准數學術語/符號體系中, y~x表示y等於x, y=x稍微弱一些。 當您擬合線性模型時,您並不是真的說y=x ,而是您可以將y建模為x的線性函數(例如, y = ax+b

為了回答部分問題,使用波浪號分隔模型公式中的左側和右側。 請參閱?"~"以獲取更多幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM