Mixed effect Modell - hohe P-Werte u.a.m.

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

RUser

Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von RUser »

Hallo zusammen,

selbes Projekt, neues Problem. Ich habe einen Datensatz im long-format vorliegen. Die Variablen sind
Fallnummer, Design, Autokauf, Assoziationen, Modell, Vertrautheit, Meinung, Schwierigkeit, AusdruckMeinung,Wichtigkeit, Geschlecht, Alter

Zwei Befragungswellen wurden durchgeführt, nur Assoziationen wurden zweimal gefragt. Die jetzt generierte Assoziationsvariable ist -1, wenn in beiden Befragungen eine Assoziation verneint wurde, 0 wenn sie in nur einer Welle angekreuzt war und 1, wenn sie beiden Wellen angekreuzt war.

Aktuelles Modell:
Mod1 <- glmer(Assoziationen ~ Autokauf + Vertrautheit + Meinung + Schwierigkeit +
AusdruckMeinung + Wichtigkeit + (1|Design), data=D[Assoziationen!=-1, ],
family = binomial(link= "logit"))

summary(Mod1)

Die zweimal nicht genannten Assoziationen sollen die Regression nicht beeinflussen und sind deshalb außen vorgelassen. Der Output zeigt P-Werte von 0.91 bis 0.98.
Mache ich da einen Fehler im Modell, weswegen die p-Werte "falschrum" sind? Ich hätte lieber niedrige P-Werte und entsprechend als signifikant gekennzeichnete Variablen. :)

Weiteres Problem: Endziel sind nicht die P-Werte, sondern, wie Variablen die Assoziationen beeinflussen. Die Variable Design hat drei Ausprägungen. Eine davon soll als Basis herhalten. Es soll gezeigt werden, wie die anderen Variablen (inkl. der zwei übrigen Designausprägungen) das Vorhandensein von Assoziationen mit Ausprägung 1 beeinflussen.

Freue mich über Hinweise und Hilfestellung.
RUser

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von RUser »

Anhängen der Daten macht Probleme...
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von jogo »

Hallo RUser,

vielleicht ist das auch ein Effekt davon, dass momentan die installierte Version von phpBB ein Problem mit der vom Provider eingespielten neuen Version von PHP hat. Am Sonntag soll es hier ein Update für phpBB geben.
Dann sind hoffentlich diese Probleme beseitigt.

Gruß, Jörg
RUser

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von RUser »

Danke für die Info Jörg.

Hier noch der R-Output, falls es hilft. Das Layout wird leider zerlegt :(

Code: Alles auswählen

> summary(Mod1)
Generalized linear mixed model fit by maximum likelihood (Laplace
  Approximation) [glmerMod]
 Family: binomial  ( logit )
Formula: Assoziationen ~ Autokauf + Vertrautheit + Meinung + Schwierigkeit +  
    AusdruckMeinung + Wichtigkeit + (1 | Design)
   Data: D[Assoziationen != -1, ]

     AIC      BIC   logLik deviance df.resid 
    25.5     73.6     -4.8      9.5     2986 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-6.5044  0.0000  0.0000  0.0000  0.3036 

Random effects:
 Groups Name        Variance Std.Dev.
 Design (Intercept) 0        0       
Number of obs: 2994, groups:  Design, 3

Fixed effects:
                Estimate Std. Error z value Pr(>|z|)
(Intercept)      -122.90    1147.83  -0.107    0.915
Autokauf          -82.70    1147.83  -0.072    0.943
Vertrautheit       66.76     917.69   0.073    0.942
Meinung           -45.52    1750.33  -0.026    0.979
Schwierigkeit      41.37     405.34   0.102    0.919
AusdruckMeinung    21.37     202.67   0.105    0.916
Wichtigkeit       -44.11     900.87  -0.049    0.961

Correlation of Fixed Effects:
            (Intr) Autokf Vrtrth Meinng Schwrg AsdrcM
Autokauf    -0.185                                   
Vertrauthet -0.179 -0.179                            
Meinung     -0.127 -0.127 -0.166                     
Schwierigkt -0.027 -0.027 -0.371 -0.401              
AusdrckMnng -0.027 -0.027 -0.371 -0.401  1.000       
Wichtigkeit -0.184 -0.184 -0.213 -0.190 -0.324 -0.324
convergence code: 0
 Hessian is numerically singular: parameters are not uniquely determined
Die letzte Zeile hatte ich vergessen zu erwähnen...kann jemand damit etwas anfangen? :oops:
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von EDi »

Hmm, ich würde mir das zuerstmal grafisch anschauen was da abgeht.

Dieser Part vom output deutet auf Probleme mit dem Model hin:

Random effects:
Groups Name Variance Std.Dev.
Design (Intercept) 0 0
Number of obs: 2994, groups: Design, 3

1. Die geschätzte Varianz ist 0! (In 99,999% der Fälle ist das ein Problem, dem man nachgehen sollte)
2) Du hast nur 3 Designs. Aus 3 eine Varianz schätzen zu wollen ist ambitioniert und erklärt 1.

Ist die Responsevariable (Assoziationen) binär?




> Hessian is numerically singular: parameters are not uniquely determined
> Die letzte Zeile hatte ich vergessen zu erwähnen...kann jemand damit etwas anfangen? :oops:

Hört sich nach "complete separation" an, d.h. du kannst mit deinen Faktoren genau die Grenze zwischen 0/1 ziehen.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
RUser

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von RUser »

Hallo!

Erstmal Danke für die Rückmeldungen. Die Daten sind jetzt angehängt.

Derzeit arbeite ich mit folgendem Modell:

Code: Alles auswählen

Mod8 <- glmer(Assoziationen ~ Design + Autokauf + Vertrautheit + Meinung +
Schwierigkeit + AusdruckMeinung + Wichtigkeit + (1|Fall.Nr.), 
data=D[Assoziationen!=-1,], family = binomial(link= "logit"))
Output:

Code: Alles auswählen

Generalized linear mixed model fit by maximum likelihood (Laplace
  Approximation) [glmerMod]
 Family: binomial  ( logit )
Formula: Assoziationen ~ Design + Autokauf + Vertrautheit + Meinung +  
    Schwierigkeit + AusdruckMeinung + Wichtigkeit + (1 | Fall.Nr.)
   Data: D[Assoziationen != -1, ]

     AIC      BIC   logLik deviance df.resid 
    26.7     80.8     -4.4      8.7     2985 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-5.3124  0.0000  0.0000  0.0000  0.3755 

Random effects:
 Groups   Name        Variance Std.Dev.
 Fall.Nr. (Intercept) 0        0       
Number of obs: 2994, groups:  Fall.Nr., 108

Fixed effects:
                Estimate Std. Error z value Pr(>|z|)
(Intercept)      -104.75     513.90  -0.204    0.838
Design            -18.77     527.89  -0.036    0.972
Autokauf          -96.02     515.10  -0.186    0.852
Vertrautheit       21.89     533.37   0.041    0.967
Meinung           -22.29     672.32  -0.033    0.974
Schwierigkeit      75.30     311.96   0.241    0.809
AusdruckMeinung    38.34     155.98   0.246    0.806
Wichtigkeit       -79.54     530.21  -0.150    0.881

Correlation of Fixed Effects:
            (Intr) Design Autokf Vrtrth Meinng Schwrg AsdrcM
Design      -0.029                                          
Autokauf    -0.225 -0.024                                   
Vertrauthet -0.025 -0.148 -0.032                            
Meinung     -0.156 -0.074 -0.159 -0.088                     
Schwierigkt -0.142 -0.382 -0.144 -0.425 -0.185              
AusdrckMnng -0.142 -0.382 -0.144 -0.425 -0.185  1.000       
Wichtigkeit -0.013 -0.212 -0.008 -0.150 -0.046 -0.407 -0.407
convergence code: 0
Model is nearly unidentifiable: large eigenvalue ratio
 - Rescale variables?
Die Varianz ist hier auch mit 0 angegeben [Danke für den Hinweis!], wie auch bei allen anderen Modellen, die ich bisher so versucht habe.
Die Fehlermeldung "Hessian is numerically singular: parameters are not uniquely determined" kommt zwar nicht mehr, dafür die Warnung ganz am Ende des Outputs. Mit beidem kann ich ehrlich gesagt nichts anfangen...klar, Varianz = 0 klingt sehr fragwürdig, aber ich weiß nicht, woran es liegt. Ich vermute, es ist ein Wurm in den Daten, vielleicht ein systematischer Fehler?
Ist die Responsevariable (Assoziationen) binär?
Nein, die hat drei Ausprägungen [-1;0;1], allerdings werden die Zeilen mit -1 als Assoziationsausprägung in der Regression nicht beachtet. Das soll bewirken, dass die Responsevariable binär ist, um die binäre logistische Regression durchführen zu können.

Noch ein Problem:
"Die verschiedenen Designs sind als Faktor kodiert und der erste Level wird als Baseline verwendet, d.h. im Intercept inkludiert."
Diese Info habe ich bekommen, dies soll das Modell erfüllen. So wie ich es sehe, müssen die Designs noch als Faktor codiert werden. Das dritte Design soll in den Intercept, damit die Koeffizienten im Output aussagen, wieweit die übrigen Variablen und die beiden verbliebenen Designs die Stabilität der Antworten (d.h. Assoziation = 1) beeinflussen. Nützt dafür das Paket "baseline" etwas oder macht das etwas völlig anderes?

Erstmal muss das Modell passen, aber vielleicht hilft es ja, zu wissen, was am Ende dargestellt sein soll.

Ich freue mich über Gedanken und Hilfestellung! :)
Dateianhänge
Longformat.csv
Datensatz umgeschrieben ins Longformat
(132.88 KiB) 97-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von EDi »

Hier mal meine Versuche:

Code: Alles auswählen

# Load --------------------------------------------------------------------
library(lme4)

df <- read.table(file.choose(), # Longformat.csv
                 header = TRUE, 
                 sep = ';', 
                 fill = TRUE    # Line 2931 has only 3 entries?!
                 )



# Clean -------------------------------------------------------------------

# rm overfluous cols
all(is.na(df[['X']]))
all(is.na(df[['X.1']]))
df[['X']] <- NULL
df[['X.1']] <- NULL

# rm obs with NAs
all(complete.cases(df))
df[!complete.cases(df), ]
df <- df[complete.cases(df), ]



# check frequencies
lapply(df, function(x) {
  lu <- length(unique(x))
  if (lu < 8) {
    return(table(x))
  } else {
    return(summary(x))
  }
})

length(unique(df$Fall.Nr.))

# should be all factors except age & Assoziation
to_factor <- c(1:3, 5:11)
df[to_factor] <- lapply(df[to_factor], factor)
str(df)


# exclude Assoz == -1
df <- df[df[['Assoziationen']] != -1, ]
df <- droplevels(df)



# Do ----------------------------------------------------------------------

# mod 
mod <- glmer(Assoziationen ~ Design + Autokauf + Vertrautheit + Meinung + 
               Schwierigkeit + AusdruckMeinung + Wichtigkeit + 
               (1|Fall.Nr.), 
             data = df, 
             family = binomial(link= "logit"))

# change optmizer to fix (? - at least no warning) convergence problem
mod_b <- glmer(Assoziationen ~ Design + Autokauf + Vertrautheit + Meinung + 
               Schwierigkeit + AusdruckMeinung + Wichtigkeit + 
               (1|Fall.Nr.), 
             data = df, 
             family = binomial(link= "logit"),
             control = glmerControl(optimizer = "bobyqa", 
                                    optCtrl = list(maxfun = 2e5)))

# compare both
# Likelihood
logLik(mod)
logLik(mod_b)

# fixed effects
data.frame(mod = fixef(mod), mod_b = fixef(mod_b), diff = fixef(mod) - fixef(mod_b))

# random effects
data.frame(mod = ranef(mod)[['Fall.Nr.']][['(Intercept)']],
           mod_b = ranef(mod_b)[['Fall.Nr.']][['(Intercept)']],
           diff = ranef(mod)[['Fall.Nr.']][['(Intercept)']] - ranef(mod_b)[['Fall.Nr.']][['(Intercept)']])

# seems like a false positive???

summary(mod_b)
drop1(mod_b)
Die meiste Arbeit war (wie immer :roll: ) die Daten aufzuarbeiten (Fing schon beim einlesen an :twisted: ).
Da du keine Angaben dazu gemacht hast, habe ich Annahmen gemacht (wenn sie nicht passen, ist das nicht mein Problem).

Einpaar Anmerkungen:
i) Ich vermute du hast: alle predictors als kontinuierlich angesehen - ich denke alle außer Alter und Assoziation sollten kategorisch (Faktoren) sein
ii) droplevels() kann nach einem subset überflüssife Faktor-Levels entfernen
iii) NA Werte habe ich Fallweise ausgeschlossen
iv) Convergence Probleme hab ich auch gehabt, aber fixen können.

Was du unbedingt noch machen solltest wären einpaar Grafiken & Diagnose für das Model.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
RUser

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von RUser »

Hallo EDi,

