使用for循环创建beta值向量

时间:2018-11-28 09:21:42

标签: r for-loop regression

我是R新手,目前正尝试创建3个由多元回归模型的beta值组成的向量。我有三个预测变量A ge,健身和睡眠和因变量 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之外没有执行任何操作。

  

乐趣<-function()   + {
  + Age_betas <-c()   + Fitness_betas <-c()   + Sleep_betas <-c()   +
  + for(以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 个答案:

答案 0 :(得分:0)

找到解决问题的方法:

 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)"]])
    }

答案 1 :(得分:0)

我相信你希望你的函数最终做的是返回 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