Как я могу генерировать данные из построенной линии в R?

#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)

  

введите описание изображения здесь