简体   繁体   English

单个图中的多元线性回归

[英]Multiple linear regressions in a single plot

Sorry in advance is there is something wrong or confusing, I'm just a biologist with some basic R.提前抱歉,有什么问题或令人困惑,我只是一个有一些基本 R 的生物学家。

First of all I'll give some insight in the idea behind the script.首先,我将对脚本背后的想法给出一些见解。 I did some experiments where flies were exposed to different ramps of increasing temperatures, using a self-built device for this purpose.我做了一些实验,让苍蝇暴露在温度升高的不同坡度下,为此使用了一个自制的设备。 Having the need to know if the device increases the temperature correctly, I had to make calibration curves for every ramp.需要知道设备是否正确升高温度,我必须为每个斜坡制作校准曲线。 Calibration curves were measured over time with a temperature sensor.使用温度传感器随时间测量校准曲线。

dput of my first df datos (data in spanish) that is a resume of the temperature measured for 3 different ramps (0,06 °C/min, 0,12 °C/min, 0,25°C/min)我的第一个dput datos (西班牙语数据)的输出是 3 个不同斜坡(0.06 °C/分钟、0.12 °C/分钟、0.25°C/分钟)测量的温度的恢复

structure(list(date2 = c("03/02/2021", "03/02/2021", "03/02/2021", 
"03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", 
"03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", 
"03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", 
"03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", 
"03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", "03/02/2021", 
"03/02/2021", "03/02/2021"), time2 = c("14:56:32", "14:56:42", 
"14:56:52", "14:57:02", "14:57:12", "14:57:22", "14:57:32", "14:57:42", 
"14:57:52", "14:58:02", "14:58:12", "14:58:22", "14:58:32", "14:58:42", 
"14:58:52", "14:59:02", "14:59:12", "14:59:22", "14:59:32", "14:59:42", 
"14:59:52", "15:00:02", "15:00:12", "15:00:22", "15:00:32", "15:00:42", 
"15:00:52", "15:01:02", "15:01:12", "15:01:22"), temperature = c(25.2, 
25.8, 25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 25.7, 25.5, 25.6, 25.5, 
25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 25.6, 
25.6, 25.6, 25.8, 25.8, 25.8, 25.8, 25.8), grupo = c("voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft"), segundos = c(1L, 
11L, 21L, 31L, 41L, 51L, 61L, 71L, 81L, 91L, 101L, 111L, 121L, 
131L, 141L, 151L, 161L, 171L, 181L, 191L, 201L, 211L, 221L, 231L, 
241L, 251L, 261L, 271L, 281L, 291L), id3 = 1:30, curva = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("a", 
"b", "c", "d", "e", "f", "g", "h", "i", "j"), class = "factor"), 
    modo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L), .Label = "h", class = "factor"), sujeto = c("agus", 
    "agus", "agus", "agus", "agus", "agus", "agus", "agus", "agus", 
    "agus", "agus", "agus", "agus", "agus", "agus", "agus", "agus", 
    "agus", "agus", "agus", "agus", "agus", "agus", "agus", "agus", 
    "agus", "agus", "agus", "agus", "agus"), tamb = c(26.7, 26.7, 
    26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 
    26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 
    26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7, 26.7), tratamiento = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0.06", 
    "0.125", "0.25"), class = "factor"), datetime = structure(c(1612364192, 
    1612364202, 1612364212, 1612364222, 1612364232, 1612364242, 
    1612364252, 1612364262, 1612364272, 1612364282, 1612364292, 
    1612364302, 1612364312, 1612364322, 1612364332, 1612364342, 
    1612364352, 1612364362, 1612364372, 1612364382, 1612364392, 
    1612364402, 1612364412, 1612364422, 1612364432, 1612364442, 
    1612364452, 1612364462, 1612364472, 1612364482), class = c("POSIXct", 
    "POSIXt"), tzone = "GMT")), row.names = c(NA, 30L), class = "data.frame")

dput of a df datos2 that is the same resume of calibration curves, but filtered for well measured curves (those with the smallest possible variation). df dputdatos2与校准曲线的恢复相同,但已针对良好测量的曲线(具有尽可能小的变化的曲线)进行了过滤。

