12. nodaļa. Vispārinātie lineārie modeļi

12.1 Teorētiskais pamatojums

Vēl jāuzraksta!

Plašāku materiālu par vispārinātajiem lineārajiem modeļiem var skatīt Dobson and Barnett (2008) un McCulloch, Searle, and Neuhaus (2008).

12.2 Dati

Divu GLM analīzes veidu (binārā loģistiskā regresija un puasona regresija) piemēram izmantoti četri datu faili. Pirmais fails nezales.txt satur informāciju par pētījumu, kurā analizēts nezāļu skaits parauglaukumos atkarībā no pielietotā augu aizsardzības līdzekļa - kontrole, līdzeklis 1 un līdzeklis 2 (kolonna grupa), kā arī augsnes pH šajos parauglaukumos.

nezales<-read.table(file="nezales.txt",header=T)
str(nezales)
## 'data.frame':    300 obs. of  3 variables:
##  $ grupa : Factor w/ 3 levels "kontrole","lidzeklis1",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ pH    : num  6.26 6.8 6.79 6.52 6.08 6.21 6.47 6.74 6.71 6.11 ...
##  $ skaits: int  2 10 5 6 5 4 2 2 5 3 ...
head(nezales)
##      grupa   pH skaits
## 1 kontrole 6.26      2
## 2 kontrole 6.80     10
## 3 kontrole 6.79      5
## 4 kontrole 6.52      6
## 5 kontrole 6.08      5
## 6 kontrole 6.21      4
summary(nezales)
##         grupa           pH            skaits     
##  kontrole  :100   Min.   :5.310   Min.   : 0.00  
##  lidzeklis1:100   1st Qu.:6.388   1st Qu.: 0.00  
##  lidzeklis2:100   Median :6.700   Median : 1.00  
##                   Mean   :6.699   Mean   : 2.14  
##                   3rd Qu.:7.040   3rd Qu.: 3.25  
##                   Max.   :7.920   Max.   :10.00

Failos veids1.txt, veids2.txt un veids3.txt ir viena un tā paša pētījuma dati, kas parādīti trīs dažādos veidos. Šajā pētījumā ir novērtēts vai augs ir bijis bojāts vai nē (slimības ietekmēts) atkarībā no tā šķirnes un audzēšānas veida (tunelis vai lauks). Failā veids1 ir izejas dati, kur katram augam ir sava rindiņa un kolonnā bojajums ir atzīmē 0 vai 1 atkarībā no tā, vai augs nav bojāts, vai ir bojāts. Failā veids2 dati jau ir apkopoti tādā veidā, ka katrai sķirnes un audzēšanas veida kombinācijai ir norādīts bojāto un nebojāto augu skaits. Failā veids3 dati arī jau ir apkopoti, tikai šajā gadījumā ir kolonna ar procentuālo bojāto augu daudzumu (izteikts decimāldaļās) un kopējo augu skaitu katrā faktoru kombinācijā

veids1<-read.table(file="veids1.txt", header=TRUE,sep="\t",dec=".")
str(veids1)
## 'data.frame':    175 obs. of  3 variables:
##  $ skirne  : Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
##  $ veids   : Factor w/ 2 levels "lauks","tunelis": 1 1 1 1 1 1 1 1 1 1 ...
##  $ bojajums: int  1 1 1 1 0 1 0 1 0 1 ...
head(veids1)
##   skirne veids bojajums
## 1      A lauks        1
## 2      A lauks        1
## 3      A lauks        1
## 4      A lauks        1
## 5      A lauks        0
## 6      A lauks        1
veids2<-read.table(file="veids2.txt", header=TRUE,sep="\t",dec=".")
str(veids2)
## 'data.frame':    6 obs. of  4 variables:
##  $ skirne  : Factor w/ 3 levels "A","B","C": 1 1 2 2 3 3
##  $ veids   : Factor w/ 2 levels "lauks","tunelis": 1 2 1 2 1 2
##  $ bojats  : int  17 10 14 16 21 2
##  $ nebojats: int  3 17 11 24 13 27
head(veids2)
##   skirne   veids bojats nebojats
## 1      A   lauks     17        3
## 2      A tunelis     10       17
## 3      B   lauks     14       11
## 4      B tunelis     16       24
## 5      C   lauks     21       13
## 6      C tunelis      2       27
veids3<-read.table(file="veids3.txt",header=TRUE,sep="\t",dec=".")
str(veids3)
## 'data.frame':    6 obs. of  4 variables:
##  $ skirne  : Factor w/ 3 levels "A","B","C": 1 1 2 2 3 3
##  $ veids   : Factor w/ 2 levels "lauks","tunelis": 1 2 1 2 1 2
##  $ procents: num  0.85 0.37 0.56 0.4 0.618 ...
##  $ skaits  : int  20 27 25 40 34 29
head(veids3)
##   skirne   veids   procents skaits
## 1      A   lauks 0.85000000     20
## 2      A tunelis 0.37037037     27
## 3      B   lauks 0.56000000     25
## 4      B tunelis 0.40000000     40
## 5      C   lauks 0.61764706     34
## 6      C tunelis 0.06896552     29

12.3 Puasona regresija

Gadījumos, kad regresors (atkarīgais mainīgais) ir skaita dati, turklāt to vērtības ir mazas un sadalījums ir izteikti asimetrisks (daudz mazo vērtību, veidojas Puasona sadalījums), izmantot lineāro regresiju nebūtu pareizi, jo tiktu pārkāpti vairāki nosacījumi, kas izvirzīti šai analīzei. Analizējot skaita datus kā alternatīvu var izmantot vispārinātos lineāros modeļus (GLM) norādot, ka datiem ir Puasona atlikuma struktūra. Šo GLM veidu sauc arī par Puasona regresiju. GLM analīzi programmā R veic ar funckiju glm(). Funkcijā jānorāda trīs komponentes: formula, kas jāpārbauda (regresents atkarībā no viena vai vairākiem regresoriem un to kombinācijas), atlikumu struktūras veids, kas šajā gadījumā ir family=poisson("log"), kā arī datu objekts, kurā atrodas analizējamie mainīgie. Arguments "log" iekavās pie poisson() parāda kāda saistības funkcija ir izmantota, lai pārietu no oriģinālās saistības starp mainīgajiem uz lineāro saistību. Analīzes rezultātus var apskatīt ar funckijām summary() un anova(). GLM modeļos var izmantot gan nepātraukti variējošus regresorus, gan arī kategorijas regresorus.

Piemērā apskatīts kā nezāļu skaitu ietekmē piederība pie kādas no pētījumu grupas un augsnes pH, kā arī šo divu faktoru kombinācija.

mod<-glm(skaits~grupa*pH,family=poisson("log"), data=nezales)
summary(mod) 
## 
## Call:
## glm(formula = skaits ~ grupa * pH, family = poisson("log"), data = nezales)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -3.1527  -0.8192  -0.2107   0.6433   3.2340  
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)  
## (Intercept)         1.51970    0.62685   2.424   0.0153 *
## grupalidzeklis1    -2.21275    1.48261  -1.492   0.1356  
## grupalidzeklis2    -3.70175    2.41941  -1.530   0.1260  
## pH                  0.01156    0.09301   0.124   0.9011  
## grupalidzeklis1:pH  0.11340    0.21933   0.517   0.6051  
## grupalidzeklis2:pH  0.14455    0.36004   0.401   0.6881  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 873.24  on 299  degrees of freedom
## Residual deviance: 309.79  on 294  degrees of freedom
## AIC: 879.63
## 
## Number of Fisher Scoring iterations: 5
anova(mod,test="Chisq")
## Analysis of Deviance Table
## 
## Model: poisson, link: log
## 
## Response: skaits
## 
## Terms added sequentially (first to last)
## 
## 
##          Df Deviance Resid. Df Resid. Dev Pr(>Chi)    
## NULL                       299     873.24             
## grupa     2   562.83       297     310.41   <2e-16 ***
## pH        1     0.23       296     310.18   0.6350    
## grupa:pH  2     0.39       294     309.79   0.8237    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Secinājumi: pēc analīzes kopsavilkuma tabulas var spriest, ka statistiski būtiska ir tikai Intercept vērtība (nezāļu skaits būtiski atšķiras no 0), tomēr pārējo koeficientu vērtības nav būtiskas. GLM analīzē, līdzīgi kā tas ir ANCOVA, ja ir iekļauts kvalitatīvs/kategorijas mainīgais (grupa), tad tas tiek pārkodēts un salīdzināšana tiek veikta references līmeni (grupu), kas šajā gadījumā ir kontrole. Koeficienti, kas parādās kopsavilkuma tabulā, ir koeficienti lineārājai vienādojumam. Lai atgrieztos pie sākotnējām skaita vērtībām, šis lineārais vienādojums ir jāizmanto kā pākāpe eksponentam - pretējā darbība naturālajam logaritmam. Ar funkciju `anova() var apskatīt kā katrs faktors un kombinācija kopumā ietekmē analizējamo pazīmi. Pēc šīs tabulas varam secināt, ka būtiska ietekme ir grupai, bet nav pH un grupas:pH kombinācijai.

