拆分、应用线性模型、组合
Split, apply linear model, combine
我有一个数据框如下:
df
Date Hour ID Par1 Par2 Par3
08-01-15 0 A 2 3 4
08-01-15 0 B 4 5 6
08-01-15 1 N 2 9 10
08-01-15 1 A 3 7 23
08-01-15 1 B 4 7 22
08-02-15 0 E 2 4 12
08-02-15 0 A 3 7 9
所以我想按小时拆分此数据框,如下所示:
splitdata<-split(df<-split(df, df$Hour)
拆分后,我想对拆分后的数据集应用线性模型。
result <- lapply(splitdata, function(df){
lm1 <-lm(Par1~Par2,data=df)
summary <- (lm1$summary)
data.frame(as.list(summary))
})
result
我的结果没有显示任何内容。尽管如果我将摘要更改为:
summary <- (lm1$coef)
data.frame(as.list(summary))
然后就会产生一个结果。
所以主要问题是,如何按小时获取每个线性模型的摘要列表,而不仅仅是系数?
谢谢!
尝试使用 nlme
中的 lmList
library(nlme)
fits <- lmList(Par1 ~ Par2 | Hour, data=df)
这会按小时拆分数据并为您拟合线性模型。然后,你可以做summary(fits)
。或者,您可以使用
单独查看每个摘要
lapply(fits, summary)
如果您正在寻找 table 表格(我通常更喜欢):
> dt = data.table(df)
> dt[,{S = summary(lm(Par1 ~ Par2))$coefficients; list(Coef = S[2,1], Intercept = S[1,1], Sig = S[2,4])}, by = Hour]
Hour Coef Intercept Sig
1: 0 0.314286 1.25714 0.439388
2: 1 -0.750000 8.75000 0.333333
我有一个数据框如下:
df
Date Hour ID Par1 Par2 Par3
08-01-15 0 A 2 3 4
08-01-15 0 B 4 5 6
08-01-15 1 N 2 9 10
08-01-15 1 A 3 7 23
08-01-15 1 B 4 7 22
08-02-15 0 E 2 4 12
08-02-15 0 A 3 7 9
所以我想按小时拆分此数据框,如下所示:
splitdata<-split(df<-split(df, df$Hour)
拆分后,我想对拆分后的数据集应用线性模型。
result <- lapply(splitdata, function(df){
lm1 <-lm(Par1~Par2,data=df)
summary <- (lm1$summary)
data.frame(as.list(summary))
})
result
我的结果没有显示任何内容。尽管如果我将摘要更改为:
summary <- (lm1$coef)
data.frame(as.list(summary))
然后就会产生一个结果。
所以主要问题是,如何按小时获取每个线性模型的摘要列表,而不仅仅是系数?
谢谢!
尝试使用 nlme
lmList
library(nlme)
fits <- lmList(Par1 ~ Par2 | Hour, data=df)
这会按小时拆分数据并为您拟合线性模型。然后,你可以做summary(fits)
。或者,您可以使用
lapply(fits, summary)
如果您正在寻找 table 表格(我通常更喜欢):
> dt = data.table(df)
> dt[,{S = summary(lm(Par1 ~ Par2))$coefficients; list(Coef = S[2,1], Intercept = S[1,1], Sig = S[2,4])}, by = Hour]
Hour Coef Intercept Sig
1: 0 0.314286 1.25714 0.439388
2: 1 -0.750000 8.75000 0.333333