आर में 100 चर के साथ एक रेखीय मॉडल सूत्र कैसे लिखें


22

क्या R के 100 मापदंडों वाले मॉडल पर रैखिक प्रतिगमन बनाने के लिए R में एक आसान तरीका है? मान लें कि हमारे पास 10 मानों के साथ एक वेक्टर वाई है और 10 कॉलम और 100 पंक्तियों के साथ एक डेटाफ्रेम एक्स है जो गणितीय संकेतन में मैं लिखूंगा Y = X[[1]] + X[[2]] + ... + X[[100]]। मैं आर सिंटैक्स में कुछ इसी तरह कैसे लिखूं?


1
क्या 100 या 1000 हैं? इसके अलावा, आपके पास सामान्य रूप से कॉलम वैरिएबल होंगे और पंक्तियाँ अवलोकनीय होंगी (ऐसा प्रतीत होता है कि यहाँ उलटा है)
मैक्रो

100 अतिरिक्त 0 एक टाइपो था
ईसाई

2
वास्तव में? क्या आप वास्तव में इसे करना चाहते हैं? मैं भविष्यवाणियों के रैखिक संयोजनों के बीच ओवरफिटिंग और सहसंबंध के बारे में चिंतित हूं। इतना ही नहीं, 100 भविष्यवक्ता लेकिन केवल 10 टिप्पणियों के साथ, आपके पास p>n और रैखिक प्रतिगमन बिल्कुल भी काम नहीं करने वाला है।
हारून - मोनिका

जवाबों:


29

इसे इस्तेमाल करे

df<-data.frame(y=rnorm(10),x1=rnorm(10),x2=rnorm(10))
lm(y~.,df)

4
और यदि आप चाहें, तो कहें, सभी दूसरे क्रम के इंटरैक्शन, आप लिख सकते हैं y ~ . + .^2। और इसी तरह।
लूत्ज प्रीचेल

3
और यदि आप केवल दूसरे क्रम के इंटरैक्शन में से कुछ चाहते हैं, तो ऐसा कुछ y ~ . + .:x1आपको प्रत्येक चर (छोड़कर x1) के इंटरैक्शन के साथ मिलेगा x1। और इसी तरह; तुम्हें नया तरीका मिल गया है।
लूत्ज प्रीचेल

21

शानदार जवाब!

मैं डिफ़ॉल्ट रूप से उस जोड़ने के लिए, बुला होगा formulaएक पर data.frameदूसरों पर पहले कॉलम वापसी करने के लिए एक अतिरिक्त सूत्र पैदा करता है।

तो @ danas.zuokas के जवाब के मामले में आप भी कर सकते हैं

lm(df)

जिसकी सही व्याख्या की गई है।


फिर भी, यह जवाब काम नहीं करता है यदि आप बातचीत के संदर्भ में मिश्रण करना चाहते हैं। आपका (+1) करता है।
gui11aume

6
मैं लगातार आश्चर्यचकित हूं कि अधिकांश Rऑपरेटरों ने कैसे ओवरलोड किया :) :)
मैक्रो

19

यदि प्रत्येक पंक्ति एक अवलोकन है और प्रत्येक स्तंभ एक भविष्यवक्ता है ताकि एक -length वेक्टर है और एक मैट्रिक्स है ( इस मामले में ), तो आप ऐसा कर सकते हैंn X n × p p = 100YnXn×pp=100

Z = as.data.frame(cbind(Y,X))
lm(Y ~ .,data=Z)

यदि अन्य कॉलम हैं जो आप भविष्यवाणियों के रूप में शामिल नहीं करना चाहते थे, तो आपको उन्हें Xइस ट्रिक का उपयोग करने से पहले निकालना होगा , या -उन्हें बाहर करने के लिए मॉडल फॉर्मूला का उपयोग करना होगा। उदाहरण के लिए, यदि आप 67 वें भविष्यवक्ता (जो कि संबंधित नाम है x67) को बाहर करना चाहते हैं , तो आप लिख सकते हैं

lm(Y ~ .-x67,data=Z)

इसके अलावा, यदि आप इंटरैक्शन आदि को शामिल करना चाहते हैं, तो आपको उन्हें मैन्युअल रूप से जोड़ना होगा (उदाहरण के लिए)

lm(Y ~ .+X[,1]*X[,2],data=Z)

या सुनिश्चित करें कि वे के कॉलम के रूप में दर्ज किए गए हैं X


19

तुम भी formulaऔर pasteकार्यों के संयोजन का उपयोग कर सकते हैं ।

सेटअप डेटा : Let कल्पना हम एक data.frame कि भविष्यवक्ता चर होते है है x1करने के लिए x100और हमारे निर्भर चर y, लेकिन वहाँ भी एक बाधा चर रहा है कि asdfasdf। साथ ही प्रेडिक्टर चर को एक क्रम में व्यवस्थित किया जाता है जैसे कि वे data.frame में सभी सन्निहित नहीं हैं।

Data <- data.frame(matrix(rnorm(102 * 200), ncol=102))
names(Data) <- c(paste("x", 1:50, sep=""), 
    "asdfasdf", "y", paste("x", 51:100, sep=""))

यह भी कल्पना करें कि आपके पास एक स्ट्रिंग है जिसमें भविष्यवक्ता चर के नाम हैं। इस स्थिति में, यह pasteफ़ंक्शन का उपयोग करके आसानी से बनाया जा सकता है , लेकिन अन्य स्थितियों में, grepया इस स्ट्रिंग को प्राप्त करने के लिए कुछ अन्य दृष्टिकोण का उपयोग किया जा सकता है।

PredictorVariables <- paste("x", 1:100, sep="")

दृष्टिकोण लागू करें : फिर हम निम्नानुसार एक सूत्र का निर्माण कर सकते हैं:

Formula <- formula(paste("y ~ ", 
     paste(PredictorVariables, collapse=" + ")))
lm(Formula, Data)
  • collapseतर्क आवेषण +भविष्यवक्ता चर के बीच
  • formulalmफ़ंक्शन के लिए उपयुक्त कक्षा सूत्र की एक वस्तु में स्ट्रिंग को कनवर्ट करता है।

आम तौर पर, मैं निम्नलिखित फ़ंक्शन का उपयोग नियमित रूप से करता हूं जब मैं एक वैरिएबल नाम के वेक्टर के रूप में एक भविष्यवक्ता चर की आपूर्ति करना चाहता हूं।

regression <- function(dv, ivs, data) {
    # run a linear model with text arguments for dv and ivs
    iv_string <- paste(ivs, collapse=" + ")
    regression_formula <- as.formula(paste(dv, iv_string, sep=" ~ "))
    lm(regression_formula, data)

}

उदाहरण के लिए,

regression("y", PredictorVariables, Data)

2
+1। मैं हर समय इस तकनीक का उपयोग करता हूं। कभी-कभी, हालाँकि, किसी चर में संग्रहीत सूत्र होने से समस्याएँ होती हैं। कॉल करने से पहले सूत्र का मूल्यांकन करने के लिए stackoverflow.com/a/7668846/210673 देखें । do.calllm
हारून - मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.