Как выполнить ANOVA для набора данных? - PullRequest
1 голос
/ 28 сентября 2019

У меня есть набор данных о ценах на жилье, где я хочу выяснить значимость категориальных переменных с целевой переменной (которая является непрерывной переменной).Для этого я подумал о выполнении ANOVA, но меня смущает, должен ли я рассматривать каждую категориальную переменную как отдельную группу:

mod1 = ols("SalePrice ~ SaleCondition", data = data_cat).fit()
anov_table1 = sm.stats.anova_lm(mod1)

mod2 = ols("SalePrice ~ Neighborhood", data = data_cat).fit()
anov_table1 = sm.stats.anova_lm(mod2)

mod3 = ols("SalePrice ~ HouseStyle", data = data_cat).fit()
anov_table1 = sm.stats.anova_lm(mod3)

mod4 = ols("SalePrice ~ OverallQual", data = data_cat).fit()
anov_table1 = sm.stats.anova_lm(mod4)

или мне следует поместить все категориальные переменные в одну группу, а затем выполнить ANOVA:

mod = ols("SalePrice ~ SaleCondition + Neighborhood + HouseStyle + OverallQual", data = data_cat).fit()
anov_table = sm.stats.anova_lm(mod)

1 Ответ

0 голосов
/ 28 сентября 2019

Поскольку вы упомянули целевую переменную и, похоже, используете модель OLS, я предполагаю, что вы пытаетесь выполнить множественную линейную регрессию .

Вам не нужно выполнять ANOVAвручную - практически все реализации моделей линейной регрессии автоматически вычисляют значение p, связанное с каждой входной переменной (с учетом всех других входных переменных).

Кроме того, ваша модель OLS должна иметь все входные переменные в ней перед вызовомметод fit().Другими словами, вам нужно поместить свои входные переменные в одну группу, прежде чем передавать их в модель, не потому, что вам это нужно для ANOVA (вам не нужно), а потому, что вам это нужно для самой множественной линейной регрессии.

В псевдокоде:

target_var = put_your_target_series_here
input_vars = put_all_your_input_series_here
result = ols(target_var, input_vars).fit()

В вашем случае target_var, скорее всего, будет Серии панд (= столбец сиглы из pFDas DataFrame).

input_vars может быть пандами серии (что означает, что у вас есть только одна входная переменная - это простая линейная регрессия ) или пандамиDataFrame (в этом случае каждый столбец интерпретируется как входная переменная - вы выполняете множественную линейную регрессию ).

Объект в переменной result содержит p-значения для всех входных переменных в вашей модели - обратитесь к документации пакетов, которые вы используете, чтобы проверить, как их извлечь.

Однако, поскольку ваши входные переменные являются категориями, вам придется использоватьфиктивные переменные .Допустим, у вас есть эти данные:

|House | Neighborhood value|
|------|-------------------|
|01    | Good              |
|02    | Bad               |
|03    | Bad               |
|04    | Excellent         |
|05    | Good              |

Линейная регрессия должна иметь числа, а не категории.Вы могли бы сойти с рук, превратив эти категории в числа, например:

|House | Neighborhood value|
|------|-------------------|
|01    | 1                 |
|02    | 0                 |
|03    | 0                 |
|04    | 2                 |
|05    | 1                 |

Но это косвенно учит вашу модель, что значение соседства Excellent стоит в 2 раза больше Good значение - что может или не может быть правдой!Кроме того, для таких категорий, как цвета, это не имеет никакого смысла.

Реальным решением является использование фиктивных переменных , например:

|House | Has excellent value | Has good value|
|------|---------------------|---------------|
|01    | 0                   | 1             |
|02    | 0                   | 0             |
|03    | 0                   | 0             |
|04    | 1                   | 0             |
|05    | 0                   | 1             |

Это позволяет избежать проблемЯ описал выше.

Обратите внимание, что нам не нужен столбец для Has bad value, потому что мы предполагаем, что дом без 0 для Has excellent value и Has good value должен иметь неправильное значение.

См. эту ссылку для более подробного объяснения фиктивных переменных для категориальных данных в множественной линейной регрессии.

...