我想用线性回归函数在 R 中做一个。我的数据是一个年度时间序列,其中一个字段为年(22年) ,另一个字段为州(50个州)。我想拟合每个状态的回归,这样最后我有一个 lm 响应的向量。我可以想象为每个状态执行 for 循环,然后在循环中执行回归,并将每个回归的结果添加到一个向量中。然而,这似乎不太像 R 调。在 SAS 中我会做一个‘ by’语句,在 SQL 中我会做一个‘ group by’。做这件事的 R 方法是什么?
d <- data.frame(
state = rep(c('NY', 'CA'), 10),
year = rep(1:10, 2),
response= rnorm(20)
)
library(plyr)
# Break up d by state, then fit the specified model to each piece and
# return a list
models <- dlply(d, "state", function(df)
lm(response ~ year, data = df))
# Apply coef to each model and return a data frame
ldply(models, coef)
# Print the summary of each model
l_ply(models, summary, .print = TRUE)
require(base)
library(base)
attach(data) # data = your data base
#state is your label for the states column
modell<-by(data, data$state, function(data) lm(y~I(1/var1)+I(1/var2)))
summary(modell)
现在我的回答有点晚了,但我正在寻找一个类似的功能。似乎 R 中的内置函数‘ by’也可以很容易地进行分组:
? by 包含以下示例,它适合每个组,并用 sapplication 提取系数:
require(stats)
## now suppose we want to extract the coefficients by group
tmp <- with(warpbreaks,
by(warpbreaks, tension,
function(x) lm(breaks ~ wool, data = x)))
sapply(tmp, coef)