首页 > 解决方案 > 使用 for 循环创建 beta 值向量

问题描述

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

对于每个参与者,我都有一个在不同时间点进行 10 次测量的 Excel 表。对于每个参与者 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 什么都不做。

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 [[“系数”]][[“规模(睡眠)”]])} + }

标签: rfor-loopregression

解决方案


我相信你希望你的函数最终做的是 在它们各自的向量中返回Age_betas,Fitness_betas和 the 。Sleep_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

推荐阅读