我是一名研究牛海带异速生长比例的博士生,我一直在尝试使用下面的代码将回归线和预测斜率线(斜率= 1)添加到我未记录数据的对数 - 对数图中,同时R将"运行"代码,适当的行不会出现在我的情节中。我认为它是日志缩放的一个问题,理想情况下我希望它看起来更像传统的日志图(比例为0.1,1,10,100,1000的轴)但我还没有。能够在R中弄清楚如何做到这一点。我已经包含了我正在使用的数据,我很感激您提供的任何帮助!
stipelengthcm - 1065.0 959.0 925.0 757.0 722.0 663.0 559.0 550.0 550.0 518.0 400.0 379.0 370.0 365.0 363.2 351.8 323.2 306.8 290.0 260.0 251.0 251.0 249.0 242.0 240.0 229.0 220.0 bulbwidthcm -10.0 16.0 7.8 10.0 10.0 8.5 5.0 6.0 6.0 4.6 4.4 5.6 5.0 7.0 4.2 4.4 5.4 5.4 5.6 6.0 4.0 3.8 4.6 5.0 4.6 5.5 5.4
library(lmodel2)
regrlogkelp<-lmodel2(log(stipelengthcm)~log(bulbwidthcm), data=logkelp, nperm=99)
regrlogkelp
plot(stipelengthcm, bulbwidthcm, log="xy", xlab = "Stipe Length (cm)", ylab = "Bulb Width (cm)", pch = 1, col = "black")
curve(exp(regrlogkelp$regression[3,2]) * x^(regrlogkelp$regression[3,3]), add = T)
var < -(mean(bulbwidthcm)/exp(regrlogkelp$regression[3,2]))^(1/regrlogkelp$regression[3,3])
curve((x^2)*(mean(bulbwidthcm)/var^2), add =T, lty = "dashed")
答案 0 :(得分:1)
您可以在R基础图形或ggplot2
中执行此操作。我们试试ggplot2
。
假设您的数据位于logkelp
,而您的回归位于regrlogkelp
。
首先从模型中做出预测。
#make predicted values
logkelp$logcurve1 <- regrlogkelp$regression[3,2] +
log(bulbwidthcm)*regrlogkelp$regression[3,3]
加载ggplot2
并询问点和预测线。
library(ggplot2)
ggplot(data=logkelp) +
#plots the points
geom_point(aes(x=bulbwidthcm, y=stipelengthcm)) +
#draws the prediction line; note that y here is exponentiated and matches your expression
geom_line(aes(x=bulbwidthcm, y=exp(logcurve1))) +
#put the x axis on the log scale and designate where tick marks will be
scale_x_log10(breaks=seq(0,20, by=1)) +
#put the y axis on the log scale and designate where tick marks will be
scale_y_log10(breaks=seq(0,2000, by=100)) +
#change from the default ggplot2 style
theme_bw(base_size = 15)
如果您愿意,可以更改轴标签和颜色。如果你想做自信乐队,请看看geom_ribbon()
我认为为什么你的情节没有出现是因为你的curve()
陈述的结果远远高于你的积分密谋区域。 R正在执行它,但您必须更改比例才能看到它。您正在混合exp()
和log()
。它也令人困惑,因为X和Y在回归和图表之间交换。
这实际上是R正在绘制curve()
的结果:
plot(stipelengthcm, bulbwidthcm, log="xy",
xlab = "Stipe Length (cm)", ylab = "Bulb Width (cm)", pch = 1, col = "black",
ylim=c(1,100000))