2013-06-04 1 views
5

Я эту программуИспользование смещения в лм регрессии - R

dens <- read.table('DensPiu.csv', header = FALSE) 
fl <- read.table('FluxPiu.csv', header = FALSE) 
mydata <- data.frame(c(dens),c(fl)) 

dat = subset(mydata, dens>=3.15) 
colnames(dat) <- c("x", "y") 
attach(dat) 

, и я хочу сделать наименьших квадратов регрессии по данным, содержащимся в Дат, функция имеет вид

y ~ a + b*x 

и я хочу, чтобы линия регрессии проходила через определенную точку P (x0, y0) (которая не является источником).

Я пытаюсь сделать это так

x0 <- 3.15 

y0 <-283.56 

regression <- lm(y ~ I(x-x0)-1, offset=y0) 

(я думаю, что данные = Даты не является необходимыми в данном случае), но у меня есть эта ошибка:

Error in model.frame.default(formula = y ~ I(x - x0) - 1, : variable 
lengths differ (found for '(offset)'). 

Я не» Знаю почему. Я предполагаю, что я не правильно определил значение смещения, но я не смог найти какой-либо пример в Интернете.

Может ли кто-нибудь объяснить мне, как смещение работает, пожалуйста?

+0

Можете ли вы предоставить воспроизводимый пример, с данными, пожалуйста? – joran

+2

В чем разница между этим вопросом и вашим предыдущим? – agstudy

+0

Теперь я прошу определить объект, который идет в _offset_. Мой предыдущий вопрос состоял в том, как сделать регрессию пройденной для определенной точки. – amcabassi

ответ

9

Ваш компенсировано термин должен быть переменной, как x и y, а не числовой константы. Поэтому вам нужно создать столбец в вашем наборе данных с соответствующими значениями.

dat$o <- 283.56 
lm(y ~ I(x - x0) - 1, data=dat, offset=o) 
+0

Спасибо за ваш ответ. Я добавил точку P (x0, y0) в мою базу данных. Теперь это 161 элемент _dat_. Я пробовал как «x0 <- 3.15 y0 <- dat [161,2] регрессия <- lm (y ~ I (x-x0) -1, offset = y0)' и это 'y0 <- dat [161,] регрессия <- lm (y ~ I (x) -1, offset = y0) ', но ни одна из них не работает. Что я делаю не так? Я добавил первую часть кода к моему вопросу, чтобы сделать его более понятным. – amcabassi

+2

Вы по-прежнему создаете единственную константу с заданным значением. Вам необходимо передать _vector_ значений в качестве смещения. Самый простой способ сделать это - опубликовать: создать новый столбец в вашем наборе данных. Я предполагаю, что [161, 2] 'это то, что должно быть вашим y0? Сделайте это: 'dat $ o <- dat [161,2]; lm (y ~ I (x - x0) - 1, offset = o, data = dat) ' –

+0

Отлично, спасибо вам большое! Я создал строку вместо столбца, поэтому она не сработала! Спасибо за ваше терпение. – amcabassi

2

На самом деле, реальная проблема здесь в том, что вы должны указать offset с вектором, длина которого такими же, как число строк (или длина, если данные состоят как вектор) ваши данные. Следующий код будет делать свою работу, как и ожидалось:

regression <- lm(y ~ I(x-x0)-1, offset = rep(y0, length(y)) 

Вот хорошее объяснение для тех, кто интересуется: http://rfunction.com/archives/223