Tā kā pH ietekme nebija būtiska, šajā gadījumā varam izveidot otru modeli, kurā kā faktors ir tikai piederība pie grupas.

mod2<-glm(skaits~grupa,family=poisson("log"),data=nezales)
summary(mod2)
## 
## Call:
## glm(formula = skaits ~ grupa, family = poisson("log"), data = nezales)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -3.1432  -0.8000  -0.1522   0.7063   3.1686  
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      1.59737    0.04499   35.50   <2e-16 ***
## grupalidzeklis1 -1.44895    0.10317  -14.04   <2e-16 ***
## grupalidzeklis2 -2.73680    0.18240  -15.01   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 873.24  on 299  degrees of freedom
## Residual deviance: 310.41  on 297  degrees of freedom
## AIC: 874.24
## 
## Number of Fisher Scoring iterations: 5

Secinājumi: Tā kā visi koeficienti ir būtiski, var secināt, ka gan grupā līdzeklis 1, gan līdzeklis 2 nezāļu skaits ir mazākas nekā kontroles grupā. Jāatceras, ka šie koeficienti nav interpretējami tiešā veidā kā atšķirības starp vidējiem nezāļu skaitiem, jo ir izmantota log saistības funckija. Sagaidāmais nezāļu skaits kontroles grupā attiecīgi ir \(e^1.597\), līdzeklis 1 grupā \(e^{1.597-1.449}\) un līdzeklis 2 grupā \(e^{1.597-2.737}\).

Tā kā tika ieveidots modelis, kurā bija divi mainīgie un to kombinācija, un modelis ar vienu mainīgo, tad šos modeļus var salīdzināt savā starpā, lai secinātu, vai modeļa vienkāršošana ir bijusi pamatota. Divu pakārtotu/saistītu modeļu salīdzināšanu var veikt ar funckijā AIC(), vai anova(), kurai kā arguments norādīts Chisq tests.

anova(mod,mod2,test="Chisq")
## Analysis of Deviance Table
## 
## Model 1: skaits ~ grupa * pH
## Model 2: skaits ~ grupa
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       294     309.80                     
## 2       297     310.41 -3 -0.61319   0.8934
AIC(mod,mod2)
##      df      AIC
## mod   6 879.6302
## mod2  3 874.2434

Secinājumi: izmantojot hī kvadrāta testu, konstatēts, ka atšķirība starp modeļiem nav būtiska (p vērtība ir 0,89), attiecīgi mēs varam izvēlēties vienkāršāko modeli, kurā ir tikai viens regresors. Arī salīdzinot pēc AIC vērtībām, otraijam modelism ir mazāka AIC vērtība un tas uzskatāms par piemērotāku.

12.4 Binārā loģistiskā regresija

Binārās loģistiskās regresijas veikšanai izmanto to pašu funkciju glm(), tikai šajā gadījumā kā family= jānorāda binomial un saistības funkcija ir logit (ko var arī mainīt pret probit). Formāts, kādā veidā norāda regresentu (atkarīgo mainīgo) ir atkarīgs no tā, kādā veidā ir pieejami dati. Binārajā loģistiskajā regresijā pārbauda vai iespējamības (ka iestāsies konkrētais notikums (būs bojājums)) būtiski atšķiras, atkarībā no ietekmējošiem faktoriem (gan kvantitatīviem, gan kvalitatīviem).

Ja ir izejas dati, kuros atkarīgais mainīgais sastāv no 0 un 1, tad funkcijā glm() šī kolonna ir jānorāda, kā atkarīgais mainīgais (šadā veidā dati ir pieejami failā veids1).

mod1<-glm(bojajums~skirne+veids, family=binomial("logit"),data=veids1)
summary(mod1)
## 
## Call:
## glm(formula = bojajums ~ skirne + veids, family = binomial("logit"), 
##     data = veids1)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.7901  -0.9376  -0.6037   1.1195   1.8932  
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    1.3773     0.3978   3.462 0.000536 ***
## skirneB       -0.4604     0.4203  -1.095 0.273354    
## skirneC       -1.2396     0.4446  -2.788 0.005304 ** 
## veidstunelis  -1.7476     0.3521  -4.963 6.95e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 241.31  on 174  degrees of freedom
## Residual deviance: 208.73  on 171  degrees of freedom
## AIC: 216.73
## 
## Number of Fisher Scoring iterations: 4

