2014-02-07 3 views
0

У меня есть один класс данных из двумерного нормального распределения. Это дает мне 2 колонки, и я сюжет его, используяКак создать линию линейной регрессии на 2D-диаграмме рассеяния

plot(Data_Class1). 

Теперь у меня есть еще один класс данных из другого двухмерного нормального распределения. Опять же у меня есть 2 колонки и я наложить этот участок с помощью

points(Data_Class2). 

Теперь я должен соответствовать линейной регрессии на этом участке.

LinRegModel <- lm(Data_Class2 ~ DataClass1) 

и abline(LinRegModel).

Это дает мне строку в порядке, но в ней используются только первые два из 6 коэффициентов регрессии.

   [,1]  [,2]  
(Intercept)  0.88174 1.64518 
Data_Class_11 0.02220 0.13223 
Data_Class_12 -0.01948 0.13870 

и составляет abline(0.88174,0.02220).

Как я могу использовать все 6 коэффициентов регрессии? Должен ли я использовать все 6 коэффициентов регрессии?

+0

Похоже, вы передаете матрицы (или кадры данных) в формуле, а не более обычного у ~ x1 + x2 типа формулы , Это намеренно? – david25272

+0

Да, это намеренно. Мне нужно найти строку, которая разделяет два класса данных. Точки данных описываются как (x, y) координаты, которые являются двумя столбцами. – Rohit

+0

Если вы хотите построить линию –

ответ

0

Итак, вот один из способов его решения. Поскольку вы не предоставили никаких данных, мы начинаем с некоторых. mvrnorm(...) генерирует случайный образец из многомерного нормального распределения. Здесь мы пропускаем вектор длины 2 как среднее, поэтому мы получаем двумерную нормаль. Итак, data.1 и data.2 модель у вас есть как Data_Class1 и Data_Class2.

Поскольку они различны по конструкции, мы объединить их в единую data.frame с использованием rbind(...) и добавить столбец классификатор z, который имеет значение 1 для data.1 и -1 для data.2. Теперь мы вписываемся линейную модель вида

г = а + б × х + с × х

Граница будет происходить при г = 0, так что сюжет линия

х = (-a -b × х)/с

Вот код:

library(MASS) 
data.1 <- mvrnorm(50,mu=c(0,0),Sigma=matrix(c(1,0,0,1),2)) 
data.2 <- mvrnorm(50,mu=c(3,3),Sigma=matrix(c(1,0,0,1),2)) 
plot(data.1, xlim=c(-3,5), ylim=c(-3,5), xlab="",ylab="") 
points(data.2, col="red") 

data.full <- data.frame(rbind(data.1,data.2)) 
data.full$z <- c(rep(1,50),rep(-1,50)) 
fit <- lm(z~X1 + X2,data.full) 
coef <- coefficients(fit) 
x <- seq(-3,5,.1) 
lines(x,(-coef[1]-coef[2]*x)/coef[3], lty=2, col="blue") 

+0

Да, это работает отлично. Спасибо! – Rohit

Смежные вопросы