r中许多公司的横截面回归

时间:2017-11-12 11:44:23

标签: r

我有两个名为lagcolmean和Dropcolmax的数据框,其中rownames是公司,列名是月日期。

                      00-02  00-03  00-04
 TENAGA NASIONAL      0.39    0.07  -0.08
 SIME DARBY          -0.09   -0.12  -0.53
 DIGI.COM             0.79    0.96  -1.14
 GENTING             -0.11   -0.27  -0.16
 PETRONAS GAS        -0.30   -0.09  -0.98
and
                   00-01    00-02   00-03
TENAGA NASIONAL     5.61    3.95    4.12
SIME DARBY         10.87    1.97    6.78
DIGI.COM           21.21    9.61    25.40
GENTING            11.55    2.87    4.34
PETRONAS GAS        1.79    1.27    4.75

当我想运行横截面回归以找到每个时期的斜率系数时,我使用这些公式

library(broom)
fit4 <- lapply(names(Dropcolmax), function(x){
  dd = tidy(lm(lagcolmean[[x]] ~ Dropcolmax[[x]]))
  data.frame(name = x, dd)})

但它会产生此错误消息:model.frame.default中的错误(formula = lagcolmean [[x]] ~Dropcolmax [[x]] ,:   变量'lagcolmean [[x]]'

的无效类型(NULL)

1 个答案:

答案 0 :(得分:0)

将你的名字改为rownames和你的lm规范:

include:domain.com

你会得到(按行):

fit4 <- lapply(rownames(Dropcolmax), function(x){  
  dd = tidy(lm(as.numeric(lagcolmean[rownames(lagcolmean)==x,]) ~ as.numeric(Dropcolmax[rownames(Dropcolmax)==x,])))
  data.frame(name = x, dd)})

编辑2:如果您想按列列出结果

> fit4
[[1]]
             name                                                term   estimate std.error statistic   p.value
1 TENAGA NASIONAL                                         (Intercept) -0.9721944 0.4851794 -2.003783 0.2946863
2 TENAGA NASIONAL as.numeric(Dropcolmax[rownames(Dropcolmax) == x, ])  0.2409783 0.1050042  2.294939 0.2616084

[[2]]
        name                                                term      estimate  std.error   statistic   p.value
1 SIME DARBY                                         (Intercept) -0.2518569598 0.41291644 -0.60994656 0.6513227
2 SIME DARBY as.numeric(Dropcolmax[rownames(Dropcolmax) == x, ])  0.0007936228 0.05517726  0.01438315 0.9908440

你会得到:

indc=names(Dropcolmax) %in% names(lagcolmean)
fit5 <- lapply(names(Dropcolmax)[indc], function(x){  
  df=data.frame(lagcolmean[x] , Dropcolmax[x])
  dd = tidy(lm(df[,1]~df[,2]))
  data.frame(name = x, dd)})