structure(list(date2 = c("01/03/2021", "01/03/2021", "01/03/2021", 
"01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", 
"01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", 
"01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", 
"01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", 
"01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", "01/03/2021", 
"01/03/2021", "01/03/2021"), time2 = c("10:24:28", "10:24:38", 
"10:24:48", "10:24:58", "10:25:08", "10:25:18", "10:25:28", "10:25:38", 
"10:25:48", "10:25:58", "10:26:08", "10:26:18", "10:26:28", "10:26:38", 
"10:26:48", "10:26:58", "10:27:08", "10:27:18", "10:27:28", "10:27:38", 
"10:27:48", "10:27:58", "10:28:08", "10:28:18", "10:28:28", "10:28:38", 
"10:28:48", "10:28:58", "10:29:08", "10:29:18"), temperature = c(26.2, 
26.8, 26.6, 26.7, 26.7, 26.7, 26.7, 26.8, 26.8, 26.8, 26.9, 26.8, 
26.8, 26.7, 26.6, 26.6, 26.7, 26.6, 26.7, 26.7, 26.6, 26.6, 26.6, 
26.7, 26.6, 26.9, 26.8, 26.8, 26.8, 26.8), grupo = c("voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft", "voltcraft", 
"voltcraft", "voltcraft", "voltcraft", "voltcraft"), segundos = c(1L, 
11L, 21L, 31L, 41L, 51L, 61L, 71L, 81L, 91L, 101L, 111L, 121L, 
131L, 141L, 151L, 161L, 171L, 181L, 191L, 201L, 211L, 221L, 231L, 
241L, 251L, 261L, 271L, 281L, 291L), id3 = 5315:5344, curva = structure(c(4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("a", 
"b", "c", "d", "e", "f", "g", "h", "i", "j"), class = "factor"), 
    modo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L), .Label = "h", class = "factor"), sujeto = c("agus", 
    "agus", "agus", "agus", "agus", "agus", "agus", "agus", "agus", 
    "agus", "agus", "agus", "agus", "agus", "agus", "agus", "agus", 
    "agus", "agus", "agus", "agus", "agus", "agus", "agus", "agus", 
    "agus", "agus", "agus", "agus", "agus"), tamb = c(28, 28, 
    28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 
    28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28), tratamiento = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0.06", 
    "0.125", "0.25"), class = "factor"), datetime = structure(c(1614594268, 
    1614594278, 1614594288, 1614594298, 1614594308, 1614594318, 
    1614594328, 1614594338, 1614594348, 1614594358, 1614594368, 
    1614594378, 1614594388, 1614594398, 1614594408, 1614594418, 
    1614594428, 1614594438, 1614594448, 1614594458, 1614594468, 
    1614594478, 1614594488, 1614594498, 1614594508, 1614594518, 
    1614594528, 1614594538, 1614594548, 1614594558), class = c("POSIXct", 
    "POSIXt"), tzone = "GMT")), row.names = c(NA, 30L), class = "data.frame")

Essentially is the same df just filtered as it follows基本上是相同的 df 只是过滤如下

datos2=datos %>% filter((tratamiento == "0.125" & segundos < 4001 & (curva == 
"a" | curva == "b"|curva == "c" | curva == "d" | curva == "f")) | (tratamiento 
== "0.25" & segundos < 4001 & (curva == "a" | curva == "e" | curva == "j")) | 
(tratamiento == "0.06" & segundos < 4001 & (curva == "d" | curva == "e"| curva == "f")) )

Plot of datos2 for 3 different ramps (this will be needed as an idea for the final plot) 3 个不同斜坡的datos2图(这将需要作为最终图的想法)

在此处输入图像描述

Next I used a linear model (tested the assumptions as well) so I could get the real coefficients and with that the "real" slope of each curve that relates to the real increasing temperature.接下来,我使用了一个线性模型(也测试了假设),因此我可以获得实际系数以及与实际升高温度相关的每条曲线的“实际”斜率。 For this chunk I used对于我使用的这个块

modelo <- lm(datos2$temperature~datos2$segundos*datos2$tratamiento)

Coefficients obtained by linear model (slope in minutes):通过线性模型获得的系数(以分钟为单位的斜率):

> data.frame(modelo$coefficients)
                                        modelo.coefficients
(Intercept)                                   26.3091784959
datos2$segundos                                0.0006260104
datos2$tratamiento0.125                       -1.0105069266
datos2$tratamiento0.25                        -1.2511820668
datos2$segundos:datos2$tratamiento0.125        0.0015812593
datos2$segundos:datos2$tratamiento0.25         0.0047528818
#0.06
modelo$coefficients[1]=25 #intercept
round(modelo$coefficients[2]*60,3) #slope 

