创建函数后应用的问题

时间:2019-08-17 16:05:17

标签: r for-loop apply

我想获取线性回归系数和R平方表。 在第一列中:我有时间列,在其他列中有我要分别与第一列回归的序列。

modele <- function(data, x) {
  modele.ex <- formula(paste(colnames(data)[1],colnames(data)[2:length(data)],sep="~"))
  modele.ex
  tab <- coefficients(lm(modele.ex,data=data))
  return(data.frame(tab))
}

tab_res <- apply(data, 2, modele)

1 个答案:

答案 0 :(得分:1)

更正了您的函数以返回多元线性回归:

modele <- function(data, x)lm(formula(paste(colnames(data)[1],paste(colnames(data)[2:length(data)], collapse="+"),sep="~")), data)

mod <- modele(iris)
data.frame(t(coef(mod)), summary(mod)$r.sq)

#  X.Intercept. Sepal.Width Petal.Length Petal.Width Speciesversicolor Speciesvirginica summary.mod..r.sq
# 1     2.171266   0.4958889    0.8292439  -0.3151552         -0.723562        -1.023498         0.8673123

要对每个因变量进行回归,最好先将因变量写为向量,然后编写两个小函数以获取模型和coef + r.sq:

dependent.variable <- colnames(iris[2:length(data)])

modele2 <- function(data, x)lm(formula(paste(colnames(data)[1], x, sep="~")), data)
output <- function(mod) data.frame(t(coef(mod)), summary(mod)$r.sq)

library(plyr)
all.mods <-lapply(dependent.variable, function(x)modele2(iris, x))
ldply(all.mods, output)

#   X.Intercept. Sepal.Width summary.mod..r.sq Petal.Length Petal.Width Speciesversicolor Speciesvirginica
# 1     6.526223  -0.2233611        0.01382265           NA          NA                NA               NA
# 2     4.306603          NA        0.75995465    0.4089223          NA                NA               NA
# 3     4.777629          NA        0.66902769           NA   0.8885803                NA               NA
# 4     5.006000          NA        0.61870573           NA          NA              0.93            1.582