[r] आर में मॉडल मैट्रिक्स में एक फैक्टर के सभी स्तर आर


Answers

(खुद को रिडीम करने का प्रयास कर रहा है ...) @ फ़ैबियंस पर जेरेड की टिप्पणी के जवाब में इसे स्वचालित करने के बारे में उत्तर दें, ध्यान दें कि आपको आपूर्ति करने की आवश्यकता है, इसके विपरीत विपरीत मैट्रिक्स की एक नामांकित सूची है। contrasts() एक वेक्टर / कारक लेता है और इससे विरोधाभास मैट्रिक्स उत्पन्न करता है। इसके लिए हम अपने डेटा सेट में प्रत्येक कारक पर contrasts() चलाने के लिए lapply() का उपयोग कर सकते हैं, उदाहरण के लिए testFrame उदाहरण प्रदान किया गया है:

> lapply(testFrame[,4:5], contrasts, contrasts = FALSE)
$Fourth
        Alice Bob Charlie David
Alice       1   0       0     0
Bob         0   1       0     0
Charlie     0   0       1     0
David       0   0       0     1

$Fifth
        Edward Frank Georgia Hank Isaac
Edward       1     0       0    0     0
Frank        0     1       0    0     0
Georgia      0     0       1    0     0
Hank         0     0       0    1     0
Isaac        0     0       0    0     1

@fabians उत्तर में अच्छी तरह से कौन सा स्लॉट जवाब:

model.matrix(~ ., data=testFrame, 
             contrasts.arg = lapply(testFrame[,4:5], contrasts, contrasts=FALSE))
Question

मेरे पास एक data.frame है। data.frame जैसा कि नीचे देखा गया संख्यात्मक और कारक चर शामिल है।

testFrame <- data.frame(First=sample(1:10, 20, replace=T),
           Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
           Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
           Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))

मैं एक matrix बनाना चाहता हूं जो कारक में डमी चर निर्दिष्ट करता है और अकेले संख्यात्मक चर को छोड़ देता है।

model.matrix(~ First + Second + Third + Fourth + Fifth, data=testFrame)

जैसा कि lm चलने की उम्मीद है, यह प्रत्येक स्तर के एक स्तर को संदर्भ स्तर के रूप में छोड़ देता है। हालांकि, मैं सभी कारकों के प्रत्येक स्तर के लिए एक डमी / सूचक चर के साथ एक matrix बनाना चाहता हूं। मैं glmnet लिए इस मैट्रिक्स का निर्माण कर रहा glmnet इसलिए मैं glmnet के बारे में चिंतित नहीं हूं।

क्या model.matrix को कारक के हर स्तर के लिए डमी बनाने का कोई तरीका है?




मैं वर्तमान में लासो मॉडल और glmnet::cv.glmnet() , model.matrix() और Matrix::sparse.model.matrix() (उच्च आयाम मैट्रिक्स के लिए, model.matrix का उपयोग करके model.matrix रहा model.matrix , हमारे समय को मारने के अनुसार glmnet लेखक।)।

@fabians और @ गैविन के उत्तर के समान जवाब पाने के लिए बस साझा करना एक साफ कोडिंग है। इस बीच, @ asdf123 ने एक और पैकेज library('CatEncoders') भी पेश की।

> require('useful')
> # always use all levels
> build.x(First ~ Second + Fourth + Fifth, data = testFrame, contrasts = FALSE)
> 
> # just use all levels for Fourth
> build.x(First ~ Second + Fourth + Fifth, data = testFrame, contrasts = c(Fourth = FALSE, Fifth = TRUE))

स्रोत: सभी के लिए आर: उन्नत Analytics और ग्राफिक्स (पृष्ठ 273)




आर पैकेज 'CatEncoders' का उपयोग करना

library(CatEncoders)
testFrame <- data.frame(First=sample(1:10, 20, replace=T),
           Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
           Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
           Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))

fit <- OneHotEncoder.fit(testFrame)

z <- transform(fit,testFrame,sparse=TRUE) # give the sparse output
z <- transform(fit,testFrame,sparse=FALSE) # give the dense output



caret ने 2 लाइनों के साथ इसे प्राप्त करने के लिए एक अच्छा फ़ंक्शन dummyVars लागू किया:

library(caret) dmy <- dummyVars(" ~ .", data = testFrame) testFrame2 <- data.frame(predict(dmy, newdata = testFrame))

अंतिम कॉलम जांचना:

colnames(testFrame2)

"First"  "Second"         "Third"          "Fourth.Alice"   "Fourth.Bob"     "Fourth.Charlie" "Fourth.David"   "Fifth.Edward"   "Fifth.Frank"   "Fifth.Georgia"  "Fifth.Hank"     "Fifth.Isaac"   

यहां सबसे अच्छा बिंदु यह है कि आपको मूल डेटा फ्रेम मिलता है, साथ ही डमी वैरिएबल में परिवर्तन के लिए इस्तेमाल किए गए मूल को छोड़ दिया जाता है।

अधिक जानकारी: http://amunategui.github.io/dummyVar-Walkthrough/




Links