2013-03-14 2 views
0

Можно ли заменить коэффициенты в объекте lm?Заменить коэффициенты lm в [r]

Я думал, что следующее будет работать

# sample data 
set.seed(2157010) 
x1 <- 1998:2011 
x2 <- x1 + rnorm(length(x1)) 
y <- 3*x1 + rnorm(length(x1)) 
fit <- lm(y ~ x1 + x2) 

# view origional coefficeints 
coef(fit) 

# replace coefficent with new values 
fit$coef(fit$coef[2:3]) <- c(5, 1) 

# view new coefficents 
coef(fit) 

Любая помощь будет принята с благодарностью

+0

Мне очень любопытно, Почему кто-то захочет это сделать. – ndoogan

+0

Я тоже, мой первый, хотя и был «Почему?» –

+0

В моем случае я перебираю линейные модели по регионам, а некоторые из моих регионов не имеют такого же количества объясняющих переменных, что и другие регионы. В этом случае lm возвращает NA для модельного коэффициента, и я хочу заменить его нулем, так как другие элементы моего кода зависят от числового значения в каждом слоте для объясняющих переменных. – MikeTP

ответ

2

Ваш код не является воспроизводимым, поскольку есть несколько ошибок в коде. Вот исправленная версия, которая также показывает свою ошибку:

set.seed(2157010) #forgot set. 
x1 <- 1998:2011 
x2 <- x1 + rnorm(length(x1)) 
y <- 3*x2 + rnorm(length(x1)) #you had x, not x1 or x2 
fit <- lm(y ~ x1 + x2) 

# view original coefficients 
coef(fit) 
(Intercept)   x1   x2 
260.55645444 -0.04276353 2.91272272 

# replace coefficients with new values, use whole name which is coefficients: 
fit$coefficients[2:3] <- c(5, 1) 

# view new coefficents 
coef(fit) 
(Intercept)   x1   x2 
260.5565  5.0000  1.0000 

Таким образом, проблема в том, что вы использовали fit$coef, хотя имя компонента в lm выходе действительно coefficients. Сокращенная версия работает для получения значений, но не для установки, так как она создала новый компонент с именем coef, а функция coef извлекала значения fit$coefficient.

+0

Благодарим вас за изменения и anwser. – MikeTP

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