我正在尝试将两条回归线绘制到同一散点图上。看起来我使用ggplot几乎正确。我有一个拟合,使用二阶项,而另一个拟合是小时的倒数是因变量,而个案的倒数是预测变量。数据如下:
df <- read.table(textConnection(
'hours cases
1275 230
1350 235
1650 250
2000 277
3750 522
4222 545
5018 625
6125 713
6200 735
8150 820
9975 992
12200 1322
12750 1900
13014 2022
13275 2155
'), header = TRUE)
我有以下内容,但逆回归拟合似乎不合时宜。可以进行哪些调整以获得正确的曲线?我知道曲线应该向上凹并逐渐增加。
ggplot(df, aes(x = cases, y = hours)) +
geom_point(shape=21, size=3.2,fill="green",color="black")+
geom_smooth(span=.4,method="lm",formula=y~x+I(x^2))+
geom_smooth(span=.4,method="lm",formula=I(1/y)~I(1/x))
作为参考,只是y的预测值与x的散点图,其中,y轴是1 / y的预测值的倒数,我们得到
用于生成此代码的代码是
fit<-lm(I(1/hours)~I(1/cases),data=df)
summary(fit)
hw <- theme(
plot.title=element_text(hjust=0.5,face='bold'),
axis.title.y=element_text(angle=0,vjust=.5,face='bold'),
axis.title.x=element_text(face='bold'),
plot.subtitle=element_text(hjust=0.5),
plot.caption=element_text(hjust=-.5),
strip.text.y = element_blank(),
strip.background=element_rect(fill=rgb(.9,.95,1),
colour=gray(.5), size=.2),
panel.border=element_rect(fill=FALSE,colour=gray(.70)),
panel.grid.minor.y = element_blank(),
panel.grid.minor.x = element_blank(),
panel.spacing.x = unit(0.10,"cm"),
panel.spacing.y = unit(0.05,"cm"),
axis.ticks=element_blank(),
axis.text=element_text(colour="black"),
axis.text.y=element_text(margin=margin(0,3,0,3)),
axis.text.x=element_text(margin=margin(-1,0,3,0)),
panel.background = element_rect(fill = "gray")
)
ggplot(df,aes(x=cases,y=1/fitted(fit))) +
geom_point(shape=21, size=3.2,fill="green",color="black")+
labs(x="Surgical Cases",
y="Predicted Worker Hours",
title="Predicted Worker Hours vs Surgical Cases")+hw
答案 0 :(得分:2)
这应该使您入门。包括置信区间将需要额外的工作(例如,计算ggplot2之外的置信带的值)。我将其留给读者练习。
fit2 <- lm(I(1/hours)~I(1/cases), data = df)
ggplot(df, aes(x = cases, y = hours)) +
geom_point(shape=21, size=3.2,fill="green",color="black")+
geom_smooth(span=.4,method="lm",formula=y~x+I(x^2), aes(color = "polyn"))+
stat_function(fun = function(x) 1 / predict(fit2, newdata = data.frame(cases = x)),
aes(color = "inv-inv"), size = 1)
答案 1 :(得分:0)
正如@Roland所说,您需要绘制实际模型。
但是,问题是geom_smooth的公式参数不喜欢公式。因此,即使下面的公式正确,它也不会画出正确的线。
使用summary(fit)得到a(-0.00005507)和b(0.1743),直线的截距和斜率:
SELECT CONCAT(FIRST_NAME,',',LAST_NAME) as full_name FROM EMPLOYEES;