R Language
सूत्र
खोज…
सूत्र की मूल बातें
R में सांख्यिकीय कार्य तथाकथित विल्किंसन-रोजर्स सूत्र संकेतन 1 का भारी उपयोग करते हैं।
जब लीनियर रिग्रेशन के लिए lm
जैसे मॉडल फ़ंक्शन चल रहे हैं, तो उन्हें एक formula
आवश्यकता है। यह formula
निर्दिष्ट करता है कि कौन सा प्रतिगमन गुणांक अनुमानित किया जाएगा।
my_formula1 <- formula(mpg ~ wt)
class(my_formula1)
# gives "formula"
mod1 <- lm(my_formula1, data = mtcars)
coef(mod1)
# gives (Intercept) wt
# 37.285126 -5.344472
~
(LHS) के बाईं ओर निर्भर चर निर्दिष्ट किया जाता है, जबकि दाहिने हाथ की तरफ (RHS) में स्वतंत्र चर होते हैं। तकनीकी रूप से ऊपर दिया गया formula
कॉल निरर्थक है क्योंकि टिल्ड-ऑपरेटर एक इन्फिक्स फ़ंक्शन है जो फॉर्मूला वर्ग के साथ एक वस्तु देता है:
form <- mpg ~ wt
class(form)
#[1] "formula"
~
से अधिक formula
फ़ंक्शन का लाभ यह है कि यह मूल्यांकन के लिए एक वातावरण को भी निर्दिष्ट करने की अनुमति देता है:
form_mt <- formula(mpg ~ wt, env = mtcars)
इस मामले में, आउटपुट दिखाता है कि wt
लिए एक प्रतिगमन गुणांक अनुमानित है, साथ ही (प्रति डिफ़ॉल्ट) एक अवरोधन पैरामीटर। formula
में 0
या -1
शामिल करके अवरोधन को बाहर रखा जा सकता है।
coef(lm(mpg ~ 0 + wt, data = mtcars))
coef(lm(mpg ~ wt -1, data = mtcars))
b
a:b
को formula
a
और b
जोड़ा जा सकता formula
:
coef(lm(mpg ~ wt:vs, data = mtcars))
जैसा कि यह (एक सांख्यिकीय दृष्टिकोण से) आमतौर पर सलाह दी जाती है कि मुख्य प्रभावों के बिना मॉडल में बातचीत न हो, भोली दृष्टिकोण formula
को a + b + a:b
लिए formula
का विस्तार करना होगा। यह काम करता है लेकिन a*b
लिखकर सरल बनाया जा सकता है, जहां *
ऑपरेटर फैक्टर क्रॉसिंग (जब दो कारक कॉलम के बीच) या गुणन को इंगित करता है जब एक या दोनों कॉलम 'न्यूमेरिक' होते हैं:
coef(lm(mpg ~ wt*vs, data = mtcars))
*
नोटेशन के उपयोग से सभी निचले क्रम के प्रभावों को शामिल करने के लिए एक शब्द का विस्तार होता है, जैसे:
coef(lm(mpg ~ wt*vs*hp, data = mtcars))
अवरोधन के अलावा, 7 प्रतिगमन गुणांक देगा। तीन-तरफ़ा बातचीत के लिए एक, दो-तरफ़ा बातचीत के लिए तीन और मुख्य प्रभावों के लिए तीन।
यदि कोई चाहता है, उदाहरण के लिए, तीन-तरफ़ा बातचीत को बाहर करने के लिए, लेकिन सभी दो-तरफ़ा बातचीत को बनाए रखें तो दो आशुलिपि हैं। सबसे पहले, का उपयोग कर -
हम किसी विशेष अवधि घटाना कर सकते हैं:
coef(lm(mpg ~ wt*vs*hp - wt:vs:hp, data = mtcars))
या, हम यह निर्दिष्ट करने के लिए ^
नोटेशन का उपयोग कर सकते हैं कि हमें किस स्तर की सहभागिता की आवश्यकता है:
coef(lm(mpg ~ (wt + vs + hp) ^ 2, data = mtcars))
उन दो सूत्र विनिर्देशों को एक ही मॉडल मैट्रिक्स बनाना चाहिए।
अंत में, .
मुख्य प्रभावों के रूप में सभी उपलब्ध चर का उपयोग करने के लिए आशुलिपि है। इस स्थिति में, data
तर्क का उपयोग उपलब्ध चरों को प्राप्त करने के लिए किया जाता है (जो कि LHS पर नहीं हैं)। इसलिए:
coef(lm(mpg ~ ., data = mtcars))
इंटरसेप्ट और 10 स्वतंत्र चर के लिए गुणांक देता है। यह नोटेशन अक्सर मशीन लर्निंग पैकेज में उपयोग किया जाता है, जहां कोई भविष्यवाणी या वर्गीकरण के लिए सभी चर का उपयोग करना चाहेगा। नोट का अर्थ है कि .
संदर्भ पर निर्भर करता है (उदाहरण के लिए देखें ?update.formula
एक अलग अर्थ के लिए ?update.formula
)।
- जीएन विल्किंसन और सीई रोजर्स। रॉयल स्टैटिस्टिकल सोसाइटी का जर्नल। सीरीज़ (एप्लाइड स्टैटिस्टिक्स) वॉल्यूम। 22, नंबर 3 (1973), पीपी। 392-399
रैखिक, द्विघात और दूसरा क्रम सहभागिता नियम बनाएँ
y ~ .
: यहाँ .
मॉडल की फिटिंग में उपयोग किए जाने वाले डेटा फ्रेम में y
को छोड़कर सभी चर के रूप में व्याख्या की गई है। यह भविष्यवक्ता चर के रैखिक संयोजनों के बराबर है। उदाहरण के लिए y ~ var1 + var2 + var3+...+var15
y ~ . ^ 2
सभी रैखिक (मुख्य प्रभाव) और डेटा फ्रेम में चर के दूसरे क्रम बातचीत की शर्तें देगा। यह y ~ var1 + var2 + ...+var15 + var1:var2 + var1:var3 + var1:var4...and so on
y ~ var1 + var2 + ...+var15 + I(var1^2) + I(var2^2) + I(var3^2)...+I(var15^2)
: यहां I(var^2)
डेटा फ्रेम में एक चर का द्विघात बहुपद इंगित करता है।
y ~ poly(var1, degree = 2) + poly(var2, degree = 2)+...poly(var15, degree = 2)
या
y ~ poly(var1, var2, var3, ....var15, degree = 2)
उपरोक्त अभिव्यक्ति के बराबर होगी।
poly(var1, degree = 2)
var1 + I(var1^2)
बराबर है।
घन बहुपद प्राप्त करने के लिए, poly()
में degree = 3
उपयोग करें poly()
।
poly
बनाम I(var, 2)
का उपयोग करने में एक चेतावनी है, जो मॉडल को फिट करने के बाद है, उनमें से प्रत्येक अलग गुणांक का उत्पादन करेगा, लेकिन सज्जित मान बराबर हैं, क्योंकि वे एक ही मॉडल के विभिन्न मापदंडों का प्रतिनिधित्व करते हैं। यह उपयोग करने के लिए सिफारिश की है I(var, 2)
से अधिक poly()
सारांश प्रभाव में देखा से बचने के लिए poly()
।
सारांश में, रैखिक, द्विघात और दूसरे क्रम में बातचीत की शर्तें प्राप्त करने के लिए, आपके पास एक अभिव्यक्ति होगी
y ~ .^2 + I(var1^2) + I(var2^2)+...I(var15^2)
चार चर के लिए डेमो:
old <- reformulate( 'y ~ x1+x2+x3+x4' )
new <- reformulate( " y ~ .^2 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) ")
tmp <- .Call(stats:::C_updateform, old, new)
terms.formula(tmp, simplify = TRUE )
# ~y ~ x1 + x2 + x3 + x4 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) +
# x1:x2 + x1:x3 + x1:x4 + x2:x3 + x2:x4 + x3:x4
# attr(,"variables")
# list(~y, x1, x2, x3, x4, I(x1^2), I(x2^2), I(x3^2), I(x4^2))
# attr(,"factors")
# x1 x2 x3 x4 I(x1^2) I(x2^2) I(x3^2) I(x4^2) x1:x2 x1:x3 x1:x4 x2:x3 x2:x4 x3:x4
# ~y 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# x1 1 0 0 0 0 0 0 0 1 1 1 0 0 0
# x2 0 1 0 0 0 0 0 0 1 0 0 1 1 0
# x3 0 0 1 0 0 0 0 0 0 1 0 1 0 1
# x4 0 0 0 1 0 0 0 0 0 0 1 0 1 1
# I(x1^2) 0 0 0 0 1 0 0 0 0 0 0 0 0 0
# I(x2^2) 0 0 0 0 0 1 0 0 0 0 0 0 0 0
# I(x3^2) 0 0 0 0 0 0 1 0 0 0 0 0 0 0
# I(x4^2) 0 0 0 0 0 0 0 1 0 0 0 0 0 0
# attr(,"term.labels")
# [1] "x1" "x2" "x3" "x4" "I(x1^2)" "I(x2^2)" "I(x3^2)" "I(x4^2)"
# [9] "x1:x2" "x1:x3" "x1:x4" "x2:x3" "x2:x4" "x3:x4"
# attr(,"order")
# [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2
# attr(,"intercept")
# [1] 1
# attr(,"response")
# [1] 1
# attr(,".Environment")
# <environment: R_GlobalEnv>