Ja dati ir jau apkopoti un tajos ir kolonnas, kas parāda pozitīvo un negatīvo notikumu skaitu, kā failā veids2 kolonnas bojats un nebojats, tad kā atkarīgais mainīgais formulā ir jānorāda abas kolonnas, kas apvienotas ar funkciju cbind().

mod2<-glm(cbind(bojats,nebojats)~skirne+veids,family=binomial("logit"),data=veids2)
summary(mod2)
## 
## Call:
## glm(formula = cbind(bojats, nebojats) ~ skirne + veids, family = binomial("logit"), 
##     data = veids2)
## 
## Deviance Residuals: 
##       1        2        3        4        5        6  
##  0.5944  -0.4049  -1.6402   1.2947   0.9796  -1.5666  
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    1.3773     0.3978   3.462 0.000536 ***
## skirneB       -0.4604     0.4203  -1.095 0.273354    
## skirneC       -1.2396     0.4446  -2.788 0.005304 ** 
## veidstunelis  -1.7476     0.3521  -4.963 6.95e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 40.8849  on 5  degrees of freedom
## Residual deviance:  8.2977  on 2  degrees of freedom
## AIC: 37.095
## 
## Number of Fisher Scoring iterations: 4

Trešā iespēja ir, ka dati apkopoti un tajos ir kolonna ar procentiem (decimāldaļās), kas parāda notiku iestāšanās biežumu (šajā gadījumā procentuālais bojāto augu daudzums). Lai analizētu šādus datus, kolonna ar procentiem jānorāda kā atkarīgais mainīgais, plus papildus jānorāda arguments weights= un kolonna, kurā ir oriģinālie kopējie skaita dati. To var nenorādīt gadījumos, ja skaita dati, no kuriem aprēķināti procenti ir vienādi starp visām faktoru kombinācijām (visās rindiņās).

mod3<-glm(procents~skirne+veids,weights=skaits,family=binomial("logit"),data=veids3)
summary(mod3)
## 
## Call:
## glm(formula = procents ~ skirne + veids, family = binomial("logit"), 
##     data = veids3, weights = skaits)
## 
## Deviance Residuals: 
##       1        2        3        4        5        6  
##  0.5944  -0.4049  -1.6402   1.2947   0.9796  -1.5666  
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    1.3773     0.3978   3.462 0.000536 ***
## skirneB       -0.4604     0.4203  -1.095 0.273354    
## skirneC       -1.2396     0.4446  -2.788 0.005304 ** 
## veidstunelis  -1.7476     0.3521  -4.963 6.95e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 40.8849  on 5  degrees of freedom
## Residual deviance:  8.2977  on 2  degrees of freedom
## AIC: 37.095
## 
## Number of Fisher Scoring iterations: 4

Secinājumi: neatkarīgi no datu sagatavošanas veida, visi iegūtie koeficienti un tie būtiskumi ir vienādi. Pastāv būtiska atšķirība starp skirnes A (izmantota kā bāzes līmenis) un skirnes Cbojājumu iespējamību (šķirnei C tā ir mazāka nekā šķirnei A, ko parāda negatīvs koeficients pie šķirnes C), kā arī it būtiska atšķirība starp audzēšanas veidu - lauks un tunelis, turklāt tuneļa audzēšanas veidam bojājumu daudzums ir mazāks nekā laukam veidam. Jāatceras, ka arī šajā gadījumā šie ir lineārā vienādojuma koeficienti, kur y vērtības iegūtas izmantojot logit saistības funkciju no sākotnējiem bojājumu datiem.

Lai aprēķinātu prognozēto bojājumu iespējamību, var izmantot funkciju predict(), kurai kā arguments jānorāda modeļa objekts. Ja nenorāda papildus argumentus, tad aprēķinātās vērtības būs lineārajam vienādojumam. Prognozēto iespējamības vērtību iegūšanai jānorāda papildus arguments type="respone".

predict(mod3)
##          1          2          3          4          5          6 
##  1.3773246 -0.3702801  0.9168930 -0.8307117  0.1376954 -1.6099093
predict(mod3,type="response")
##         1         2         3         4         5         6 
## 0.7985610 0.4084733 0.7144086 0.3034946 0.5343696 0.1666012

Secinājumi: Izmantojot trešo modeli, iegūtas prognozētās bojājumu iespējamības vērtības katrai no sešām pārbaudītajām abu faktoru kombinācijām, piemēram, ja audzēšanas veids ir lauks un šķirne ir A (pirmā rindiņa failā veids3), tad prognozētais bojājumu iespējamība ir 0,798 jeb 79,8%.