У меня есть код ниже, где я пытаюсь несколько раз подогнать линейный режим для каждого поля из списка непрерывных столбцов в кадре данных с категориальным столбцом 'fieldB'.Я использую forloop, и я не уверен, что получил код, использующий корректную функцию patsy 'Q'.Если я попытаюсь просто подобрать линейную модель для одного непрерывного столбца и одного категориального столбца, это прекрасно работает, например:
ols("Q('fieldA%') ~ fieldB",data=smp_df).fit()
Кто-нибудь видит, в чем может быть проблема, и предлагает, как ее исправить?
Это относится к предыдущему сообщению:
символ, вызывающий проблему синтаксиса с statsmodel
код:
j='fieldB'
emptCorLst=[]
for i in contLst:
# subsetting data for one categorical column and one continuous column
data2=catCorDf.copy()[[j,i]]
data2[j]=data2[j].astype('category')
mod = ols("Q(i) ~ j",
data=data2).fit()
aov_table = sm.stats.anova_lm(mod, typ=2)
if aov_table['PR(>F)'][0] < 0.05:
emptCorLst.append(i)
ошибка:
---------------------------------------------------------------------------
PatsyError Traceback (most recent call last)
<ipython-input-28-3c26ac6cf151> in <module>
11
12 mod = ols("Q(i) ~ j",
---> 13 data=data2).fit()
14
15 aov_table = sm.stats.anova_lm(mod, typ=2)
~\AppDataPython\envs\py36\lib\site-packages\statsmodels\base\model.py in from_formula(cls, formula, data, subset, drop_cols, *args, **kwargs)
153
154 tmp = handle_formula_data(data, None, formula, depth=eval_env,
--> 155 missing=missing)
156 ((endog, exog), missing_idx, design_info) = tmp
157
~\AppDataPython\envs\py36\lib\site-packages\statsmodels\formula\formulatools.py in handle_formula_data(Y, X, formula, depth, missing)
63 if data_util._is_using_pandas(Y, None):
64 result = dmatrices(formula, Y, depth, return_type='dataframe',
---> 65 NA_action=na_action)
66 else:
67 result = dmatrices(formula, Y, depth, return_type='dataframe',
~\AppDataPython\envs\py36\lib\site-packages\patsy\highlevel.py in dmatrices(formula_like, data, eval_env, NA_action, return_type)
308 eval_env = EvalEnvironment.capture(eval_env, reference=1)
309 (lhs, rhs) = _do_highlevel_design(formula_like, data, eval_env,
--> 310 NA_action, return_type)
311 if lhs.shape[1] == 0:
312 raise PatsyError("model is missing required outcome variables")
~\AppDataPython\envs\py36\lib\site-packages\patsy\highlevel.py in _do_highlevel_design(formula_like, data, eval_env, NA_action, return_type)
167 return build_design_matrices(design_infos, data,
168 NA_action=NA_action,
--> 169 return_type=return_type)
170 else:
171 # No builders, but maybe we can still get matrices
~\AppDataPython\envs\py36\lib\site-packages\patsy\build.py in build_design_matrices(design_infos, data, NA_action, return_type, dtype)
891 name = factor_info.factor.name()
892 origin = factor_info.factor.origin
--> 893 rows_checker.check(value.shape[0], name, origin)
894 if (have_pandas
895 and isinstance(value, (pandas.Series, pandas.DataFrame))):
~\AppDataPython\envs\py36\lib\site-packages\patsy\build.py in check(self, seen_value, desc, origin)
793 # XX FIXME: this is a case where having discontiguous Origins
794 # would be useful...
--> 795 raise PatsyError(msg, origin)
796
797 def build_design_matrices(design_infos, data,
PatsyError: Number of rows mismatch between data argument and j (910 versus 1)
Q(i) ~ j
^