Анализировать смоделированную копию эксперимента - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь смоделировать данные для эксперимента (цель обучения, самоучка) Цель состоит в том, чтобы увидеть, как с увеличением расстояния (в см) моя переменная уменьшается (на самом деле я ожидаю, что с реальными данными уменьшение будет нелинейным). 5 копий, сгенерированных вокруг моего ожидаемого значения, каждое обозначено как e1, e2 и т. Д. И 4 расстояния указаны в см

Итак, это матрица:

dis2 <- rnorm(5, mean = 0.25, sd = 0.01)
dis12 <- rnorm(5, mean = 0.22, sd = 0.01)
dis24 <- rnorm(5, mean = 0.19, sd = 0.01)
dis36 <- rnorm(5, mean = 0.16, sd = 0.01)

mat <- matrix(c(dis2, dis12, dis24, dis36), ncol=5, byrow = TRUE)
tmat <- t(mat)
dfmat <- as.data.frame(tmat)
colnames(dfmat) <- c("2cm", "12cm", "24cm", "36cm")
rownames(dfmat) <- c("e1", "e2", "e3", "e4", "e5")

Теперь я хочу построить 3-колоночный фрейм данных, где каждая мера имеет значение, но также, если эти значения принадлежат e1, e2 и т. Д., И если мера относится к 2 см, 12 см и т. Д.

Самое близкое, что я мог прийти - это melt ()

list <- as.list(dfmat)
melted <- melt(list)

Здесь я могу получить соответствующую меру расстояния и значения, но не к какому эксперименту (e1, e2 и т. Д.) Относится

Как я могу добавить этот параметр? Я пытался добавить (e1, e2 и т. Д.) Как фактор, но все еще не удается правильно растопить список

Любая помощь будет отличной

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Вы также знаете, почему тогда я не могу построить подходящую линию с помощью geom_stath?

#First I've ordered the factor with increasing distance 
ndfmat$decreased <- factor(ndfmat$decrease, levels = c("2cm", "12cm", "24cm", "36cm"))
ndfmat$decrease <- NULL`


library(ggplot2) 
ggplot(data=ndfmat, aes(x=ndfmat$decreased, y=ndfmat$val)) +
geom_point() +
geom_smooth()
0 голосов
/ 15 сентября 2018

Используя структуру tidyverse, мы можем переместить имена строк в столбец, а затем соответствующим образом развернуть.

library(dplyr)
library(tibble)
library(tidyr)

dfmat %>% 
  as.data.frame() %>%
  rownames_to_column("experiment") %>%
  gather('decrease', 'val', `2cm`:`36cm`)

   experiment decrease       val
1          e1      2cm 0.2602702
2          e2      2cm 0.2446041
3          e3      2cm 0.2652482
4          e4      2cm 0.2292223
5          e5      2cm 0.2431740
6          e1     12cm 0.2203435
7          e2     12cm 0.2324304
8          e3     12cm 0.2299671
9          e4     12cm 0.2113966
10         e5     12cm 0.2186454
11         e1     24cm 0.1847289
12         e2     24cm 0.1999656
13         e3     24cm 0.1766850
14         e4     24cm 0.1946892
15         e5     24cm 0.1902934
16         e1     36cm 0.1594713
17         e2     36cm 0.1574840
18         e3     36cm 0.1763698
19         e4     36cm 0.1651663
20         e5     36cm 0.1517848

Тем не менее, вы можете пропустить обходной способ создания тестового набора.с:

dat <- data.frame(
  experiment = rep(c("e1", "e2", "e3", "e4", "e5"), 4),
  decrease = rep(c("2cm", "12cm", "24cm", "36cm"), each = 5),
  val = c(dis2, dis12, dis24, dis36)
)

> dat
   experiment decrease       val
1          e1      2cm 0.2602702
2          e2      2cm 0.2446041
3          e3      2cm 0.2652482
4          e4      2cm 0.2292223
5          e5      2cm 0.2431740
6          e1     12cm 0.2203435
7          e2     12cm 0.2324304
8          e3     12cm 0.2299671
9          e4     12cm 0.2113966
10         e5     12cm 0.2186454
11         e1     24cm 0.1847289
12         e2     24cm 0.1999656
13         e3     24cm 0.1766850
14         e4     24cm 0.1946892
15         e5     24cm 0.1902934
16         e1     36cm 0.1594713
17         e2     36cm 0.1574840
18         e3     36cm 0.1763698
19         e4     36cm 0.1651663
20         e5     36cm 0.1517848
...