【问题标题】:Using R to save results of a lm model to a database使用 R 将 lm 模型的结果保存到数据库
【发布时间】:2013-08-01 14:05:06
【问题描述】:

我正在尝试获取在 R 中执行的线性回归的结果并将这些结果存储在数据库中。

具体来说,我要的是coef(summary(myModel) 中的数据。我可以把它变成一个数据框并使用sqlSave(),但系数名称不是数据框中的一列。如何将系数和变量名称放入可以使用sqlSave() 保存的单个数据帧中?

为了清楚起见,我试图将数据存储在具有列的数据库表中:

变量名、估计值、StdError、tValue、pValue

有没有更简单的方法来准备这些数据以存储在数据库中?例如,coef(summary(myModel)) 给出的结果如下:

                        Estimate  Std. Error     t value     Pr(>|t|)
 (Intercept)            51.52729727 2.623035966 19.64414439 1.941150e-58
 factor(person)507      -0.73663931 2.627215539 -0.28038785 7.793456e-01
 factor(person)713      -5.18612049 3.317899029 -1.56307363 1.189390e-01
 TransCnt               0.02658798 0.005682853  4.67863266 4.132888e-06
 factor(Month)5         0.67908563 1.119655304  0.60651312 5.445673e-01
 factor(Month)6         2.09595623 1.169658148  1.79193915 7.400639e-02
 factor(Month)7         2.91204838 1.333483558  2.18379024 2.964109e-02

【问题讨论】:

    标签: database r regression data-manipulation


    【解决方案1】:
    datOut <- summary(myModel)$coef
    datOut <- cbind(VariableName=rownames(datOut), datOut)
    rownames(datOut) <- NULL
    

    如果要添加自己的列名:

    colnames(datOut) <- c("VariableName", "Estimate", "StdError", "tValue", "pValue")
    datOut
    

    【讨论】:

      【解决方案2】:

      summary.lm 生成的表格是一个矩阵。您可以使用 as.data.frame 强制转换为数据帧

       df.coef <- as.data.frame( coef(summary(myModel)) )
      

      应将列名强制转换为没有空格或引号的列名。

      【讨论】:

      • 这给了我一个只有 4 个变量的数据框,包含系数名称的变量不是数据框中的变量。它仍然是一个暗名,据我所知 sqlSave 不喜欢这样。
      • 然后使用cbind( rownames(df.coef), df.coef)。并且说一个功能“不喜欢那样”并不是特别有用。如果问题是行名丢失,则 cbind 操作将起作用。如果问题是行名产生了错误,那么你就完了,因为数据框总是有行名。
      猜你喜欢
      • 2016-01-29
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      相关资源
      最近更新 更多