【发布时间】:2015-05-25 09:57:00
【问题描述】:
数据:
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 Pandas 中实现同样的目标。到目前为止,我只提出了这个:
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)
它可以工作并产生相同的结果,但我想知道 pandas 中是否有这种方法。
【问题讨论】:
标签: python r pandas statsmodels