2014-09-05 33 views
1

我正在使用中的IPython statsmodels的普通最小二乘法(OLS)函數擬合的線性模型,其中一個協變量(城市)是一個多級分類效果:如何在使用statsmodels的ipython中聯合測試多級別分類效果?

結果= smf.ols(式=「Y 〜C(City)+ X * C(Group)「,data = s).fit();

(X是連續的,Group是二元分類變量)。

當我做results.summary()時,我在City的每個級別都得到一行,但是我想知道的是'City'協變量的總體意義(即比較Y〜C(城市) + X * C(組)與部分模型Y〜X * C(組))。

有沒有辦法呢?

由於事先

回答

1

謝謝user333700!

下面是你的提示的詳細說明。我生成一個3級分類變量數據,使用statsmodels共同擬合模型,然後測試分類變量的各個層面:

# 1. generate data 
def rnorm(n,u,s): 
    return np.random.standard_normal(n)*s+u 
a=rnorm(100,-1,1); 
b=rnorm(100,0,1); 
c=rnorm(100,+1,1); 
n=rnorm(300,0,1); # some noise 
y=np.concatenate((a,b,c))+n 
g=np.zeros(300); 
g[0:100]=1 
g[100:200]=2 
g[200:300]=3 
df=pd.DataFrame({'Y':y,'G':g,'N':n}); 

# 2. fit model 
r=smf.ols(formula="Y ~ N + C(G)",data=df).fit(); 
r.summary() 

# 3. joint test 
print r.params 
A=np.identity(len(r.params)) # identity matrix with size = number of params 
GroupTest=A[1:3,:] # for the categorical var., keep the corresponding rows of A 
CovTest=A[3,:] # row for the continuous var. 
print "Group effect test",r.f_test(GroupTest).fvalue 
print "Covariate effect test",r.f_test(CovTest).fvalue 

結果應該是這樣的:

Intercept  -1.188975 
C(G)[T.2.0] 1.315898 
C(G)[T.3.0] 2.137431 
N    0.922038 
dtype: float64 
Group effect test [[ 120.86097747]] 
Covariate effect test [[ 259.34155851]] 
相關問題