在 R 中创建和可视化示例

Creating and Visualizing samples in R

我想从正态分布创建 100 个样本。对于第一个class,均值取为(0,0),协方差矩阵取为[(1,0),(0,1)]。对于第二个 class,均值为 (5,0) 但协方差矩阵与第一个 class 相同,最后想可视化所有 200 个实例在每个 class.

具有不同颜色的单个图中

我的问题是:当我生成这个图时,我不确定最终的图是否真的有 200 个样本。

我的做法:

a1 <- c(1,0)
a2 <- c(0,1)

M <- cbind(a1, a2)
x <- cov(M)
dev <- sd(x, na.rm = FALSE)

C0 <- sample(rnorm(100, mean=0, sd=dev), size=100, replace=T)
C1 <-  sample(rnorm(100, mean=5, sd=dev), size=100, replace=T)

plot(C0,C1, col=c("red","blue"), main = '200 samples, with mean 0 and 5 and S.D=0.5')
legend("topright", 95, legend=c("C0", "C1"),
       col=c("red", "blue"), lty=1:2, cex=0.8)

我想知道我的代码中的更正。

plot

您的 x 轴和 y 轴表明您正在绘制 C1 与 C0 的对比图。这就是为什么你的 y 轴的中点为 5 而 x 轴的中点为 0。你所做的是绘制 100 个点,它们的 x 坐标来自 C0,y 坐标来自 C1。

如果不计算它们,很难证明屏幕上有 100 个点。我知道无法访问 R 用来显示您的绘图的数据。但是,一个技巧是在您的代码之后调用 text(C0,C1,label=1:150)。这会将数字 1:150 添加到您的图中,每个数字都有相应的标签。如果你有 200 分,这将是一个整洁的情节。但是,由于您有 100 个,很多都被标记了两次,使情节变得不可读。 如果我们制作一个新图并改用 text(C0,C1,label=1:100) ,事情就更清楚了:

除了另一个答案中提到的绘图问题,从你的描述看来你想从两个具有不同均值的二维多元正态分布中采样。

如果是这样,您可以简单地使用 mvtnorm 库从这些分布中采样,这是多元正态分布。

library(mvtnorm)
C0 <- rmvnorm(100, c(0,0), M) # 100 samples, means (0, 0), covariance mtx M
C1 <- rmvnorm(100, c(5,0), M)

现在,您通过键入 x <- cov(M) 获取 协方差矩阵的协方差 。这没有多大意义,除非我误解了你想要完成的事情。


编辑:这是我认为您要完成的任务的完整代码:

a1 <- c(1, 0)
a2 <- c(0, 1)
M <- cbind(a1, a2)

C0 <- rmvnorm(100, c(0, 0), M)
C1 <- rmvnorm(100, c(5, 0), M)

plot(C0, col = "red", xlim = c(-5, 10), ylim = c(-5, 5), xlab = "X", ylab = "Y")
points(C1, col = "blue")
legend("topright", inset = .05, c("Class 1", "Class 2"), fill = c("red", "blue"))

输出图