Проблема Попытка получить Тест Anova в Питоне; (AttributeError: у объекта «Сводка» нет атрибута «модель») Ошибка - PullRequest
1 голос
/ 24 апреля 2020

Группа из 25 случайно выбранных пациентов в больнице. Помимо удовлетворения были собраны данные о возрасте пациента и индексе, который измерял тяжесть заболевания. (а) Подходит модель линейной регрессии, связывающая удовлетворение с возрастом пациента. СОВЕРШЕНО (b) Тест на значимость регрессии. (Нужно получить Anova Table)

  from pandas import DataFrame


import statsmodels.api as sm

from statsmodels.formula.api import ols

Stock_Market = {'Satisfaction': [68,77,96,80,43,44,26,88,75,57,56,88,88,102,88,70,52,43,46,56,59,26,52,83,75],
        'Age': [55,46,30,35,59,61,74,38,27,51,53,41,37,24,42,50,58,60,62,68,70,79,63,39,49],

        'Severity': [50,24,46,48,58,60,65,42,42,50,38,30,31,34,30,48,61,71,62,38,41,66,31,42,40],

        }



df = DataFrame(Stock_Market,columns=['Satisfaction','Age','Severity'])



X = df[['Age','Severity']]

Y = df['Satisfaction']

X = sm.add_constant(X) 
print(X)

model = sm.OLS(Y, X).fit()
predictions = model.predict(X)
print_model = model.summary()
print(print_model)


aov_table = sm.stats.anova_lm(print_model, typ=2)

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Ваш print_model - это возврат от summary().

Используйте model, т.е. экземпляр результатов, возвращенный из OLS.fit в anova_lm.

Сообщение об ошибке в заголовке указывает на проблему:

AttributeError: 'Summary' object has no attribute 'model'

0 голосов
/ 24 апреля 2020

вам нужно изменить форму кадра данных, подходящего для пакета statsmodel

In [117]: df_melt = pd.melt(df.reset_index(), id_vars=['index'], value_vars=['Satisfaction', 'Age', 'Severity'])

In [118]: df_melt
Out[118]:
    index      variable  value
0       0  Satisfaction     68
1       1  Satisfaction     77
2       2  Satisfaction     96
3       3  Satisfaction     80
4       4  Satisfaction     43
..    ...           ...    ...
70     20      Severity     41
71     21      Severity     66
72     22      Severity     31
73     23      Severity     42
74     24      Severity     40

[75 rows x 3 columns]

In [120]: df_melt.columns = ['index', 'categories', 'value']

In [121]: model = ols('value ~ C(categories)', data=df_melt).fit()

In [122]: anova_table = sm.stats.anova_lm(model, typ=2)

In [123]: anova_table
Out[123]:
                     sum_sq    df         F    PR(>F)
C(categories)   5198.906667   2.0  9.304327  0.000255
Residual       20115.440000  72.0       NaN       NaN
...