statsmodels.regression.mixed_线性_model.MixedLM.from_formula¶
-
classmethod MixedLM.from_formula(formula, data, re_formula=
None, vc_formula=None, subset=None, use_sparse=False, missing='none', *args, **kwargs)[source]¶ 从公式和数据框创建模型。
- Parameters:¶
- formula
strorgenericFormulaobject 指定模型的公式
- dataarray_like
模型的数据。参见注释。
- re_formula
str 定义模型方差结构的单边公式。默认情况下,为每个组提供一个随机截距。
- vc_formuladict-like
描述方差分量的公式。vc_formula[vc] 是具有名为 vc 的方差参数的分量的公式。该公式被处理成一个矩阵,并且该矩阵的列与具有均值为零和共同方差的独立随机系数线性组合。
- subsetarray_like
一个类似数组的对象,包含布尔值、整数或索引值,用于指示模型中使用的df子集。假设df是一个pandas.DataFrame
- missing
str 要么是‘none’,要么是‘drop’
- args
extraarguments 这些被传递给模型
- kwargs
extrakeywordarguments 这些参数被传递给模型,但有一个例外。
eval_env关键字被传递给 patsy。它可以是一个patsy:patsy.EvalEnvironment对象或一个整数,表示要使用的命名空间的深度。例如,默认的eval_env=0使用调用命名空间。如果你希望使用一个“干净的”环境,请设置eval_env=-1。
- formula
- Returns:¶
- model
Modelinstance
- model
注释
数据必须定义__getitem__,其键在公式项中。参数args和kwargs被传递给模型实例化。例如,一个numpy结构化或rec数组,一个字典,或一个pandas DataFrame。
如果方差分量旨在为组的互不相交的子集生成随机截距,这些子集由字符串标签或分类数据值指定,请始终在公式中使用‘0 +’,以确保不包含总体截距。
如果方差分量指定了随机斜率,并且您不希望模型中也包含随机组级别的截距,那么在公式中使用‘0 +’来排除截距。
方差分量公式是针对每个组分别处理的。如果一个变量是分类变量,结果将不会受到组标签是否在顶层组中重复使用的影响。
示例
假设我们有一项教育研究的数据,学生嵌套在教室中,教室又嵌套在学校中。学生参加了一次测试,我们希望将测试成绩与学生的年龄联系起来,同时考虑到教室和学校的影响。学校将是最高级别的组,教室是一个嵌套的组,被指定为方差分量。请注意,学校可能有不同数量的教室,教室标签可能(但不一定)在不同学校之间不同。
>>> vc = {'classroom': '0 + C(classroom)'} >>> MixedLM.from_formula('test_score ~ age', vc_formula=vc, re_formula='1', groups='school', data=data)现在假设我们还有一个之前的测试分数,称为‘pretest’。如果我们希望pretest分数与当前测试之间的关系因教室而异,我们可以为pretest分数指定一个随机斜率
>>> vc = {'classroom': '0 + C(classroom)', 'pretest': '0 + pretest'} >>> MixedLM.from_formula('test_score ~ age + pretest', vc_formula=vc, re_formula='1', groups='school', data=data)以下模型与前一个模型几乎等效,但这里教室随机截距和前测斜率可能相关。
>>> vc = {'classroom': '0 + C(classroom)'} >>> MixedLM.from_formula('test_score ~ age + pretest', vc_formula=vc, re_formula='1 + pretest', groups='school', data=data)