wow, danke für die Zeit und Mühe, die du investierst hast!
Freut mich jedenfalls sehr, dass endlich eine Regression mit Ergebnissen vorliegt.
Da du keine Angaben dazu gemacht hast...
Dazu hatte ich im anderen Thema viewtopic.php?p=848#p848 was geschrieben und wollte niemanden mit Wiederholung abschrecken :)
Ich vermute du hast: alle predictors als kontinuierlich angesehen - ich denke alle außer Alter und Assoziation sollten kategorisch (Faktoren) sein
Stimmt :oops:
Nicht absichtlich, habe sie nicht in Faktorvariablen umgewandelt.

Der Output von Mod_b:

Code: Alles auswählen

> summary(mod_b)
Generalized linear mixed model fit by maximum likelihood (Laplace
  Approximation) [glmerMod]
 Family: binomial  ( logit )
Formula: Assoziationen ~ Design + Autokauf + Vertrautheit + Meinung +  
    Schwierigkeit + AusdruckMeinung + Wichtigkeit + (1 | Fall.Nr.)
   Data: df
Control: glmerControl(optimizer = "bobyqa", optCtrl = list(maxfun = 2e+05))

     AIC      BIC   logLik deviance df.resid 
  3476.4   3626.5  -1713.2   3426.4     2968 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.9533 -0.8920  0.4363  0.6484  2.5773 

Random effects:
 Groups   Name        Variance Std.Dev.
 Fall.Nr. (Intercept) 0.3805   0.6168  
Number of obs: 2993, groups:  Fall.Nr., 108

Fixed effects:
                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)      -1.16257    1.14804  -1.013 0.311224    
Design2           0.34632    0.19092   1.814 0.069685 .  
Design3           1.25523    0.20455   6.136 8.44e-10 ***
Autokauf1         0.01940    0.15778   0.123 0.902137    
Vertrautheit2     0.67170    0.28737   2.337 0.019420 *  
Vertrautheit3     0.70097    0.30659   2.286 0.022233 *  
Vertrautheit4     0.97626    0.33963   2.874 0.004047 ** 
Meinung-1        -0.09125    0.39795  -0.229 0.818640    
Meinung0         -0.06831    0.34509  -0.198 0.843098    
Meinung1          0.92223    0.35053   2.631 0.008515 ** 
Meinung2          1.51626    0.43071   3.520 0.000431 ***
Schwierigkeit3   -0.00635    0.42509  -0.015 0.988082    
Schwierigkeit4    0.45235    0.40466   1.118 0.263632    
Schwierigkeit5    0.38412    0.42190   0.910 0.362577    
Schwierigkeit6    0.53361    0.40187   1.328 0.184240    
Schwierigkeit7    0.40918    0.42206   0.969 0.332297    
AusdruckMeinung2  0.21234    0.58557   0.363 0.716881    
AusdruckMeinung3  0.37112    0.59001   0.629 0.529343    
AusdruckMeinung4  0.04621    0.58704   0.079 0.937254    
AusdruckMeinung5  0.47838    0.57454   0.833 0.405052    
AusdruckMeinung6  0.31112    0.59783   0.520 0.602778    
AusdruckMeinung7  1.06454    0.62525   1.703 0.088647 .  
Wichtigkeit1     -0.55362    0.85648  -0.646 0.518030    
Wichtigkeit2     -0.64728    0.85002  -0.761 0.446367    
---
Warum sind einige Ausprägungen nicht vorhanden? Ich bin mir von der Eingabe her sicher, dass auch Meinung -2 vorkam.
Insbesondere wundert mich, dass Design 1 nicht aufgelistet ist.

Freue mich über Gedanken und Hinweise :)
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von EDi »

Warum sind einige Ausprägungen nicht vorhanden? Ich bin mir von der Eingabe her sicher, dass auch Meinung -2 vorkam.
Insbesondere wundert mich, dass Design 1 nicht aufgelistet ist.
Die sind da und zwar alle im (Intercept), der als Referenzlevel genommen wird. Die ganzen Effekte sind relativ zu diesem Referenzlevel.
Siehe auch hier und dort.

Für spezifische Vergleiche / Mittelwerte bin ich mitlerweils ein großer FAN vom lsmeans package [Früher hab ich dafür multcomp genutzt, das kommt aber immer seltener auf den Tisch. Ist aber auch richtig gut!].
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
RUser

Re: Mixed effect Modell - hohe P-Werte u.a.m.

Beitrag von RUser »

Hallo EDi,

danke dir für die Links!
Ein Hinweis: Die Fälle 60 und 38 sind rausgeflogen, weil das Alter der Teilnehmer ein Ausreißer war.

Code: Alles auswählen

