在具有置信区间的 lm 列表上使用预测
Using predict on lm list with confidence interval
我有一个适合分组数据的线性模型,它生成一个 lm 类型的对象列表。我想使用此线性模型来预测具有给定置信区间的给定 x 处的 y 值。我想要对变量 w 进行唯一预测。这是带有示例数据的代码:
x<-c(.34,.355,.37,.385,.34,.355,.37,.385,.34,.355,.37,.385,.34,.355,.37,.385)
y<-c(40,35,28,25,42,36,29,25,44,37,26,23,46,37,33,27)
w<-c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
data<-data.frame(x,y,w)
ggplot(data=data,aes(x=x,y=log10(y),color=factor(w)))+
geom_point(size=4)+
geom_smooth(method=lm,aes(group=w,fill=factor(w)),fullrange=TRUE)+
facet_wrap(~w,nrow=2)+
scale_x_continuous(limit=c(.33,.5))
mod <- dlply(data, .(w), function(df) lm(log(y)~x, data = df))
我正在尝试使用预测函数,但它在列表上不起作用。所以我可以预测列表的一个元素
newdata<-data.frame(x=.5)
predict(mod[[1]],newdata,interval="confidence")
给出以下输出
fit lwr upr
1 0.8476424 0.5981407 1.097144
但是,我希望能够对列表的每个元素应用预测。我尝试使用库 nlme
来执行以下操作,但它没有给出置信区间。
library(nlme)
ll=lmList(log10(y)~x|w,data = data)
predict(ll,newdata,interval="confidence")
输出:
1 2 3 4
0.8476424 0.8042928 0.5818862 0.8633285
我使用 ggplot2 只是为了视觉辅助,但我需要置信区间边界处的实际值来计算预测 y
变量的范围。
如果您想 apply
列表的每个元素,lapply
(列表应用)是可行的方法:
do.call(rbind, lapply(mod, function(x) predict(x, newdata, interval="confidence")))
fit lwr upr
1 1.951769 1.3772699 2.526268
1 1.851953 1.4852869 2.218618
1 1.339843 0.1453728 2.534312
1 1.987887 1.4446006 2.531174
所以使用 lapply
,我们是 运行 我们的匿名函数 predict(x, newdata, interval="confidence"))
,其中 x 是 mod 的每个元素。 do.call 将列表输出转换为更好的矩阵。
我有一个适合分组数据的线性模型,它生成一个 lm 类型的对象列表。我想使用此线性模型来预测具有给定置信区间的给定 x 处的 y 值。我想要对变量 w 进行唯一预测。这是带有示例数据的代码:
x<-c(.34,.355,.37,.385,.34,.355,.37,.385,.34,.355,.37,.385,.34,.355,.37,.385)
y<-c(40,35,28,25,42,36,29,25,44,37,26,23,46,37,33,27)
w<-c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
data<-data.frame(x,y,w)
ggplot(data=data,aes(x=x,y=log10(y),color=factor(w)))+
geom_point(size=4)+
geom_smooth(method=lm,aes(group=w,fill=factor(w)),fullrange=TRUE)+
facet_wrap(~w,nrow=2)+
scale_x_continuous(limit=c(.33,.5))
mod <- dlply(data, .(w), function(df) lm(log(y)~x, data = df))
我正在尝试使用预测函数,但它在列表上不起作用。所以我可以预测列表的一个元素
newdata<-data.frame(x=.5)
predict(mod[[1]],newdata,interval="confidence")
给出以下输出
fit lwr upr
1 0.8476424 0.5981407 1.097144
但是,我希望能够对列表的每个元素应用预测。我尝试使用库 nlme
来执行以下操作,但它没有给出置信区间。
library(nlme)
ll=lmList(log10(y)~x|w,data = data)
predict(ll,newdata,interval="confidence")
输出:
1 2 3 4
0.8476424 0.8042928 0.5818862 0.8633285
我使用 ggplot2 只是为了视觉辅助,但我需要置信区间边界处的实际值来计算预测 y
变量的范围。
如果您想 apply
列表的每个元素,lapply
(列表应用)是可行的方法:
do.call(rbind, lapply(mod, function(x) predict(x, newdata, interval="confidence")))
fit lwr upr
1 1.951769 1.3772699 2.526268
1 1.851953 1.4852869 2.218618
1 1.339843 0.1453728 2.534312
1 1.987887 1.4446006 2.531174
所以使用 lapply
,我们是 运行 我们的匿名函数 predict(x, newdata, interval="confidence"))
,其中 x 是 mod 的每个元素。 do.call 将列表输出转换为更好的矩阵。