R studio:回归循环中变量的平均值
我的任务是在向量中添加变量的平均值。我运行了一个循环,根据7个变量计算7个简单回归,并成功地将它们各自的系数保存在向量中 然后我尝试在向量中添加变量的平均值,但只得到NA值。我做错了什么请看代码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
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