【问题标题】:Creating a vector of beta values using a for loop使用 for 循环创建 beta 值向量
【发布时间】:2019-04-30 03:46:22
【问题描述】:

我是一名 R 新手,目前正在尝试创建 3 个由多元回归模型的 beta 值组成的向量。我有三个预测变量 Age、Fitness 和 sleep 和一个因变量 RT

对于每个参与者,我都有一个 Excel 表格,其中包含在不同时间点进行的 10 次测量。对于每个参与者 1 到 20,我想将多元回归的 beta 保存在各自的向量 Age_betas、Fitness_betas 或 Sleep_betas 中。

如果我只为一位参与者尝试我的模型 例如

model<-lm(scale(RT)~scale(Age)+scale(Fitness)+scale(Sleep), data=subset(Subjects1_5, Subject==1)) 

它工作得很好。有人可以帮我为什么我的循环不起作用吗?

    Fun<-function()
  {  
  Age_betas<-c()
  Fitness_betas<-c()
  Sleep_betas<-c()

  for (counter in 1:5)

    {model<-lm(scale(RT)~scale(Age)+scale(Fitness)+scale(Sleep), data=subset(Subjects1_5, Dummy==1 & Subject==i))

    Age_betas <- c(Age_betas, model[["coefficients"]][["scale(Age)"]])

    Fitness_betas <- c(Fitness_betas, model[["coefficients"]][["scale(Fitness)"]])

    Sleep_betas <- c(Sleep_betas, model[["coefficients"]][["scale(Sleep)"]])} 
  }

没有错误,但是脚本除了添加函数fun之外什么都没做。

乐趣 + Age_betas + for (1:5 中的计数器) +
+ {model + Age_betas + Fitness_betas + Sleep_betas

【问题讨论】:

  • 欢迎来到 SO。请提供带有一些测试数据的最小可重复示例 (stackoverflow.com/questions/5963269/…)。如果您正在解释究竟什么不起作用,这也会有所帮助。有错误信息吗?
  • 你得到什么错误?
  • 很遗憾,我还没有弄清楚如何上传数据。所以这里是 5 个主题文件的链接link
  • 你知道定义函数和调用函数的区别吗?
  • 没有。我真的不知道哪里出了问题,目前正在尝试阅读此内容

标签: r for-loop regression


【解决方案1】:

找到解决问题的方法:

 age_betas<-c()
    fitness_betas<-c()
    sleep_betas<-c()

    for (i in 1:5){
      model<-lm(scale(RT)~scale(Age)+scale(Fitness)+scale(Sleep), data=subset(Subjects1_5, Dummy==1 & Subject==i))

      age_betas <- c(age_betas, model[["coefficients"]][["scale(Age)"]])
      fitness_betas <- c(fitness_betas, model[["coefficients"]][["scale(Fitness)"]])
      sleep_betas <- c(sleep_betas, model[["coefficients"]][["scale(Sleep)"]])
    }

【讨论】:

    【解决方案2】:

    我相信你希望你的函数最终做的是在各自的向量中返回 Age_betasFitness_betasSleep_betas。但是,您还没有在用户函数中包含 return() 用于输出。另请注意,该函数不允许多参数返回;返回()。

    做什么:

    1. 创建一个空列表beta;这将是我们存储 beta 向量的列表列表
    2. 添加返回函数以输出beta列表列表
    3. 然后调用函数Fun用户自定义函数来显示beta向量。
    Fun <- function(){
      beta <- list()
      
      for (counter in 1:5){
        model<-lm(scale(RT)~scale(Age)+scale(Fitness)+scale(Sleep), data=subset(Subjects1_5, Dummy==1 & Subject==i))
        beta[["Age_betas"]] = c(beta[["Age_betas"]], model[["coefficients"]][["scale(Age)"]])
        beta[["Fitness_betas"]] = c(beta[["Fitness_betas"]], model[["coefficients"]][["scale(Fitness)"]])
        beta[["Sleep_betas"]] = c(beta[["Sleep_betas"]], model[["coefficients"]][["scale(Sleep)"]])
      }
      return(beta)
    }
    
    # Call Function:
    Fun()
    

    输出:

    # $Age_betas
    # [1] -0.3970718 -0.3970718 -0.3970718 -0.3970718 -0.3970718
    
    # $Fitness_betas
    # [1] -0.004210636 -0.004210636 -0.004210636 -0.004210636 -0.004210636
    
    # $Sleep_betas
    # [1] -0.07401978 -0.07401978 -0.07401978 -0.07401978 -0.07401978
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 2014-08-05
      • 2015-12-26
      • 1970-01-01
      • 2023-04-08
      • 2018-02-18
      • 2012-01-21
      相关资源
      最近更新 更多