【问题标题】:Regression in R on panel dataR中面板数据的回归
【发布时间】:2021-08-05 18:45:50
【问题描述】:

我想对面板数据进行线性回归。到目前为止,在我的代码下方,但我不明白为什么不返回 fit 和 rsq。有什么建议吗?

示例代码:

for(i in names(df))
{ 
  if(is.numeric(df[3,i]))  ##if row 3 is numeric, the entire column is 
  {       
    fit <- lm(df[3,i] ~ Gender, data=df) #does a regression for each column in my csv file against my independent variable 'etch'
    rsq <- summary(fit)$r.squared
  }
}

数据结构

样本数据:

    df<-structure(list(id = c(1, 1, 2, 2, 2), id1 = c(1, 2, 1, 2, 3), 
    a1 = c(5, 8, 7, 6, 3), a2 = c(1, 4, 3, 10, 5), a3 = c(2, 
    34, 3, 12, 6), a4 = c(9, 2, 3, 12, 7), a5 = c(0, 0, 0, 7, 
    8), a6 = c(7, 7, 0, 0, 9), a7 = c(5, 8, 7, 6, 0), a8 = c(1, 
    4, 3, 10, 3), a9 = c(2, 34, 3, 12, 3), a10 = c(9, 2, 3, 12, 
    3), Gender = c(1, 2, 1, 1, 2)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L), spec = structure(list(
    cols = list(id = structure(list(), class = c("collector_double", 
    "collector")), id1 = structure(list(), class = c("collector_double", 
    "collector")), a1 = structure(list(), class = c("collector_double", 
    "collector")), a2 = structure(list(), class = c("collector_double", 
    "collector")), a3 = structure(list(), class = c("collector_double", 
    "collector")), a4 = structure(list(), class = c("collector_double", 
    "collector")), a5 = structure(list(), class = c("collector_double", 
    "collector")), a6 = structure(list(), class = c("collector_double", 
    "collector")), a7 = structure(list(), class = c("collector_double", 
    "collector")), a8 = structure(list(), class = c("collector_double", 
    "collector")), a9 = structure(list(), class = c("collector_double", 
    "collector")), a10 = structure(list(), class = c("collector_double", 
    "collector")), Gender = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

【问题讨论】:

  • “返回”到底是什么意思?您是否期望 for 循环返回某种值?或者您是否列出了尝试使用writelines 将数据写入某个未命名文件?这是一个错字吗?因为没有名为 writelines 的基本 R 函数(有一个 writeLines 不同,因为 R 名称区分大小写)
  • @MrFlick 谢谢我删除了 writeline,但仍然没有计算摘要统计数据

标签: r dataframe lm


【解决方案1】:

要对每一列进行线性回归,您可以使用lapply。我们使用reformulate 从列名创建一个公式对象,并在lapply 中使用它。可以从每个模型的summary 中提取 R 平方值。

cols <- grep('a\\d+', names(df), value = TRUE)
cols
#[1] "a1"  "a2"  "a3"  "a4"  "a5"  "a6"  "a7"  "a8"  "a9"  "a10"

lapply(cols, function(x) {
  lm(reformulate('Gender', x), df)
}) -> fit

r.squared <- sapply(fit, function(x) summary(x)$r.squared)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    相关资源
    最近更新 更多