【发布时间】:2013-09-01 18:29:04
【问题描述】:
我是 R 的新手。在使用分类变量“销售年份”进行线性回归之后
ols <- lm(logprice = x + factor(city) + factor(sale_year))
我想创建一个新变量,它告诉我每次观察的因子(sale_year)在该观察的 sale_year 上的回归系数。
sale_year new variable
1980 coef(ols)["factor(sale_year)1980"]
1973 coef(ols)["factor(sale_year)1973"]
1990 coef(ols)["factor(sale_year)1990"]
1990 coef(ols)["factor(sale_year)1990"]
1973 coef(ols)["factor(sale_year)1973"]
...
如果没有其他因子变量,那么我可以简单地将除 sale_year 之外的所有变量设置为零,并使用predict.lm 获取系数。但是考虑到多个因子变量,它会更混乱,我无法在 R 中正确理解。
在 Stata 中,我可以这样做:
xi: reg logprice x i.city i.sale_year gen newvar = . levelsof sale_year, local(saleyr) foreach lv of local saleyr { replace newvar = _b[_Isaleyr`lv'] if sale_year == `lv' }
如何在 R 中做到这一点?谢谢!
【问题讨论】:
-
这里的 Stata 代码是不正确的,更重要的是在很大程度上毫无意义。
_b()必须是_b[]。修复后,代码的持久影响可能是变量newvar包含计算出的last 斜率系数的重复副本。因此,如果没有完整且合法的代码段,您的 Stata 示例就会变得晦涩难懂。 -
@Nick 感谢您指出 _b[] 错误。上面的stata代码实际上在我的情况下有效。我已经测试过了...
-
log(price)工作了吗?我的主要观点仍然是:您的foreach循环只是反复覆盖。 -
@NickCox,如果 sale_year == `lv',我忘了添加。我前段时间在Stata中做过这个......
-
谨代表那些阅读 Stata 代码以进行代码修复的人表示感谢。