2012-06-08 12 views
5

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

#create simulated data set with sales, and date 
sales <- rnorm(1000, mean = 1000, sd = 40) 
dates <- seq(from = 14610, to = 15609) 
data <- cbind(sales, dates) 

#regression with months 
model <- lm(sales ~ months(dates)) 
summary(model) 

मैं अवरोधन लेबल चाहते हैं वास्तविक महीने वे का उल्लेख दिखाने के लिए ... वर्तमान में मेरे उत्पादन इस तरह दिखता है:

    Estimate Std. Error t value Pr(>|t|)  
(Intercept)  999.1934  1.2673 788.432 <2e-16 *** 
months(dates).L -4.9537  4.5689 -1.084 0.2785  
months(dates).Q -6.4931  4.4211 -1.469 0.1422  
months(dates).C -5.5078  4.4180 -1.247 0.2128  
months(dates)^4 2.3713  4.4864 0.529 0.5972  
months(dates)^5 -1.7749  4.4605 -0.398 0.6908  
months(dates)^6 1.5774  4.4555 0.354 0.7234  
months(dates)^7 -10.9954  4.4511 -2.470 0.0137 * 
months(dates)^8 -0.9627  4.4032 -0.219 0.8270  
months(dates)^9 1.8847  4.2996 0.438 0.6612  
months(dates)^10 -8.5990  4.1776 -2.058 0.0398 * 
months(dates)^11 7.8436  4.1292 1.900 0.0578 . 

अग्रिम धन्यवाद, --JT

उत्तर

6
समस्या आपके पास

कि आर एक आदेश दिया कारक पैदा कर दी है और विरोधाभासों एक आदेश दिया कारक के लिए उत्पादन एक बहुपद विरोधाभासों (.L रेखीय,, .C घन और .^n है .Q द्विघात है एन-वें क्रम बहुपद है । यह एक कारक के रूप में परिभाषित करने के लिए महीने जनवरी को प्रथम स्तर सेट और मॉडल तो फिट बेहतर हो सकता है।

एक अंग्रेजी स्थान में है, तो हम month.name या month.abb स्थिरांक के रूप में

इस प्रकार का उपयोग कर सकते हैं

इससे

> head(dat) 
     sales  dates month 
1 1054.8383 2010-01-01 January 
2 977.4121 2010-01-02 January 
3 1014.5251 2010-01-03 January 
4 1025.3145 2010-01-04 January 
5 1016.1707 2010-01-05 January 
6 995.7550 2010-01-06 January 
> with(dat, levels(month)) 
[1] "January" "February" "March"  "April"  "May"  
[6] "June"  "July"  "August" "September" "October" 
[11] "November" "December" 

नोट के स्तर के क्रम वर्णमाला के क्रम के बजाय एक तार्किक में है। यदि आप किसी भी अंग्रेजी लोकेल में नहीं हैं तो "%B" का आउटपुट आपकी स्थानीय भाषा या सम्मेलन में महीने का नाम होगा। इसके बाद आपको उपरोक्त कोड में levels तर्क के लिए एक वर्ण वेक्टर के रूप में सही स्तर प्रदान करने की आवश्यकता होगी।

इस डेटा सेट में तो मॉडल फिट करने के लिए इस्तेमाल किया जा सकता है और हम और अधिक सार्थक गुणांक नाम

> mod <- lm(sales ~ month, data = dat) 
> summary(mod) 

Call: 
lm(formula = sales ~ month, data = dat) 

Residuals: 
    Min  1Q Median  3Q  Max 
-140.333 -24.551 0.108 28.102 134.349 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept) 1001.7034  4.1567 240.983 <2e-16 *** 
monthFebruary -8.3618  6.0153 -1.390 0.165  
monthMarch  -0.5347  5.8785 -0.091 0.928  
monthApril  -7.5618  5.9273 -1.276 0.202  
monthMay   -2.2961  5.8785 -0.391 0.696  
monthJune   3.5091  5.9273 0.592 0.554  
monthJuly  -4.9975  5.8785 -0.850 0.395  
monthAugust  -0.3558  5.8785 -0.061 0.952  
monthSeptember 3.7597  5.9970 0.627 0.531  
monthOctober  -2.5948  6.5724 -0.395 0.693  
monthNovember -10.5670  6.6378 -1.592 0.112  
monthDecember -6.9064  6.5724 -1.051 0.294  
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 40.09 on 988 degrees of freedom 
Multiple R-squared: 0.01173, Adjusted R-squared: 0.0007317 
F-statistic: 1.066 on 11 and 988 DF, p-value: 0.3854 

ऊपर में मिलता है, ध्यान दें कि जनवरी प्रथम स्तर है, इसलिए इसके मतलब (Intercept) अनुमान और अन्य है अनुमान जनवरी के मतलब से विचलन हैं। मॉडल का एक वैकल्पिक parameterisation अवरोधन को दबाने के लिए है:

> mod2 <- lm(sales ~ month - 1, data = dat) 
> summary(mod2) 

Call: 
lm(formula = sales ~ month - 1, data = dat) 

Residuals: 
    Min  1Q Median  3Q  Max 
-140.333 -24.551 0.108 28.102 134.349 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
monthJanuary 1001.703  4.157 241.0 <2e-16 *** 
monthFebruary 993.342  4.348 228.5 <2e-16 *** 
monthMarch  1001.169  4.157 240.9 <2e-16 *** 
monthApril  994.142  4.225 235.3 <2e-16 *** 
monthMay  999.407  4.157 240.4 <2e-16 *** 
monthJune  1005.213  4.225 237.9 <2e-16 *** 
monthJuly  996.706  4.157 239.8 <2e-16 *** 
monthAugust 1001.348  4.157 240.9 <2e-16 *** 
monthSeptember 1005.463  4.323 232.6 <2e-16 *** 
monthOctober 999.109  5.091 196.3 <2e-16 *** 
monthNovember 991.136  5.175 191.5 <2e-16 *** 
monthDecember 994.797  5.091 195.4 <2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 40.09 on 988 degrees of freedom 
Multiple R-squared: 0.9984, Adjusted R-squared: 0.9984 
F-statistic: 5.175e+04 on 12 and 988 DF, p-value: < 2.2e-16 

अब अनुमान परिकल्पना के हैं मासिक साधन और टी-परीक्षण की हैं कि व्यक्ति मासिक साधन हैं शून्य (0)।

+0

फिर से धन्यवाद ... मैं सोच रहा था कि क्या .एलसी और .Q थे। – JimmyT

2

एक महीना चर बनाएँ जो एक कारक है, और आर स्वचालित रूप से सुंदर नाम बनाएगा।

sales <- rnorm(1000, mean = 1000, sd = 40) 
dates <- as.Date(seq(from = 14610, to = 15609),origin='1970-01-01') 
data <- data.frame(sales, dates) 
data$months=as.factor(months(dates)) 

model <- lm(sales ~ months,data=data) 
summary(model) 

यह स्वचालित रूप से विपरीत माह अप्रैल उठाता है, लेकिन आप contrasts साथ बदल सकते हैं।

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept)  1001.3989  4.2880 233.535 <2e-16 *** 
monthsAugust  6.8982  6.0150 1.147 0.2517  
monthsDecember -6.0561  6.7140 -0.902 0.3673  
monthsFebruary -1.3977  6.1527 -0.227 0.8203  
monthsJanuary  -3.2086  6.0150 -0.533 0.5939  
monthsJuly  -10.0742  6.0150 -1.675 0.0943 . 
monthsJune  -3.3393  6.0641 -0.551 0.5820  
monthsMarch  0.3159  6.0150 0.053 0.9581  
monthsMay   -0.1448  6.0150 -0.024 0.9808  
monthsNovember  3.4901  6.7799 0.515 0.6068  
monthsOctober  3.2082  6.7140 0.478 0.6329  
monthsSeptember -7.3039  6.1343 -1.191 0.2341  
+0

धन्यवाद, बिल्कुल सही! – JimmyT

संबंधित मुद्दे