2012-06-18 4 views
0

Я бегу некоторые моделирования, где я хочу, чтобы соответствовать линейной модели для подмножеств моих данных:лм подходящие несколько подмножеств data.frame

library(reshape2) 
library(plyr) 

all <- mutate(iris, mean_width = ave(Petal.Width, Petal.Length)) 
str(all) 

## want to minimise sum(|y*polynomial(x) - z|^2) for each id 
## in the region where x != exclude 

weighted_difference <- function(d, n=4, exclude = c(2.5, 3), ...){ 

    sub <- subset(d, !(Sepal.Width > exclude[1] & 
        Sepal.Width < exclude[2])) 
    fit <- lm(mean_width ~ I(poly(Petal.Length, n, raw=TRUE)*Petal.Width) + Petal.Width - 1, data = sub) 
    mutate(d, predict = predict(fit, d), 
     difference = Petal.Width - predict) 
} 

results <- ddply(all, "Species", weighted_difference) 

Это работает, но я хотел бы использовать более простой подход где я сначала создать новый data.frame для посадки,

exclude <- c(3, 6) 
    sub <- subset(all, !(x > exclude[1] & x < exclude[2])) 

подходит для всех случаев,

fits <- lm(z ~ I(poly(x, n, raw=TRUE)*y) + y - 1 | id, data = sub) 

(этот ... | id является неверным синтаксисом, по-видимому)

и использовать предсказать на полных данных сразу,

all <- mutate(all, predict = predict(fits, all), difference = y - predict) 

Есть ли какой-нибудь трюк, чтобы использовать lm(), как это? Или лучшее решение? Благодарю.

+0

Что именно вы пытаетесь использовать '... | id'? Если вы хотите установить случайные перехваты, вам нужно использовать смешанные модели, например, из пакета 'nlme' или' lme4'. –

+0

Извините, я думаю, что использование случайных данных не очень ясное, я обновлю пример. С '... | id' Я имею в виду, что подгонка должна выполняться для каждой группы, определяемой 'id', как на графиках решетки. – baptiste

ответ

2

lmList (от nlme) делать то, что вы хотите?

library(nlme) 
fits <- lmList(z ~ I(poly(x, n, raw=TRUE)*y) + y - 1 | id, data = sub) 

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

  • Нет связанных вопросов^_^