簡體   English   中英

Plot R 和 ggplot2 中正態分布的垂直密度

[英]Plot vertical density of normal distribution in R and ggplot2

我想將 ggplot2 中的 plot 垂直正態分布轉換為現有的線性回歸 model,以便可視化同方差性。
我目前有以下代碼和 plot:

x <- runif(100, 0, 15)
y <- 1000 + 200*x + rnorm(100, 0, 300)
df <- data.frame(x, y)

lm_fit <- lm(y ~ x, data = df)


#with regression line
ggplot(df, mapping = aes(x=x, y=y)) + geom_point(color="blue") + geom_smooth(method='lm', se=FALSE, color="red") 

樣本回歸

我想插入這樣的密度曲線(正好相反):
樣品想要的結果

library(ggplot2)

x <- runif(100, 0, 15)
y <- 1000 + 200*x + rnorm(100, 0, 300)
df <- data.frame(x, y)
lm_fit <- lm(y ~ x, data = df)

k <- 2.5
sigma <- sigma(lm_fit)
ab <- coef(lm_fit); a <- ab[1]; b <- ab[2]

x <- seq(-k*sigma, k*sigma, length.out = 50)
y <- dnorm(x, 0, sigma)/dnorm(0, 0, sigma) * 3

x0 <- 0
y0 <- a+b*x0
path1 <- data.frame(x = y + x0, y = x + y0)
segment1 <- data.frame(x = x0, y = y0 - k*sigma, xend = x0, yend = y0 + k*sigma)
x0 <- 5
y0 <- a+b*x0
path2 <- data.frame(x = y + x0, y = x + y0)
segment2 <- data.frame(x = x0, y = y0 - k*sigma, xend = x0, yend = y0 + k*sigma)
x0 <- 10
y0 <- a+b*x0
path3 <- data.frame(x = y + x0, y = x + y0)
segment3 <- data.frame(x = x0, y = y0 - k*sigma, xend = x0, yend = y0 + k*sigma)

ggplot(df, mapping = aes(x=x, y=y)) + geom_point(color="blue") + 
  geom_smooth(method='lm', se=FALSE, color="red") + 
  geom_path(aes(x,y), data = path1, color = "green") + 
  geom_segment(aes(x=x,y=y,xend=xend,yend=yend), data = segment1) +
  geom_path(aes(x,y), data = path2, color = "green") + 
  geom_segment(aes(x=x,y=y,xend=xend,yend=yend), data = segment2) +
  geom_path(aes(x,y), data = path3, color = "green") + 
  geom_segment(aes(x=x,y=y,xend=xend,yend=yend), data = segment3)

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM