передать значение функции patsy с помощью forloop - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть код ниже, где я пытаюсь несколько раз подогнать линейный режим для каждого поля из списка непрерывных столбцов в кадре данных с категориальным столбцом '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
       ^
...