данных:R (в) и коэффициент переменных в линейной регрессии в панд
a,b,c,d
1,5,9,red
2,6,10,blue
3,7,11,green
4,8,12,red
3,4,3,orange
3,4,3,blue
3,4,3,red
В R, если я хочу, чтобы построить линейную модель регрессии, которая принимает во внимание категориальных данных (я думаю, что они называют фактором переменные в R), я могу просто сделать:
df$d = relevel(df$d, 'green')
После этого, с целью построения модели, R будет добавить столбцы для каждого цвета, например:
dblue
0
1
0
0
0
1
0
Не будет столбца для зеленого цвета, потому что, если все остальные значения цвета равны 0, это означает, что зеленый = 1 (это наш контрольный уровень). Теперь, создать модель регрессии:
mod = lm(a ~ b + c + d, data=df)
summary(mod)
Call:
lm(formula = a ~ b + c + d, data = rel)
Residuals:
1 2 3 4 5 6 7
4.708e-16 -7.061e-16 2.219e-31 2.354e-16 -1.233e-31 7.061e-16 -7.061e-16
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.600e+00 3.622e-15 -4.418e+14 1.44e-15 ***
b 1.600e+00 9.403e-16 1.702e+15 3.74e-16 ***
c -6.000e-01 3.766e-16 -1.593e+15 4.00e-16 ***
dblue 8.829e-16 1.823e-15 4.840e-01 0.713
dorange 1.589e-15 2.294e-15 6.930e-01 0.614
dred 2.295e-15 1.631e-15 1.407e+00 0.393
Я пытаюсь добиться того же в Python панд. До сих пор я только придумал это:
d = {'a': [1,2,3,4,3,3,3], 'b': [5,6,7,8,4,4,4], 'c': [9,10,11,12,3,3,3], 'd': pd.Series(['red', 'blue', 'green', 'red', 'orange', 'blue', 'red'], dtype='category')}
df = pd.DataFrame(d)
df['d'] = pd.Categorical(df['d'], ordered=False)
for r in df['d'].cat.categories:
if r != 'green':
df['d%s' % r] = df['d'] == r
df = df.drop('d', 1)
Он работает и дает те же результаты, но мне интересно, если есть способ в панд для этого.
не так просто, как в R, но намного лучше, чем мое обходное решение, спасибо! Я вижу, что 'get_dummies' принимает аргумент' prefix', который я использовал бы, чтобы избежать конфликтов имен столбцов. – alkamid