我试图在数据集中添加回归线方程和R平方值,其中y轴值以对数标度表示,就像在这个excel示例中一样:
数据框包含以下数据,包含3个变量和28个障碍物:
Method void.ratio permeability_m.s
1 Constant load 1.360 1.82e-05
2 Constant load 1.360 1.79e-05
3 Constant load 1.190 7.74e-06
4 Constant load 1.190 5.15e-06
5 Variable load 1.040 1.57e-06
6 Variable load 1.040 1.71e-06
7 Variable load 1.040 1.57e-06
8 Variable load 1.040 1.71e-06
9 Triaxial test 0.780 3.00e-07
10 Triaxial test 0.780 2.70e-07
11 Oedometric test 1 0.690 1.33e-07
12 Oedometric test 1 0.685 5.84e-08
13 Oedometric test 2 0.697 3.35e-07
14 Oedometric test 2 0.629 2.85e-07
15 Oedometric test 2 0.554 7.75e-08
16 Oedometric test 2 0.526 3.27e-09
17 Oedometric test 2 0.528 4.71e-09
18 Oedometric test 2 0.530 4.72e-09
19 Oedometric test 2 0.534 6.70e-09
20 Oedometric test 3 0.705 1.34e-07
21 Oedometric test 3 0.648 1.23e-07
22 Oedometric test 3 0.574 8.29e-08
23 Oedometric test 3 0.530 8.77e-08
运行以下代码后,我只获得回归线,但我无法获得回归方程和R平方值。
R代码:
plot_lab_permeability2<- ggplot(Lab_permeability2,aes(void.ratio, permeability_m.s))+
geom_point(size=3,aes(shape = Method, colour = Method))+
geom_smooth(method="lm",formula= (y ~ x), se=FALSE, linetype = 8,color="grey") +
scale_shape_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"),
values=c("Constant load"=15,"Variable load"=17,"Triaxial test"=18,"Oedometric test 1"=16,"Oedometric test 2"=16,"Oedometric test 3"=16))+
scale_colour_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"),
values = c("Constant load"="darkblue","Variable load"="blue","Triaxial test"="darkgreen","Oedometric test 1"="darkred","Oedometric test 2"="red","Oedometric test 3"="orange"))+
scale_y_continuous(limits = c((1e-9),(1e-4)), trans="log10") +
labs(x=expression ("Void ratio (-)"),y = expression ("Saturated hydraulic conductivity (m/s)"),title="") +
theme_bw()
这是生成的情节:
我一直在阅读类似的问题并尝试不同的方法,但经过几个小时的尝试,我无法找到解决方案。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
您可以窃取/稍微修改SO提问者here使用的功能:
library(ggplot2)
lm_eqn <- function(df, model_fit){
# From a past Stack Overflow question
eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = format(coef(model_fit)[1], digits = 2),
b = format(coef(model_fit)[2], digits = 2),
r2 = format(summary(model_fit)$r.squared, digits = 3)))
as.character(as.expression(eq));
}
# I think you intend to log transform here?
model_fit <- lm(log10(permeability_m.s) ~ void.ratio, Lab_permeability2)
plot_lab_permeability2 <- ggplot(Lab_permeability2, aes(void.ratio, permeability_m.s)) +
geom_point(size=3,aes(shape = Method, colour = Method))+
geom_smooth(method="lm",formula= (y ~ x), se=FALSE, linetype = 8,color="grey") +
scale_shape_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"),
values=c("Constant load"=15,"Variable load"=17,"Triaxial test"=18,"Oedometric test 1"=16,"Oedometric test 2"=16,"Oedometric test 3"=16))+
scale_colour_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"),
values = c("Constant load"="darkblue","Variable load"="blue","Triaxial test"="darkgreen","Oedometric test 1"="darkred","Oedometric test 2"="red","Oedometric test 3"="orange"))+
scale_y_continuous(limits = c((1e-9),(1e-4)), trans="log10") +
labs(x=expression ("Void ratio (-)"),y = expression ("Saturated hydraulic conductivity (m/s)"),title="") +
geom_text(aes(x = 0.55, y = 0.5e-4, label = lm_eqn(Lab_permeability2, model_fit)),
size=5, hjust=0, parse = TRUE, check_overlap = TRUE) +
theme_bw()
plot_lab_permeability2
结果:
答案 1 :(得分:0)
Lab_permeability2$lnperm <- log(Lab_permeability2$permeability_m.s)
然后你可以拟合回归方程:
model_fit <- lm(lnperm ~ void.ratio, Lab_permeability2)
你的系数当然不会相同......
呼叫: lm(formula = lnperm~void.ratio,data = Lab_permeability2)
系数: (拦截)void.ratio
-21.993 8.406
你应该改变轴来显示ln
ggplot(Lab_permeability2, aes(void.ratio, lnperm)) +
geom_point(size=3,aes(shape = Method, colour = Method))+
geom_smooth(method="lm",formula= (y ~ x), se=FALSE, linetype = 8,color="grey") +
scale_shape_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"),
values=c("Constant load"=15,"Variable load"=17,"Triaxial test"=18,"Oedometric test 1"=16,"Oedometric test 2"=16,"Oedometric test 3"=16)) +
scale_colour_manual("",breaks = c("Constant load","Variable load","Triaxial test","Oedometric test 1","Oedometric test 2","Oedometric test 3"),
values = c("Constant load"="darkblue","Variable load"="blue","Triaxial test"="darkgreen","Oedometric test 1"="darkred","Oedometric test 2"="red","Oedometric test 3"="orange")) +
# scale_y_continuous(limits = c((1e-9),(1e-4)), trans="log") +
labs(x=expression ("Void ratio (-)"),y = expression ("Natural Log Saturated hydraulic conductivity (m/s)"),title="") +
geom_text(aes(x = 0.55, y = -12, label = lm_eqn(Lab_permeability2, model_fit)),
size=5, hjust=0, parse = TRUE, check_overlap = TRUE) +
theme_bw()
这会产生
因此,对于1.0的void.ratio值,我们可以预期8.406 - 21.993 = -13.587,这似乎是图表显示的...转换回原始比例
exp(8.406 - 21.993)
[1] 1.256727e-06
我不清楚为什么你认为它应该是1.34e-6虽然对于初学者你只给了我们前面23个你所说的28个观察