我如何使用statsmodels联合测试ipython中的多级分类效果?

我如何使用statsmodels联合测试ipython中的多级分类效果?,ipython,statsmodels,Ipython,Statsmodels,我在ipython的statsmodels中使用普通最小二乘(ols)函数来拟合线性模型,其中一个协变量(城市)是多层次的分类效应: 结果=smf.ols(公式=“Y~C(城市)+X*C(集团)”,数据=s.fit() (X是连续的,Group是一个二进制分类变量) 当我做results.summary()时,我会得到每一级城市的一行,然而,我想知道的是“城市”协变量的总体意义(即,将Y~C(城市)+X*C(组)与部分模型Y~X*C(组)进行比较) 有办法吗 提前感谢简短回答 您可以直接使用an

我在ipython的statsmodels中使用普通最小二乘(ols)函数来拟合线性模型,其中一个协变量(城市)是多层次的分类效应:

结果=smf.ols(公式=“Y~C(城市)+X*C(集团)”,数据=s.fit()

(X是连续的,Group是一个二进制分类变量)

当我做results.summary()时,我会得到每一级城市的一行,然而,我想知道的是“城市”协变量的总体意义(即,将Y~C(城市)+X*C(组)与部分模型Y~X*C(组)进行比较)

有办法吗

提前感谢

简短回答

您可以直接使用
anova_lm
(类型3),也可以使用
f_检验
wald_检验
,构建约束矩阵或以公式序列的形式提供假设的约束

谢谢你

下面是你的详细提示。我使用三级分类变量生成数据,使用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]]