2014-08-27 9 views
22

मैं एक चर में भिन्नता को तोड़ने के लिए पांडस डेटाफ्रेम का उपयोग करना चाहता हूं।पायदान में एनोवा पेंडस डेटाफ्रेम का उपयोग आँकड़े के साथ या scipy के साथ?

उदाहरण के लिए, यदि मेरे पास 'डिग्री' नामक एक कॉलम है, और मैंने इसे विभिन्न तिथियों, शहरों और रात बनाम दिन के लिए अनुक्रमित किया है, तो मैं यह जानना चाहता हूं कि इस श्रृंखला में भिन्नता का क्या अंश आ रहा है पार-अनुभागीय शहर विविधता, समय श्रृंखला भिन्नता से कितना आ रहा है, और रात बनाम दिन से कितना आ रहा है।

स्टाटा में मैं निश्चित प्रभावों का उपयोग करता हूं और आर^2 को देखता हूं। उम्मीद है कि मेरा सवाल समझ में आता है।

असल में, मैं जो करना चाहता हूं, उसे तीन अन्य स्तंभों द्वारा "डिग्री" का एनोवा टूटना मिल गया है।

+2

आप मैं scipy या figuresmodels में देखना चाहता हूँ (मैंने अभी उन टैग्स को जोड़ा, अनुमोदन लंबित) – JohnE

+1

संक्षेप में, आंकड़े मॉडल स्टैट के सांख्यिकीय भागों के समान हैं (जबकि पांडा डेटा प्रबंधन भाग है)। – JohnE

+0

कुछ और विशिष्ट :)? – robertevansanders

उत्तर

14

मैं उन्हें परीक्षण करने के लिए एक प्रत्यक्ष तुलना की स्थापना में पाया गया कि उनकी मान्यताओं differ slightly कर सकते हैं, एक सांख्यिकीविद् से एक संकेत मिला है, और यहाँ एक पांडा dataframe मिलान आर के परिणामों पर एनोवा का एक उदाहरण है:

import pandas as pd 
import statsmodels.api as sm 
from statsmodels.formula.api import ols 


# R code on R sample dataset 

#> anova(with(ChickWeight, lm(weight ~ Time + Diet))) 
#Analysis of Variance Table 
# 
#Response: weight 
#   Df Sum Sq Mean Sq F value Pr(>F) 
#Time  1 2042344 2042344 1576.460 < 2.2e-16 *** 
#Diet  3 129876 43292 33.417 < 2.2e-16 *** 
#Residuals 573 742336 1296 
#write.csv(file='ChickWeight.csv', x=ChickWeight, row.names=F) 

cw = pd.read_csv('ChickWeight.csv') 

cw_lm=ols('weight ~ Time + C(Diet)', data=cw).fit() #Specify C for Categorical 
print(sm.stats.anova_lm(cw_lm, typ=2)) 
#     sum_sq df   F   PR(>F) 
#C(Diet) 129876.056995 3 33.416570 6.473189e-20 
#Time  2016357.148493 1 1556.400956 1.803038e-165 
#Residual 742336.119560 573   NaN   NaN 
संबंधित मुद्दे