分析实验的模拟复制

Analyze simulated replicate of an experiment

我正在尝试为实验模拟数据(学习目的,自学) 目的是看看随着距离(以厘米为单位)的增加,我的变量如何减少(我实际上期望真实数据的减少将不是线性的)。围绕我的预期值生成 5 个重复,每个表示为 e1、e2 等。4 个距离以 cm

表示

这是矩阵:

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 等,并且度量是否与 2cm、12cm 等相关

我最接近的是 melt()

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

在这里我可以获得各自的距离和值度量但不是属于哪个实验(e1,e2等..)

如何添加这个参数?我尝试添加(e1、e2 等)作为一个因素,但仍然无法正确地融化列表

任何帮助都会很棒

使用 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

你也知道为什么我不能用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()