#0.125
modelo$coefficients[1]+modelo$coefficients[3]
round((modelo$coefficients[2]+modelo$coefficients[5])*60,3)

#0.25
modelo$coefficients[1]+modelo$coefficients[4]
round((modelo$coefficients[2]+modelo$coefficients[6])*60,3)

Summed up总结

0.06 <- 0.038
0.125 <- 0.132
0.25 <- 0.323

Finally, I tried to merge all of this in a single plot.最后,我尝试将所有这些合并到一个图中。 For this I generated a predicted ramp using the estimated ramp equation for each treatment (each curve).为此,我使用每个处理(每条曲线)的估计斜坡方程生成了一个预测斜坡。 I used a small vector for this (10800 as last number so all curves intersect X at the same time).我为此使用了一个小向量(10800 作为最后一个数字,因此所有曲线同时与 X 相交)。 And last I applied predict as a function to apply estimated equation to calculate Y that should be expected.最后我将预测作为一个函数来应用估计方程来计算应该预期的 Y。 This is where I get all kind of errors that I dont understand and couldnt resolve.这是我遇到各种我不理解和无法解决的错误的地方。

new_datos <- data.frame(segundos = rep(seq(0,10800,length.out=100),3),tratamiento = c(rep("0.06",200),rep("0.125",200),rep("0.25",200)))

dput of new_datos dputnew_datos

structure(list(segundos = c(0, 109.090909090909, 218.181818181818, 
327.272727272727, 436.363636363636, 545.454545454545, 654.545454545455, 
763.636363636364, 872.727272727273, 981.818181818182, 1090.90909090909, 
1200, 1309.09090909091, 1418.18181818182, 1527.27272727273, 1636.36363636364, 
1745.45454545455, 1854.54545454545, 1963.63636363636, 2072.72727272727, 
2181.81818181818, 2290.90909090909, 2400, 2509.09090909091, 2618.18181818182, 
2727.27272727273, 2836.36363636364, 2945.45454545455, 3054.54545454545, 
3163.63636363636), tratamiento = c("0.06", "0.06", "0.06", "0.06", 
"0.06", "0.06", "0.06", "0.06", "0.06", "0.06", "0.06", "0.06", 
"0.06", "0.06", "0.06", "0.06", "0.06", "0.06", "0.06", "0.06", 
"0.06", "0.06", "0.06", "0.06", "0.06", "0.06", "0.06", "0.06", 
"0.06", "0.06")), row.names = c(NA, 30L), class = "data.frame")

Rest of the script for linear model:线性模型的其余脚本:

b <- data.frame(predict.lm(modelo,data=new_datos,interval = "prediction"))


nrow(b)
new_datos$temperature <- b[,1]
new_datos$lwr <- b[,2]
new_datos$upr <- b[,3]
new_datos[new_datos$segundos==0]
levels(new_datos$tratamiento)[levels(datos$tratamiento)=="0.06"] <- "0.038 ºC/min"
levels(new_datos$tratamiento)[levels(datos$tratamiento)=="0.125"] <- "0.132 ºC/min"
levels(new_datos$tratamiento)[levels(datos$tratamiento)=="0.25"] <- "0.323 ºC/min"

# Split datos into Training and Testing
sample_size = floor(0.2*nrow(datos2))
# randomly split datos 
picked = sample(seq_len(nrow(datos2)),size = sample_size)
development =datos2[picked,]

And errors for this last part最后一部分的错误

> b <- data.frame(predict.lm(modelo,data=new_datos,interval = "prediction"))
Warning message:
In predict.lm(modelo, data = new_datos, interval = "prediction") :
  predictions on current data refer to _future_ responses

> new_datos$temperature <- b[,1]
Error in `$<-.data.frame`(`*tmp*`, temperature, value = c(25.0006260103883,  : 
  replacement has 7452 rows, data has 600
> new_datos$lwr <- b[,2]
Error in `$<-.data.frame`(`*tmp*`, lwr, value = c(22.6325633882165, 22.638854566693,  : 
  replacement has 7452 rows, data has 600
> levels(new_datos$tratamiento)[levels(datos$tratamiento)=="0.06"] <- "0.038 ºC/min"
Error in `levels<-`(`*tmp*`, value = c("0.038 ºC/min", NA, NA)) : 
  factor level [3] is duplicated
> levels(new_datos$tratamiento)[levels(datos$tratamiento)=="0.125"] <- "0.132 ºC/min"
Error in `levels<-`(`*tmp*`, value = c(NA, "0.132 ºC/min", NA)) : 
  factor level [3] is duplicated

Question is: Is there a way to get every curve (might be in grey in the back) in the Sup.3.问题是:有没有办法获得 Sup.3 中的每条曲线(后面可能是灰色的)。 in a single plot and in addition 3 curves for every coefficient (slope) calculated superimposed over the curves (in grey in the back)?在单个图中,另外还有 3 条曲线计算叠加在曲线上的每个系数(斜率)(背面为灰色)?

Thanks!谢谢!

EDIT:编辑:

Minimum reproducible example:最小可重现示例:

    temperature segundos curva tratamiento
1          25.2        1     a        0.06
2          25.8       11     a        0.06
3          25.6       21     a        0.06
4          25.6       31     a        0.06
5          25.6       41     a        0.06
6          25.6       51     a        0.06
7          25.6       61     a        0.06
8          25.6       71     a        0.06
9          25.7       81     a        0.06
10         25.5       91     a        0.06
11         25.6      101     a        0.06
12         25.5      111     a        0.06
13         25.6      121     a        0.06
14         25.6      131     a        0.06
15         25.6      141     a        0.06
16         25.6      151     a        0.06
17         25.6      161     a        0.06
18         25.6      171     a        0.06
19         25.6      181     a        0.06
20         25.6      191     a        0.06
21         25.6      201     a        0.06
22         25.6      211     a        0.06
23         25.6      221     a        0.06
24         25.6      231     a        0.06
25         25.6      241     a        0.06
26         25.8      251     a        0.06
27         25.8      261     a        0.06
28         25.8      271     a        0.06
29         25.8      281     a        0.06
30         25.8      291     a        0.06
31         25.7      301     a        0.06
32         25.8      311     a        0.06
33         25.7      321     a        0.06
34         25.7      331     a        0.06
35         25.8      341     a        0.06
36         25.8      351     a        0.06
37         25.7      361     a        0.06
38         25.7      371     a        0.06
39         25.7      381     a        0.06
40         25.9      391     a        0.06
41         25.9      401     a        0.06
42         25.9      411     a        0.06
43         25.9      421     a        0.06
44         25.9      431     a        0.06
45         25.9      441     a        0.06
46         25.9      451     a        0.06
47         25.9      461     a        0.06
48         25.9      471     a        0.06
49         25.9      481     a        0.06
50         25.9      491     a        0.06
51         25.9      501     a        0.06
52         25.9      511     a        0.06
53         25.9      521     a        0.06
54         25.9      531     a        0.06
55         25.9      541     a        0.06
56         25.9      551     a        0.06
57         25.9      561     a        0.06
58         25.9      571     a        0.06
59         25.9      581     a        0.06
60         25.9      591     a        0.06
61         25.8      601     a        0.06
62         25.9      611     a        0.06
63         26.0      621     a        0.06
64         25.9      631     a        0.06
65         26.2      641     a        0.06
66         26.1      651     a        0.06
67         26.1      661     a        0.06
68         26.1      671     a        0.06
69         26.1      681     a        0.06
70         26.1      691     a        0.06
71         26.1      701     a        0.06
72         26.1      711     a        0.06
73         26.2      721     a        0.06
74         26.1      731     a        0.06
75         26.1      741     a        0.06
76         26.1      751     a        0.06
77         26.1      761     a        0.06
78         26.1      771     a        0.06
79         26.2      781     a        0.06
80         26.3      791     a        0.06
81         26.1      801     a        0.06
82         26.3      811     a        0.06
83         26.1      821     a        0.06
84         26.3      831     a        0.06
85         26.1      841     a        0.06
86         26.3      851     a        0.06
87         26.4      861     a        0.06
88         26.3      871     a        0.06
89         26.3      881     a        0.06
90         26.3      891     a        0.06
91         26.3      901     a        0.06
92         26.3      911     a        0.06
93         26.3      921     a        0.06
94         26.3      931     a        0.06
95         26.3      941     a        0.06
96         26.2      951     a        0.06
97         26.3      961     a        0.06
98         26.3      971     a        0.06
99         26.3      981     a        0.06
100        26.3      991     a        0.06
101        26.5     1001     a        0.06
102        26.3     1011     a        0.06
103        26.5     1021     a        0.06
104        26.5     1031     a        0.06
105        26.5     1041     a        0.06
106        26.5     1051     a        0.06
107        26.5     1061     a        0.06
108        26.5     1071     a        0.06
109        26.6     1081     a        0.06
110        26.5     1091     a        0.06
111        26.5     1101     a        0.06
112        26.5     1111     a        0.06
113        26.6     1121     a        0.06
114        26.5     1131     a        0.06
115        26.5     1141     a        0.06
116        26.5     1151     a        0.06
117        26.5     1161     a        0.06
118        26.5     1171     a        0.06
119        26.6     1181     a        0.06
120        26.5     1191     a        0.06
121        26.5     1201     a        0.06
122        26.5     1211     a        0.06
123        26.5     1221     a        0.06
124        26.6     1231     a        0.06
125        26.5     1241     a        0.06
126        26.6     1251     a        0.06
127        26.7     1261     a        0.06
128        26.7     1271     a        0.06
129        26.8     1281     a        0.06
130        26.5     1291     a        0.06
131        26.7     1301     a        0.06
132        26.7     1311     a        0.06
133        26.7     1321     a        0.06
134        26.8     1331     a        0.06
135        26.7     1341     a        0.06
136        26.5     1351     a        0.06
137        26.7     1361     a        0.06
138        26.7     1371     a        0.06
139        26.8     1381     a        0.06
140        26.7     1391     a        0.06
141        26.8     1401     a        0.06
142        26.7     1411     a        0.06
143        26.8     1421     a        0.06
144        26.8     1431     a        0.06
145        26.7     1441     a        0.06
146        26.7     1451     a        0.06
147        26.8     1461     a        0.06
148        26.8     1471     a        0.06
149        26.7     1481     a        0.06
150        26.8     1491     a        0.06
151        26.7     1501     a        0.06
152        26.7     1511     a        0.06
153        26.7     1521     a        0.06
154        26.7     1531     a        0.06
155        26.8     1541     a        0.06
156        26.8     1551     a        0.06
157        26.7     1561     a        0.06
158        26.8     1571     a        0.06
159        26.7     1581     a        0.06
160        26.8     1591     a        0.06
161        27.0     1601     a        0.06
162        27.0     1611     a        0.06
163        27.0     1621     a        0.06
164        27.0     1631     a        0.06
165        27.0     1641     a        0.06
166        27.0     1651     a        0.06
167        27.0     1661     a        0.06
168        27.0     1671     a        0.06
169        27.0     1681     a        0.06
170        27.0     1691     a        0.06
171        27.0     1701     a        0.06
172        27.0     1711     a        0.06
173        27.0     1721     a        0.06
174        27.0     1731     a        0.06
175        27.0     1741     a        0.06
176        26.9     1751     a        0.06
177        27.0     1761     a        0.06
178        27.0     1771     a        0.06
179        27.0     1781     a        0.06
180        27.0     1791     a        0.06
181        27.0     1801     a        0.06
182        27.0     1811     a        0.06
183        27.3     1821     a        0.06
184        27.2     1831     a        0.06
185        27.2     1841     a        0.06
186        27.2     1851     a        0.06
187        27.2     1861     a        0.06
188        27.3     1871     a        0.06
189        27.2     1881     a        0.06
190        27.2     1891     a        0.06
191        27.2     1901     a        0.06
192        27.2     1911     a        0.06
193        27.2     1921     a        0.06
194        27.2     1931     a        0.06
195        27.2     1941     a        0.06
196        27.4     1951     a        0.06
197        27.4     1961     a        0.06
198        27.5     1971     a        0.06
199        27.4     1981     a        0.06
200        27.3     1991     a        0.06

Sketch:草图:

在此处输入图像描述

This is an idea, but with the 3 treatments in a single plot (as in next image)这是一个想法,但是在一个图中有 3 种处理方法(如下图所示)

在此处输入图像描述

The idea is to plot adjusted curves of estimated ramps (in any combination of colors) and real curves obtained too (in grey so the slope of the curves is "highlighted")这个想法是绘制估计斜坡的调整曲线(以任何颜色组合)和获得的真实曲线(灰色,因此曲线的斜率被“突出显示”)

EDIT2: Plot with suggestions provided: EDIT2:提供建议的情节:

在此处输入图像描述

Yet this is without training and testing data, thus it is not the 'real' slopes measured.然而,这是没有训练和测试数据的,因此它不是测量的“真实”斜率。 When I try to make a plot using b :当我尝试使用b绘制绘图时:

#solved errors making a bigger vector to fit my data
new_datos <- data.frame(segundos = rep(seq(0,5000,length.out=2484),1),tratamiento = c(rep("0.06",2484),rep("0.125",2484),rep("0.25",2484)))

Since I've never provided proper way on how I'm trying to plot:因为我从来没有提供关于我如何尝试绘制的正确方法:

ggplot(new_datos,aes(x=segundos,y=temperature,group = tratamiento,colour=tratamiento)) +
   geom_point(data=development,aes(x=segundos,y=temperature,group = curva),size = 1,alpha=0.8,color="grey50",show.legend = FALSE) +
   geom_point(size = 3,show.legend = FALSE) + labs(x="Tiempo (s)", y="Temperatura (ºC)") +
   geom_text(aes(x = segundos, y = temperature+1, label = c("0,038 °C/min", "0.132 ºC/min","0.323 ºC/min")),color = "black",data = new_datos[c(200,250,500),]) +
   scale_color_manual(values = c("#3B9AB2", "#E8C520", "#F21A00","grey"))

Then script is the same as before.然后脚本和以前一样。 Final plot:最终情节: 在此处输入图像描述

I'm generating some test data and using that to demonstrate how to achieve what I think you're asking, because the data you've supplied is still not complete enough to run your code (which isn't a big problem - I think this sample data illustrates the concepts well enough):我正在生成一些测试数据并使用它来演示如何实现我认为你所要求的,因为你提供的数据仍然不够完整以运行你的代码(这不是一个大问题 - 我认为这个样本数据很好地说明了这些概念):

# How many 'curves' and 'treatments' do we want?
n_curve <- 6
n_treat <- 3
n <- n_curve * n_treat

# Take the cars dataset and repeat it n times
dataDF <- do.call("rbind", replicate(n, cars, simplify = FALSE))

# Assign a curve ID
dataDF$curve <- as.factor(rep(letters[1:n_curve], each=nrow(cars)))

# Assign a treatment ID
dataDF$treatment <- as.factor(rep(LETTERS[1:n_treat], each=nrow(cars)))

# Adjust the data by a small, random number so that our curves aren't identical
dataDF$speed2 <- dataDF$speed + dataDF$speed * (sample(c(-6:6), size=nrow(dataDF), replace=T) / 100)
dataDF$dist2  <- dataDF$dist +   dataDF$dist * (sample(c(-6:6), size=nrow(dataDF), replace=T) / 100)
head(dataDF)

# Make sure that data differ between treatments
dataDF$dist2  <- dataDF$dist2  * (as.numeric(dataDF$treatment)^2)

# The 'real' data are plotted in grey
# I'm using geom_smooth() to build a linear model of the data and
# then plotting that in red. You can instead build a separate lm
# and use the predict() function to generate new data, and then
# plot that here by adding another line along the lines of:
#  geom_line(data=new_datos, aes(x=segundos, y=temperature))
ggplot(dataDF, aes(x=speed2, y=dist2)) +
  geom_line(col='grey50') +
  geom_smooth(method='lm', col='red', fill='red') +
  facet_grid(cols=vars(treatment))

This gives us one plot with separate subplots ('facets') for each treatment.这为我们提供了一个图,其中每个处理都有单独的子图(“方面”)。 The original curves, based on real data, are drawn in grey.基于真实数据的原始曲线以灰色绘制。 The line from the linear model (here, generated by geom_smooth() inside the ggplot block) is plotted on top in red.来自线性模型的线(此处由 ggplot 块内的geom_smooth()生成)以红色绘制在顶部。

在此处输入图像描述

You can also do this on one plot and colour the curve lines so that they're not all grey:您也可以在一个图上执行此操作并为曲线线着色,使它们不全是灰色:

# We can also do this in one plot by removing the facet
# and colouring the geom_smooth() lines by treatment:
ggplot(dataDF, aes(x=speed2, y=dist2, col=treatment, fill=treatment)) +
  geom_line(alpha=0.5) +
  geom_smooth(method='lm')

在此处输入图像描述

I'm not entirely sure what you're aiming for, but hopefully that gives you something to start with.我不完全确定你的目标是什么,但希望这能给你一些开始。 Feel free to leave a comment on this answer if you need additional info.如果您需要其他信息,请随时对此答案发表评论。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM