如何拟合每组的回归线(每组包含两个不同的因子/列)?

时间:2017-02-22 04:53:39

标签: r plot regression

我设法绘制了一条广义线,但它与我的需求无关。我想绘制每个治疗和ID的线,并获得回归值。 pic附在这里: enter image description here

我对 R 相对较新,在网上找不到合适的答案。感谢

这是我的数据:

enter image description here

我想绘制每种治疗组合(0/4/8)*和患者类型的回归线。

我写的代码是:

plot(ion_chlorophyll$NA,ion_chlorophyll$CHL)
plot(ion_chlorophyll$NA,ion_chlorophyll$CHL, pch = 1,cex = 1, col = "blue", main = "NA relationship", xlab ="Na", ylab ="CHL")

2 个答案:

答案 0 :(得分:0)

如果你想获得多个回归线,请尝试使用xyplot。 试验虹膜数据集。

library(lattice)

xyplot(Sepal.Length ~ Sepal.Width, data = iris, pch = 16, type = c("p", "g", "r"), groups = Species, auto.key = TRUE)

如果您只有三个因素有助于2D绘图,那么以这种方式获得回归线应该不会太麻烦:

model1 <- lm(iris$Sepal.Length[iris$Species == "setosa"] ~ iris$Sepal.Width[iris$Species == "setosa"])

model2 <- lm(iris$Sepal.Length[iris$Species == "versicolor"] ~ iris$Sepal.Width[iris$Species == "versicolor"])

model3 <- lm(iris$Sepal.Length[iris$Species == "virginica"] ~ iris$Sepal.Width[iris$Species == "virginica"])

并对每个模型进行summary()以获得回归线的方程。

我认为你应该这样做。

enter image description here

答案 1 :(得分:0)

如果您只是想绘图,可以使用ggplot2执行此操作。您可以使用dplyrtidybroom来获取模型中的预测。如果df是包含列的数据框 - treatment,patient_type,Leaf_NA,Total_Chl,

只需绘制

library(ggplot2)
p <- df %>% ggplot(aes(Leaf_NA, Total_Chl)) +
    facet_grid(treatment ~ patient_type) +
    stat_smooth(method='lm')
p

获取模型预测

library(dplyr) #for group_by(), inner_join(), mutate()
library(tidyr) #for nest(), unnest()
library(broom) #for augment()

model <- df %>%
    group_by(treatment, patient_type) %>%
    do(fit = lm(Total_Chl ~ Leaf_NA, data = .))

df %>%
    group_by(treatment, patient_type) %>%
    nest() %>%
    inner_join(model, .) %>%
    mutate(pred = list(augment(fit))) %>%
    unnest(pred)