gpt4 book ai didi

r - 用自由度绘制学生的 t 分布

转载 作者:行者123 更新时间:2023-12-01 13:11:24 25 4
gpt4 key购买 nike

我想绘制自由度为 1、2、5 和 10 的 Student t 分布;所有在一个图中,并为图中的每个分布使用不同的颜色。此外,在 Canvas 的左上角创建一个图例,并增加 df = 1 的曲线线宽。

我可以这样做,但我不确定是否有更好更快的方法来做到这一点:

x <- seq(-3, 3, length=1000)
hx <- dnorm(x)

degf <- c(1, 2, 5, 10)
colors <- c("red", "blue", "darkgreen", "gold", "black")
labels <- c("df=1", "df=2", "df=5", "df=10", "normal")

plot(x, hx, type="l", lty=1, xlab="x value",
ylab="Density", main="Comparison of t Distributions")

for (i in 1:4){

if (i == 1) {
lines(x, dt(x,degf[i]), lwd=3, col=colors[i])
}
else
{
lines(x, dt(x,degf[i]), lwd=1, col=colors[i])
}
}

legend("topleft", inset=.05, title="Distributions",
labels, lwd=1, lty=c(1, 1, 1, 1, 1), col=colors)

enter image description here

最佳答案

您的代码很好,对读者来说是可读且显而易见的。

如果你想使用一些矢量化,你可以用 for 代替单个循环 mapply , 看这里:

x = seq(-3, 3, length=1000)
hx = dnorm(x)

degf = c(1, 2, 5, 10)
colors = c("red", "blue", "darkgreen", "gold", "black")
labels = c("df=1", "df=2", "df=5", "df=10", "normal")
plot(x, hx, type="l", lty=1, xlab="x value",
ylab="Density", main="Comparison of t Distributions")

#The relevant modification
mapply(function(DoF, W, C) lines(x, dt(x, DoF), lwd=W, col=C), DoF = degf, W = c(3,1,1,1), C = colors[-5])

legend("topleft", inset=.05, title="Distributions",
labels, lwd=1, lty=c(1, 1, 1, 1, 1), col=colors)

看到它不再那么易读了,虽然它可能更有效,但从可维护性或通信的角度来看,它并不是一件好事。您必须始终牢记这种平衡。

你的代码不依赖于性能,所以我认为我的改进根本没有改善任何东西。

关于r - 用自由度绘制学生的 t 分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49236741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com