Lm(formula, data, subset, weights, na.action,




Мастицкий, глава 6

ЛИНЕЙНЫЕ МОДЕЛИ В ДИСПЕРСИОННОМ АНАЛИЗЕ

Формула

Факторы и контрасты

факторы is.factor(), as.factor(), уровни (levels), ординальные и номинальные факторы Usage factor(x = character(), levels, labels = levels, ordered = is.ordered(x)) Arguments
x Вектор данных
levels Вектор всех возможных значений (уровней) фактора, по умолчанию – символьное представление всех уникальных значений из данных, в возрастающем порядке, т.е. результат sort(unique(x)).
labels метки для уровней, используются при выводе
ordered Признак ординального фактора (порядок устанавливается порядком уровней)

 

 

#============================================================================# --- небольшой поясняющий пример

#============================================================================ tmp.s1<-c("a","b","b","a","a","c","b","a","c")

tmp.f1<-factor(tmp.s1)

Str(tmp.f1)

# Factor w/ 3 levels "a","b","c": 1 2 2 1 1 3 2 1 3

 

tmp.s2<-c("XX","XY","XX","XY","XX","XY","XY","XY","XY")

tmp.f2<-factor(tmp.s2)

Str(tmp.f2)

# Factor w/ 2 levels "XX","XY": 1 2 1 2 1 2 2 2 2

 

tmp.tab1<-model.matrix(~tmp.f1)

Tmp.tab1

# (Intercept) tmp.fb tmp.fc

#1 1 0 0 <-- a

#2 1 1 0 <-- b

#3 1 1 0 <-- b

 

tmp.tab2<-model.matrix(~tmp.f2-1)

Tmp.tab2

# tmp.f2XX tmp.f2XY

#1 1 0 <-- XX

#2 0 1 <-- XY

#3 1 0

 

tmp.tab3<-model.matrix(~tmp.f1+tmp.f2-1)

Tmp.tab3

# tmp.f1a tmp.f1b tmp.f1c tmp.f2XY

#1 1 0 0 0

#2 0 1 0 1

#3 0 1 0 0

#4 1 0 0 1

 

tmp.tab4<-cbind(model.matrix(~tmp.f1-1),model.matrix(~tmp.f2-1))

Tmp.tab4

# tmp.f1a tmp.f1b tmp.f1c tmp.f2XX tmp.f2XY

#1 1 0 0 1 0

#2 0 1 0 0 1

#3 0 1 0 1 0

 

Контрасты

Номинальные и ординальные переменные

contr.treatment(n, base = 1, contrasts = TRUE, sparse = FALSE)contr.helmert(n, contrasts = TRUE, sparse = FALSE)contr.poly(n, scores = 1:n, contrasts = TRUE, sparse = FALSE)contr.sum(n, contrasts = TRUE, sparse = FALSE) Виды контрастов
Тип Описание
treatment Сравнение каждого уровня с базой
helmert Сравнение уровня со средним для предыдущих уровней
sum Сравнение уровня с суммой предыдущих уровней
poly Для ординальных, позволяет использовать нелинейные тренды заданного порядка

Contr.treatment(4)

2 3 4

1 0 0 0

2 1 0 0

3 0 1 0

4 0 0 1

 

Contr.helmert(4)

[,1] [,2] [,3]

1 -1 -1 -1

2 1 -1 -1

3 0 2 -1

4 0 0 3

 

Contr.sum(4)

[,1] [,2] [,3]

1 1 0 0

2 0 1 0

3 0 0 1

4 -1 -1 -1

 

contr.poly(4)

.L.Q.C

[1,] -0.6708204 0.5 -0.2236068

[2,] -0.2236068 -0.5 0.6708204

[3,] 0.2236068 -0.5 -0.6708204

[4,] 0.6708204 0.5 0.2236068

 

Параметры

Параметр Описание
scores Значения аргумента для вычисления полинома
contrasts Нужно ли создавать реальную матрицу (или фиктивную, т.е. линейно зависимую)
sparse Нужно ли создавать разреженную матрицу
base Какое значение использовать как базу сравнения
Умолчание для номинальных и ординальных переменныхoptions(contrasts = c("contr.treatment", "contr.poly")) Примеры tmp.f1ord<-factor(tmp.s1,ordered=TRUE)str(tmp.f1ord) # Ord.factor w/ 3 levels "a"<"b"<"c": 1 2 2 1 1 3 2 1 3 tmp.f1ord [1] a b b a a c b a cattr(,"contrasts").L.Qa -7.071068e-01 0.4082483b -7.850462e-17 -0.8164966c 7.071068e-01 0.4082483Levels: a < b < c

 

Contr.poly(3)

.L.Q

[1,] -7.071068e-01 0.4082483

[2,] -7.850462e-17 -0.8164966

[3,] 7.071068e-01 0.4082483

 

contrasts(tmp.f1ord, how.many = 1) <- contr.poly(3)

model.matrix(~tmp.f1ord)

 

(Intercept) tmp.f1ord.L

1 1 -7.071068e-01

2 1 -7.850462e-17

3 1 -7.850462e-17

4 1 -7.071068e-01

5 1 -7.071068e-01

6 1 7.071068e-01

 

contrasts(tmp.f1ord, how.many = 2) <- contr.poly(3)

model.matrix(~tmp.f1ord)

(Intercept) tmp.f1ord.L tmp.f1ord.Q

1 1 -7.071068e-01 0.4082483

2 1 -7.850462e-17 -0.8164966

3 1 -7.850462e-17 -0.8164966

4 1 -7.071068e-01 0.4082483

5 1 -7.071068e-01 0.4082483

6 1 7.071068e-01 0.4082483

 

lm(formula, data, subset, weights, na.action,

method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE,

singular.ok = TRUE, contrasts = NULL, offset,...)

model.matrix(~ tmp.f1 + tmp.f2)

(Intercept) tmp.f1b tmp.f1c tmp.f2XY

1 1 0 0 0

2 1 1 0 1

3 1 1 0 0

4 1 0 0 1

5 1 0 0 0

6 1 0 1 1

7 1 1 0 1

8 1 0 0 1

9 1 0 1 1

model.matrix(~ tmp.f1 + tmp.f2,

contrasts = list(tmp.f1 = "contr.sum", tmp.f2 = "contr.helmert"))

(Intercept) tmp.f11 tmp.f12 tmp.f21

1 1 1 0 -1

2 1 0 1 1

3 1 0 1 -1

4 1 1 0 1

5 1 1 0 -1

6 1 -1 -1 1

7 1 0 1 1

8 1 1 0 1

9 1 -1 -1 1

 

Пример: изучается эффект двух методов лечения, method1, method2, и эффект от их совместного применения method12 по сравнению с суммой частных эффектов. Результат оценивается по показателю y, чем он больше, тем лучше.

Set.seed(123)

beta0 <-5

beta1 <-1

beta2 <-2

beta12<-(-0.7)

beta.effect<-c(0,beta1,beta2,beta1+beta2+beta12)

x.labels<-c("none","method1","method2","method12")

x.val <-x.labels[sample(1:4,100,replace=TRUE)]

x<-factor(x.val)

err<-rnorm(100,0,0.5)

y<-beta0 + beta.effect[x] + err

boxplot(y~as.factor(x))

beta.contrast<-rbind(c(0, 0,0),

C(1, 0,0),

C(0, 1,0),

C(1, 1,1))

colnames(beta.contrast)<-x.labels[-1]

p.lm<-lm(y~x,contrasts=list(x=beta.contrast))

Summary(p.lm)

 

Call:

lm(formula = y ~ x, contrasts = list(x = beta.contrast))

 

Residuals:

Min 1Q Median 3Q Max

-1.07775 -0.32030 -0.00897 0.28411 1.04254

 

Coefficients:

Estimate Std. Error t value Pr(>|t|)

(Intercept) 5.05113 0.09267 54.509 < 2e-16 ***

xmethod1 0.99490 0.12983 7.663 1.46e-11 ***

xmethod2 1.67092 0.14054 11.890 < 2e-16 ***

xmethod12 -0.40585 0.19049 -2.130 0.0357 *

---

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 0.4725 on 96 degrees of freedom

Multiple R-squared: 0.7738, Adjusted R-squared: 0.7668

F-statistic: 109.5 on 3 and 96 DF, p-value: < 2.2e-16

 

Описание набора данных RIKZ

Sample Номер образца
C1 Chaetognatha species Щетинкочелюстны́е, или морски́е стре́лки
P1-P25 Polychaeta species Многощетинковые черви, или полихеты
N1 Nemertini species лентовидные черви
CR1-CR28 Crustacea species Ракообразные
M1-M17 Mollusca species Моллюски
I1-I5 Insecta species
week Неделя Июня (1-4), когда собирались данные
angle1 Угол наклона станции
angle2 Угол наклона для всего пляжа
exposure Индекс, отражающий воздействие волн, длину береговой линии, уклон, мехсостав, и глубину анаэробного слоя (для пляжа)
salinity Средняя соленость (для пляжа)
temperature Температура (для пляжа)
NAP Высота станции наблюдения по отношению к среднему уровню прилива
penetrability Проницаемость
grainsize Размер зерен песка
humus Гумус (органика)
chalk Мел
sorting1  
Beach Пляж

 

p<-read.table("RIKZ.txt",header=TRUE,as.is=TRUE,dec=".")

 

# число видов

p$abundance<-rowSums(p[,2:76])

p1$fBeach<-as.factor(p1$Beach)

p1$lAbundance<-log(1+p1$abundance)

 

plot(p$abundance,pch=20,cex=2)

 

plot(p$lAbundance,pch=20,cex=2)

 

p.lm0<-lm(abundance~1,data=p)

Summary(p.lm0)

 

p.lm1<-lm(abundance~NAP,data=p)

Summary(p.lm1)

 

p.lm2<-lm(abundance~fBeach,data=p)

Summary(p.lm2)

 

p.lm3<-lm(abundance~NAP+fBeach,data=p)

Summary(p.lm3)

 

p.lm4<-lm(abundance~NAP*fBeach,data=p)

Summary(p.lm4)

 

p.lm5<-lm(abundance~fBeach/NAP,data=p)

Summary(p.lm5)

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: