2012-07-15 12 views
22

मैं कारण है कि मैं एक साधारण OLS के लिए थोड़ा अलग परिणाम मिल रहे हैं, कि क्या मैं R में या कि क्या मैं अजगर में statsmodels का उपयोग करने के लिए प्रतिगमन panda's experimental rpy interface के माध्यम से जाने के आधार पर यकीन नहीं है statsmodels।अंतर OLS और अनुसंधान के एल एम

Call: 
lm(formula = demoq$num_rx ~ demoq$ridageyr) 

Residuals: 
    Min  1Q Median  3Q  Max 
-2.9086 -0.6908 -0.2940 0.1358 15.7003 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept) -0.1358216 0.0241399 -5.626 1.89e-08 *** 
demoq$ridageyr 0.0358161 0.0006232 57.469 < 2e-16 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 1.545 on 9963 degrees of freedom 
Multiple R-squared: 0.249, Adjusted R-squared: 0.2489 
F-statistic: 3303 on 1 and 9963 DF, p-value: < 2.2e-16 

statsmodels.api का उपयोग OLS करने के लिए:

import statsmodels.api as sm 
results = sm.OLS(demoq.num_rx, demoq.ridageyr).fit() 
results.summary() 

परिणाम हैं आर के उत्पादन के समान नहीं है लेकिन एक ही:

import pandas 
from rpy2.robjects import r 

from functools import partial 

loadcsv = partial(pandas.DataFrame.from_csv, 
        index_col="seqn", parse_dates=False) 

demoq = loadcsv("csv/DEMO.csv") 
rxq = loadcsv("csv/quest/RXQ_RX.csv") 

num_rx = {} 
for seqn, num in rxq.rxd295.iteritems(): 
    try: 
     val = int(num) 
    except ValueError: 
     val = 0 
    num_rx[seqn] = val 

series = pandas.Series(num_rx, name="num_rx") 
demoq = demoq.join(series) 

import pandas.rpy.common as com 
df = com.convert_to_r_dataframe(demoq) 
r.assign("demoq", df) 
r('lmout <- lm(demoq$num_rx ~ demoq$ridageyr)') # run the regression 
r('print(summary(lmout))') # print from R 

R से, मैं निम्नलिखित सारांश प्राप्त

OLS Regression Results 
Adj. R-squared: 0.247 
Log-Likelihood: -18488. 
No. Observations: 9965 AIC: 3.698e+04 
Df Residuals: 9964 BIC: 3.698e+04 
      coef std err t  P>|t| [95.0% Conf. Int.] 
ridageyr  0.0331 0.000 82.787 0.000  0.032 0.034 

इंस्टॉल प्रक्रिया थोड़ा बोझिल है। लेकिन, आईपीथॉन नोटबुकhere है, जो असंगतता को पुन: उत्पन्न कर सकता है। जैसे अजगर अपनी अभिव्यक्ति के लिए डिफ़ॉल्ट रूप से एक अवरोधन नहीं जोड़ता है

उत्तर

16

लग रहा है, जबकि आर जब आप सूत्र इंटरफ़ेस का उपयोग करता है ..

इसका मतलब यह है कि आप फिट दो विभिन्न मॉडलों किया था। अवरोधन को बाहर करने के

lm(y ~ x - 1, data) 
आर में

प्रयास करें, या अपने मामले में और कुछ और अधिक मानक संकेत

lm(num_rx ~ ridageyr - 1, data=demoq) 
+0

अच्छी कॉल, धन्यवाद। कुछ मिनटों में स्वीकार करेंगे। –

+3

आवश्यकतानुसार दस्तावेज़ीकरण कीड़े बढ़ाएं? – smci

+0

प्रलेखन को क्रिया के साथ अद्यतन किया गया था: जब तक आप सूत्रों का उपयोग नहीं कर रहे हैं तब तक मॉडल द्वारा कोई निरंतर जोड़ा नहीं जाता है। – gliptak

5

ध्यान दें कि आप अभी भी उपयोग कर सकते हैं olsstatsmodels.formula.api से साथ:

from statsmodels.formula.api import ols 

results = ols('num_rx ~ ridageyr', demoq).fit() 
results.summary() 

मैं लगता है कि यह फॉर्मूला अभिव्यक्ति का अनुवाद करने के लिए बैकएंड में patsy का उपयोग करता है, और अवरोध स्वचालित रूप से जोड़ा जाता है।

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