2015-08-06 3 views
1

Я работаю с кадра данных (dt), который содержит 3 колонки: Time, Temp, Species, такие какКак применить линейную модель к конкретным частям кадра данных?

Temp Time Species 
1 10 241 Species-X 
2 11 241 Species-X 
3 12 241 Species-X 
4 13 241 Species-Y 
5 14 241 Species-Y 
6 15 240 Species-Z 
... ... ...  ... 
41 50 178 Species-Z 

Есть пять видов в третьей колонке. Я хочу применить линейную модель (lm) с Temp в качестве моей независимой переменной и Time как зависимую переменную. Итак, я хочу проверить его только для вида X или Y. Далее, я хочу проверить один из моих видов в заданном интервале Temp (скажем, 20-29 градусов C). Я пробовал:

lm(Temp ~ Time, data = td[Species = Species-Y]) 

for(i in unique(td$Species)){ 
model <- list(model) 
model[i] <- lm(td$Time ~ td$Temp) 
} 

model <- function (dados) { 
    return(lm(td$Time[,dados] ~ td$Temp[,dados])) 
    } 
model(dados = td$Species-X) 
+0

http://www.statmethods.net/management/subset.html – jenesaisquoi

+2

Я хотел бы использовать 'подмножество 'функция' lm' ... 'lapply (c (« Species-X »,« Species-Y »), function (x) lm (Time-Temp, data = td, subset = Species == x))' – user20650

+0

Ваша первая попытка выше почти работает ... вам нужно использовать кавычки и нужна дополнительная запятая. Поэтому попробуйте 'lm (Temp ~ Time, data = td [td $ Species ==" Species-Y ",])' – user20650

ответ

2

by() функция в базовом R обеспечивает одно решение:

by(td, td$Species, function(df) lm(df[,"Temp"] ~ df[,"Time"])) 

Если вы хотите различные правила для различных подмножеств, вы, вероятно, нужно сделать его группу, группа. Например, чтобы сделать Species-Y для Temps 20-29 (включительно), вы можете запустить:

lm(Temp ~ Time, data = td[td$Species == "Species-Y" & td$Temp >= 20 & td$Temp <= 29, ]) 
+0

благодарю вас за ваш ответ, но мне не удалось заставить его работать. Я не могу понять, что я делаю неправильно ... Я продолжаю получать эти Предупреждающие сообщения: 1: В model.response (mf, "numeric"): с использованием type = "numeric" с коэффициентом отклика будет игнорируется 2: В Ops.factor (y, z $ остатки): '-' не имеет значения для факторов ... ... Но я буду продолжать пытаться –

+0

Какую бы переменную вы использовали как 'y' в своем звоните в 'lm' --- и со своего поста, я не уверен, какой из них --- должен быть закодирован как фактор. Предположим, что это «время». Прежде чем запускать строку 'by()', запустите 'td $ Time <- as.numeric (td $ Time)', а затем попробуйте. – ulfelder

+1

это сработало! Я должен тебе долгое время! –

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