Подгоните линию к небольшим кратным
Я хочу поместить линию, которая проходит через среднее значение распределений выборки на общем графике. Этот код создает набор данных, аналогичный тому, который я использую. Он создает распределение выборки и отображает распределения на тех же графиках. Затем я рисую линию, проходящую через среднее распределение. Тем не менее, я хочу линию, которая подходит для всех средств распределения. Я думаю о чем-то вроде этой графики, найденной здесь.
means<-c(NULL)
sample<-rnorm(1000,-0.2,0.1)
A<-hist(sample,plot=FALSE)
means<-c(means,mean(sample))
sample<-rnorm(1000,-0.1,0.1)
B<-hist(sample,plot=FALSE)
means<-c(means,mean(sample))
sample<-rnorm(1000,0,0.1)
C<-hist(sample,plot=FALSE)
means<-c(means,mean(sample))
sample<-rnorm(1000,0.1,0.1)
D<-hist(sample,plot=FALSE)
means<-c(means,mean(sample))
sample<-rnorm(1000,0.2,0.1)
E<-hist(sample,plot=FALSE)
means<-c(means,mean(sample))
plot(NULL,type="n",
xlim=c(0,1250),
ylim=c(min(A$breaks,B$breaks,C$breaks,D$breaks,E$breaks),
max(A$breaks,B$breaks,C$breaks,D$breaks,E$breaks)),
xaxt="n",
xlab="Mean",
ylab="Sampling Distribution of The Mean")
labels<-c("-0.2","-0.1","0","0.1","0.2")
y.coord<-0
rect(y.coord, A$breaks[1:(length(A$breaks) - 1)], A$counts, A$breaks[2:length(A$breaks)])
axis(side=1,at=y.coord,labels=labels[1],las=3)
y.coord<-max(A$counts)+50
rect(y.coord, B$breaks[1:(length(B$breaks) - 1)], y.coord+B$counts, B$breaks[2:length(B$breaks)])
axis(side=1,at=y.coord,labels=labels[2],las=3)
y.coord<-y.coord+max(B$counts)+50
rect(y.coord, C$breaks[1:(length(C$breaks) - 1)], y.coord+C$counts, C$breaks[2:length(C$breaks)])
axis(side=1,at=y.coord,labels=labels[3],las=3)
y.coord<-y.coord+max(C$counts)+50
rect(y.coord, D$breaks[1:(length(D$breaks) - 1)], y.coord+D$counts, D$breaks[2:length(D$breaks)])
axis(side=1,at=y.coord,labels=labels[4],las=3)
y.coord<-y.coord+max(D$counts)+50
rect(y.coord, E$breaks[1:(length(E$breaks) - 1)], y.coord+E$counts, E$breaks[2:length(E$breaks)])
axis(side=1,at=y.coord,labels=labels[5],las=3)
abline(a=means[1],b=0,col="red")
abline(a=means[2],b=0,col="red")
abline(a=means[3],b=0,col="red")
abline(a=means[4],b=0,col="red")
abline(a=means[5],b=0,col="red")
Этот вопрос является продолжением моего вопроса здесь. Как вы можете видеть, я создал обходной график, чтобы отобразить все маленькие множители. Тем не менее, у меня все еще есть проблемы с линией подгонки.
Я ценю ваше рассмотрение этой проблемы.
1 ответ
Я знал это lines()
или же abline()
добавил бы строку, но по какой-то причине все мои глупые попытки продолжали проваливаться. Затем я снова посмотрел на ваш код и на этот раз вижу, что ось x на самом деле не -0,2 - 0,2, а 0 - 1250. Вот почему мои попытки на моем компьютере делали почти вертикальные линии.
Итак, имея это в виду:
x_line_val <- seq(1, 1250, length.out=5)
abline(lm(means ~ x_line_val), col="blue")
Вы можете использовать также использовать lines(x=x_line_val, y=means)
вместо abline()
и линия больше похожа на отрезок.
Чтобы напечатать уравнение линий на графике, это своего рода скелет, но вы можете настроить его:
figs1 <- summary(lm(means~x_line_val))$coef[c(1,2)] #get your intercept and beta1 values
eq1 <- paste0("y ~ ",round(figs1[1],5)," + x",round(figs1[2],5)) #write out equation
text(x=600, y=0.48, labels=eq1) #add equation to plot
Конечно, это уравнение для x/ независимого значения, масштабированного на несколько величин больше, чем вы иллюстрируете, поэтому я думаю, что это уравнение действительно неверно. По крайней мере, это на самом деле не представляет то, что показывает график. Поэтому вам нужно сделать новую регрессию, где "x_line_val" заменяется новой версией в правильном масштабе.