分析实验的模拟复制
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()
我正在尝试为实验模拟数据(学习目的,自学) 目的是看看随着距离(以厘米为单位)的增加,我的变量如何减少(我实际上期望真实数据的减少将不是线性的)。围绕我的预期值生成 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()