R studio:回归循环中变量的平均值

R studio:回归循环中变量的平均值,r,R,我的任务是在向量中添加变量的平均值。我运行了一个循环,根据7个变量计算7个简单回归,并成功地将它们各自的系数保存在向量中 然后我尝试在向量中添加变量的平均值,但只得到NA值。我做错了什么请看代码 coef.vec <- data.frame(NULL) # create object to keep results for (i in 2:7) { m <- summary(lm(data[,i] ~ data[,8])) # run model c

我的任务是在向量中添加变量的平均值。我运行了一个循环,根据7个变量计算7个简单回归,并成功地将它们各自的系数保存在向量中

然后我尝试在向量中添加变量的平均值,但只得到NA值。我做错了什么请看代码

coef.vec <- data.frame(NULL)           # create object to keep results
for (i in 2:7) {
  m <- summary(lm(data[,i] ~ data[,8]))    # run model
  coef.vec[i, 1] <- names(data)[i]           # print variable name
  coef.vec[i, 2] <- m$coefficients[1,1]   # intercept
  coef.vec[i, 3] <- m$coefficients[2,1]   # coefficient
  coef.vec[i, 4] <- mean(data)[i]       # means of variables
}

names(coef.vec) <- c("y.variable", "intercept", "coef.x","variable.mean")

head(coef.vec)

coef.vec我们可以提取
vector
而不是
data.frame
作为
mean(data)[i]
应用于整个data.frame,然后提取
i
th元素,但是
mean
vector

mean(data[[i]])
根据
?平均值

x-一个R对象。目前有用于数字/逻辑向量和日期、日期时间和时间间隔对象的方法。仅trim=0时允许使用复数向量

注意:先在这里发布解决方案

-完整代码

coef.vec <- data.frame(NULL)           # create object to keep results
for (i in 2:7) {
  m <- summary(lm(data[,i] ~ data[,8]))    # run model
  coef.vec[i, 1] <- names(data)[i]           # print variable name
  coef.vec[i, 2] <- m$coefficients[1,1]   # intercept
  coef.vec[i, 3] <- m$coefficients[2,1]   # coefficient
  coef.vec[i, 4] <- mean(data[[i]])      # means of variables
}

names(coef.vec) <- c("y.variable", "intercept", "coef.x","variable.mean")
-输出

coef.vec
#  y.variable    intercept      coef.x variable.mean
#1       <NA>           NA          NA            NA
#2         V2 -0.004929267  0.10199783   -0.01702318
#3         V3  0.022621771  0.07819099    0.01335064
#4         V4  0.057342413 -0.05618310    0.06400406
#5         V5  0.003316518 -0.10555201    0.01583185
#6         V6  0.075092932  0.02392331    0.07225634
#7         V7 -0.022753324 -0.05127132   -0.01667407
coef.vec
#  y.variable    intercept      coef.x variable.mean
#1         V2 -0.004929267  0.10199783    0.02375765
#2         V3  0.022621771  0.07819099   -0.01702318
#3         V4  0.057342413 -0.05618310    0.01335064
#4         V5  0.003316518 -0.10555201    0.06400406
#5         V6  0.075092932  0.02392331    0.01583185
#6         V7 -0.022753324 -0.05127132    0.07225634
数据
set.seed(4343)

数据这应该可以做到。问题在于
平均值(数据)[i]
。R不会计算数据帧的平均值。相反,您可以执行
平均值(data[[i]])
,这将取矩阵
data
中第i个变量的平均值

set.seed(4343)
data <- as.data.frame(matrix(rnorm(900, 0, 1), ncol=9))

coef.vec <- data.frame(NULL)           # create object to keep results
for (i in 2:7) {
  m <- summary(lm(data[,i] ~ data[,8]))    # run model
  coef.vec[i, 1] <- names(data)[i]           # print variable name
  coef.vec[i, 2] <- m$coefficients[1,1]   # intercept
  coef.vec[i, 3] <- m$coefficients[2,1]   # coefficient
  coef.vec[i, 4] <- mean(data[[i]])       # means of variables
}

names(coef.vec) <- c("y.variable", "intercept", "coef.x","variable.mean")

head(coef.vec)
#   y.variable    intercept      coef.x variable.mean
# 1       <NA>           NA          NA            NA
# 2         V2 -0.004929267  0.10199783   -0.01702318
# 3         V3  0.022621771  0.07819099    0.01335064
# 4         V4  0.057342413 -0.05618310    0.06400406
# 5         V5  0.003316518 -0.10555201    0.01583185
# 6         V6  0.075092932  0.02392331    0.07225634
set.seed(4343)

谢谢你,先生!马上就解决了。另外,正如你所看到的,我的编码导致了第一行的NA值,你知道如何去除它吗?正如你可能会告诉我,我是R的新手,所以我不太明白你的意思。我在数据框中的第一列是日期,这就是为什么我认为2:7是正确的。这是第1行=日期,第2-7行=自变量,第8行=因变量*编辑:现在看到了更新的代码,非常感谢!我尝试您的更新代码来摆脱NAs,我得到以下错误。as.Date.numeric(value)中的错误:当我尝试打开我得到的coef.vec表时,也必须提供“origin:”DataTables警告:table id=rsGridData–无法重新初始化DataTable。有关此错误的详细信息,请参阅“@pjoternivotich请对接受的答案发表评论。谢谢
set.seed(4343)
data <- as.data.frame(matrix(rnorm(900, 0, 1), ncol=9))
set.seed(4343)
data <- as.data.frame(matrix(rnorm(900, 0, 1), ncol=9))

coef.vec <- data.frame(NULL)           # create object to keep results
for (i in 2:7) {
  m <- summary(lm(data[,i] ~ data[,8]))    # run model
  coef.vec[i, 1] <- names(data)[i]           # print variable name
  coef.vec[i, 2] <- m$coefficients[1,1]   # intercept
  coef.vec[i, 3] <- m$coefficients[2,1]   # coefficient
  coef.vec[i, 4] <- mean(data[[i]])       # means of variables
}

names(coef.vec) <- c("y.variable", "intercept", "coef.x","variable.mean")

head(coef.vec)
#   y.variable    intercept      coef.x variable.mean
# 1       <NA>           NA          NA            NA
# 2         V2 -0.004929267  0.10199783   -0.01702318
# 3         V3  0.022621771  0.07819099    0.01335064
# 4         V4  0.057342413 -0.05618310    0.06400406
# 5         V5  0.003316518 -0.10555201    0.01583185
# 6         V6  0.075092932  0.02392331    0.07225634