# Visualisierung der möglichen Ausreißer
barplot(df$Alter, main = "Altersverteilung der Teilnehmer", 
xlab = "Teilnehmer", ylab = "Alter in Jahren") # Darstellung zeigt zwei Ausreißer.
boxplot(df$Alter, main = "Altersverteilung der Teilnehmer", 
xlab = "Teilnehmer, inklusive Ausreißer", ylab = "Alter in Jahren") # Ausreißer werden optisch noch deutlicher.

# Entfernen der Ausreißer (Fallnummer 60 und 38)
df <- df[df[['Fall.Nr.']] != 60, ]
df <- df[df[['Fall.Nr.']] != 38, ]
boxplot(df$Alter, main = "Altersverteilung der Teilnehmer", 
xlab = "Teilnehmer", ylab = "Alter in Jahren") # Ausreißer werden optisch noch deutlicher.
# 25 Jahre alte Teilnehmer lassen wir drin.
Ich hoffe, ich habe das Folgende richtig verstanden :oops:
Die unter summary(mod_b) aufgeführten Fixed Effects:

Code: Alles auswählen

Fixed effects:
                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)      -1.160167   1.151202  -1.008 0.313556    
Design2           0.339534   0.195390   1.738 0.082259 .  
Design3           1.246374   0.207225   6.015  1.8e-09 ***
Autokauf1         0.001575   0.160321   0.010 0.992163    
Vertrautheit2     0.686027   0.287533   2.386 0.017037 *  
Vertrautheit3     0.731508   0.307021   2.383 0.017191 *  
Vertrautheit4     0.995395   0.339968   2.928 0.003412 ** 
Meinung-1        -0.105508   0.398534  -0.265 0.791209    
Meinung0         -0.062043   0.345769  -0.179 0.857597    
Meinung1          0.892654   0.351539   2.539 0.011108 *  
Meinung2          1.449586   0.431233   3.361 0.000775 ***
Schwierigkeit3    0.015085   0.427745   0.035 0.971867    
Schwierigkeit4    0.475253   0.406971   1.168 0.242895    
Schwierigkeit5    0.401980   0.423850   0.948 0.342925    
Schwierigkeit6    0.540791   0.403655   1.340 0.180331    
Schwierigkeit7    0.396281   0.424632   0.933 0.350699    
AusdruckMeinung2  0.212738   0.587396   0.362 0.717224    
AusdruckMeinung3  0.370916   0.591795   0.627 0.530814    
AusdruckMeinung4  0.049856   0.588795   0.085 0.932521    
AusdruckMeinung5  0.497580   0.576990   0.862 0.388482    
AusdruckMeinung6  0.310484   0.599616   0.518 0.604594    
AusdruckMeinung7  1.027985   0.631354   1.628 0.103477    
Wichtigkeit1     -0.583610   0.858977  -0.679 0.496870    
Wichtigkeit2     -0.645857   0.852697  -0.757 0.448793 
...sind der Einfluss der einzelnen Ausprägungen auf die Assoziationen. Der Intercept setzt sich aus den in den Fixed Effects nicht aufgeführten Ausprägungen (jeweils die ersten genannten) jeder Gruppe zusammen. Wie auch immer R den nun genau ausrechnet...

Mittels

Code: Alles auswählen

library(effects)
summary(allEffects(mod_b)) 
plot(allEffects(mod_b)) # leider schaffe ich es nicht, die Grafik anzuhängen. Gibt Fehlermeldung ungültige Dateierweiterung.
wird für alle Ausprägungen aller Gruppen dargestellt, wie oft sie bei doppelt genannten Assoziationen (=1) vorliegen. Es erinnert an einen Boxplot und hat nur deskriptiven Charakter. Man erkennt aber, welche Ausprägungen mit Werten der Assoziationsvariable nahe 1 verbunden sind. Das reicht für meine Zwecke.

Sofern mein Verständnis passt, frage ich mich noch, wie man testen kann, dass das Modell die Daten sinnvoll wiedergibt. Ich mache mir Sorgen, dass das alles schön und gut ist, aber total falsch...

Dieser Teil des Outputs hilft da nicht weiter oder?

Code: Alles auswählen

     AIC      BIC   logLik deviance df.resid 
  3424.8   3574.4  -1687.4   3374.8     2918 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.9532 -0.8922  0.4386  0.6453  2.5965 

Random effects:
 Groups   Name        Variance Std.Dev.
 Fall.Nr. (Intercept) 0.3844   0.62    
Number of obs: 2943, groups:  Fall.Nr., 106
Danke für Ideen und Hilfestellung :)
Antworten