[英]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)
不起作用,因為a
是factor
變量,而不是公式或術語對象
來自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.