#r #scatter #standard-deviation #line-plot #data-generation
#r #scatter #стандартное отклонение #линия-график #генерация данных
Вопрос:
У меня нет набора данных, только две построенные линии, и я хочу сгенерировать разбросанные данные по оси y на 2 стандартных отклонения от среднего значения (построенная линия). Вот мой код для строки:
ggplot()
lims(x = c(0,20), y = c(0,1))
annotate("segment",x = .1,xend = 5, yend = .25, y = .1)
annotate("segment",x = 5,xend = 20, yend = .35,y = .25)
Извините, если этот пост неясен, но я не уверен, что лучший способ объяснить это. Дайте мне знать, если у вас есть какие-либо вопросы или если то, что я пытаюсь сделать, невозможно.
Комментарии:
1. То, что вы пытаетесь сделать, возможно. 1) Подгоните линии к вашим сегментам (так, чтобы вы получили y = ax b для каждого) 2) выберите значения x, чтобы получить значения y, которые вы называете «средними». 3) используйте
rnorm(n, mean)
для каждого из ваших x, чтобы получить нужное вам распределение2. Хорошо, я вроде понимаю, что вы говорите. 1) Я нашел наклоны (0,09 и 0,0067) и изменил свои строки так, чтобы перехват был равен 0, чтобы упростить ситуацию. 2) Мои значения x дискретно равны 1: 20. Я понимаю, что могу включить их в уравнение, чтобы найти y. 3) Я не понимаю, что или почему на этом шаге.
3. Номер 3 соответствует вашему запросу на генерацию разбросанных данных вокруг каждого значения y (x). Вы должны подключить любую SD-карту, которую хотите
Ответ №1:
Вот пример для одной из имеющихся у вас строк (я не перепроверял y = 0.09*x 0
, согласуется ли это с тем, что вы показали, руководствуясь своим ответом из вашего комментария).
library(ggplot2)
library(dplyr)
df <- tibble(x=1:20,
y1=0.09*x,
y2=0.0067*x)
# generate dots for y1
# mean y1 and sd = 1
sapply(df$y1, function(tt) rnorm(10, tt)) %>%
# make it into tibble
as_tibble() %>%
# pivot into longer format
tidyr::pivot_longer(everything()) %>%
# names of the columns get assigned to V1 V2 ...
# we can clean that and get the actual x
# this works nicely because your x=1:20, will fail otherwise
mutate(X=as.numeric(stringr::str_remove(name, "V"))) %>%
# plot the thing
ggplot(aes(X, value))
geom_point()
# add the "mean" values from before
geom_point(data=df, aes(x, y1), col="red", size=2)