Lineare Regression mit wiederholten Messungen in R

12

Ich konnte nicht herausfinden, wie eine lineare Regression in R in für ein Design mit wiederholten Kennzahlen durchgeführt werden kann. In einer früheren Frage (die noch nicht beantwortet wurde) wurde mir vorgeschlagen, keine lmgemischten Modelle zu verwenden , sondern diese zu verwenden. Ich habe es lmfolgendermaßen benutzt:

lm.velocity_vs_Velocity_response <- lm(Velocity_response~Velocity*Subject, data=mydata)

(Weitere Details zum Datensatz finden Sie unter dem Link oben)

Im Internet konnte ich jedoch kein Beispiel mit R-Code finden, das zeigt, wie eine lineare Regressionsanalyse durchgeführt werden kann.

R2

Gibt es jemanden, der einige Vorschläge machen kann? Jedes R-Code-Beispiel könnte eine große Hilfe sein.


Bearbeiten
Nach dem Vorschlag, den ich bisher erhalten habe, sollte die Lösung für die Analyse meiner Daten folgendermaßen aussehen:

library(nlme)
summary(lme(Velocity_response ~ Velocity*Subject, data=scrd, random= ~1|Subject))

Das Ergebnis der Zusammenfassung lautet wie folgt:

    > summary(lme(Velocity_response ~ Velocity*Subject, data=scrd, random= ~1|Subject))
    Linear mixed-effects model fit by REML
     Data: scrd 
           AIC      BIC   logLik
      104.2542 126.1603 -30.1271

    Random effects:
     Formula: ~1 | Subject
            (Intercept) Residual
    StdDev:    2.833804 2.125353

Fixed effects: Velocity_response ~ Velocity * Subject 
                              Value Std.Error DF    t-value p-value
(Intercept)               -26.99558  25.82249 20 -1.0454288  0.3083
Velocity                   24.52675  19.28159 20  1.2720292  0.2180
SubjectSubject10           21.69377  27.18904  0  0.7978865     NaN
SubjectSubject11           11.31468  33.51749  0  0.3375754     NaN
SubjectSubject13           52.45966  53.96342  0  0.9721337     NaN
SubjectSubject2           -14.90571  34.16940  0 -0.4362299     NaN
SubjectSubject3            26.65853  29.41574  0  0.9062674     NaN
SubjectSubject6            37.28252  50.06033  0  0.7447517     NaN
SubjectSubject7            12.66581  26.58159  0  0.4764880     NaN
SubjectSubject8            14.28029  31.88142  0  0.4479188     NaN
SubjectSubject9             5.65504  34.54357  0  0.1637076     NaN
Velocity:SubjectSubject10 -11.89464  21.07070 20 -0.5645111  0.5787
Velocity:SubjectSubject11  -5.22544  27.68192 20 -0.1887672  0.8522
Velocity:SubjectSubject13 -41.06777  44.43318 20 -0.9242591  0.3664
Velocity:SubjectSubject2   11.53397  25.41780 20  0.4537754  0.6549
Velocity:SubjectSubject3  -19.47392  23.26966 20 -0.8368804  0.4125
Velocity:SubjectSubject6  -29.60138  41.47500 20 -0.7137162  0.4836
Velocity:SubjectSubject7   -6.85539  19.92271 20 -0.3440992  0.7344
Velocity:SubjectSubject8  -12.51390  22.54724 20 -0.5550080  0.5850
Velocity:SubjectSubject9   -2.22888  27.49938 20 -0.0810519  0.9362
 Correlation: 
                          (Intr) Velcty SbjS10 SbjS11 SbjS13 SbjcS2 SbjcS3 SbjcS6 SbjcS7 SbjcS8 SbjcS9 V:SS10 V:SS11 V:SS13 Vl:SS2 Vl:SS3
Velocity                  -0.993                                                                                                         
SubjectSubject10          -0.950  0.943                                                                                                  
SubjectSubject11          -0.770  0.765  0.732                                                                                           
SubjectSubject13          -0.479  0.475  0.454  0.369                                                                                    
SubjectSubject2           -0.756  0.751  0.718  0.582  0.362                                                                             
SubjectSubject3           -0.878  0.872  0.834  0.676  0.420  0.663                                                                      
SubjectSubject6           -0.516  0.512  0.490  0.397  0.247  0.390  0.453                                                               
SubjectSubject7           -0.971  0.965  0.923  0.748  0.465  0.734  0.853  0.501                                                        
SubjectSubject8           -0.810  0.804  0.769  0.624  0.388  0.612  0.711  0.418  0.787                                                 
SubjectSubject9           -0.748  0.742  0.710  0.576  0.358  0.565  0.656  0.386  0.726  0.605                                          
Velocity:SubjectSubject10  0.909 -0.915 -0.981 -0.700 -0.435 -0.687 -0.798 -0.469 -0.883 -0.736 -0.679                                   
Velocity:SubjectSubject11  0.692 -0.697 -0.657 -0.986 -0.331 -0.523 -0.607 -0.357 -0.672 -0.560 -0.517  0.637                            
Velocity:SubjectSubject13  0.431 -0.434 -0.409 -0.332 -0.996 -0.326 -0.378 -0.222 -0.419 -0.349 -0.322  0.397  0.302                     
Velocity:SubjectSubject2   0.753 -0.759 -0.715 -0.580 -0.360 -0.992 -0.661 -0.389 -0.732 -0.610 -0.563  0.694  0.528  0.329              
Velocity:SubjectSubject3   0.823 -0.829 -0.782 -0.634 -0.394 -0.622 -0.984 -0.424 -0.799 -0.667 -0.615  0.758  0.577  0.360  0.629       
Velocity:SubjectSubject6   0.462 -0.465 -0.438 -0.356 -0.221 -0.349 -0.405 -0.995 -0.449 -0.374 -0.345  0.425  0.324  0.202  0.353  0.385
Velocity:SubjectSubject7   0.961 -0.968 -0.913 -0.740 -0.460 -0.726 -0.844 -0.496 -0.986 -0.778 -0.718  0.886  0.674  0.420  0.734  0.802
Velocity:SubjectSubject8   0.849 -0.855 -0.807 -0.654 -0.406 -0.642 -0.746 -0.438 -0.825 -0.988 -0.635  0.783  0.596  0.371  0.649  0.709
Velocity:SubjectSubject9   0.696 -0.701 -0.661 -0.536 -0.333 -0.526 -0.611 -0.359 -0.676 -0.564 -0.990  0.642  0.488  0.304  0.532  0.581
                          Vl:SS6 Vl:SS7 Vl:SS8
Velocity                                      
SubjectSubject10                              
SubjectSubject11                              
SubjectSubject13                              
SubjectSubject2                               
SubjectSubject3                               
SubjectSubject6                               
SubjectSubject7                               
SubjectSubject8                               
SubjectSubject9                               
Velocity:SubjectSubject10                     
Velocity:SubjectSubject11                     
Velocity:SubjectSubject13                     
Velocity:SubjectSubject2                      
Velocity:SubjectSubject3                      
Velocity:SubjectSubject6                      
Velocity:SubjectSubject7   0.450              
Velocity:SubjectSubject8   0.398  0.828       
Velocity:SubjectSubject9   0.326  0.679  0.600

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-1.47194581 -0.46509026 -0.05537193  0.39069634  1.89436646 

Number of Observations: 40
Number of Groups: 10 
Warning message:
In pt(q, df, lower.tail, log.p) : NaNs produced
> 

Jetzt verstehe ich nicht, woher ich das R ^ 2 und die entsprechenden p-Werte bekomme, die anzeigen, ob es eine lineare Beziehung zwischen den beiden Variablen gibt oder nicht, und ich habe auch nicht verstanden, wie meine Daten mit der Linie gezeichnet werden können, die zu der passt Regression.

Kann jemand so freundlich sein, mich zu erleuchten? Ich brauche wirklich deine Hilfe Jungs ...

L_T
quelle
"Mixed-Effects-Modelle und -Erweiterungen in der Ökologie mit R" von Zuur et al. ist eine nette Einführung in lineare Modelle mit gemischten Effekten, die sich weniger auf die Theorie als auf die Anwendung der Methodik konzentrieren.
Roland
Lieber Roland, ich glaube, dass dieses Buch nützlich ist, aber ich suche lieber online nach etwas ... Haben Sie eine Webseite, die Sie vorschlagen können?
L_T
1
Wie ich in Ihrem früheren Beitrag bereits sagte, ist mit lm () ein Plot verknüpft. Wenn Ihr Modell also M1 ist, können Sie plot (M1) verwenden.
Peter Flom - Reinstate Monica
Sehr geehrter @PeterFlom, ja, aber Sie haben mir auch gesagt, ich solle es vermeiden, lm für das Design wiederholter Messungen zu verwenden. Meine Frage ist also, ob ich lm zur Analyse meiner Daten oder einer anderen Funktion verwenden muss. Irgendein Vorschlag?
L_T
1
Wie gesagt, schauen Sie sich mehrstufige Modelle an. In R können Sie sich das nlmePaket ansehen . Durchsuchen Sie diese Site auch nach dem Thema, es wird hier viel darüber geschrieben.
Peter Flom - Reinstate Monica

Antworten:

17

Was Sie wirklich tun, hängt von den Zielen der Analyse ab. Ich bin nicht sicher, was genau die Ziele Ihrer Analyse sind, aber ich werde einige Beispiele durchgehen, und hoffentlich wird eines davon auf Ihre Situation zutreffen.

Fall 1 : Eine quantitative Variable wird zweimal gemessen

Angenommen, Sie haben eine Studie an einem menschlichen Probanden durchgeführt, bei der die Teilnehmer zweimal einen Statistik-Test absolviert haben, und Sie wollten herausfinden, ob sich die Durchschnittswerte bei der zweiten Messung von der ersten unterscheiden (um festzustellen, ob das Lernen stattgefunden hat). Wenn die Ergebnisse test1 und test2 im Datenrahmen d gespeichert sind, können Sie dies vollständig mit der Funktion lm () tun, wie in:

mod <- lm(test2 - test1 ~ 1, data = d)
summary(mod)

Der Test des Abschnitts ist der Test der Differenz zwischen Test1 und Test2. Beachten Sie, dass Sie für den Unterschied zwischen Test1 und Test2 kein Delta-R ^ 2 haben. Stattdessen sollte Ihr Maß für die Effektgröße etwa Cohens d sein.

Fall 2a : Eine quantitative Variable, die zweimal gemessen wurde, eine dichotome Variable, die vollständig zwischen Probanden gemessen wurde

Nehmen wir an, wir haben das gleiche Studiendesign, möchten aber wissen, ob bei Männern und Frauen unterschiedliche Lernraten aufgetreten sind. Wir haben also eine quantitative Variable (Testleistung), die zweimal gemessen wird, und eine dichotome Variable, die einmal gemessen wird. Angenommen, Test1, Test2 und Geschlecht sind alle in Datenrahmen d enthalten. Wir könnten dieses Modell auch nur mit lm () testen, wie in:

mod <- lm(test2 - test1 ~ gender, data = d)
summary(mod)
lm.sumSquares(mod) # lm.sumSquares() is located in the lmSupport package, and gives the change in R^2 due to the between-subjects part of the model

Unter der Annahme, dass das Geschlecht zentriert ist (z. B. männlich = -.5 und weiblich = +.5), ist der Schnittpunkt in diesem Modell der Test der Differenz zwischen Test 1 und Test 2, gemittelt über Männer und Frauen. Der Koeffizient für das Geschlecht ist die Wechselwirkung zwischen Zeit und Geschlecht. Um die Wirkung des Geschlechts im zeitlichen Durchschnitt zu ermitteln, müssten Sie Folgendes tun:

mod <- lm(rowMeans(cbind(test2, test1)) ~ gender, data = d)
summary(mod)

Fall 2b : Eine quantitative Variable zweimal gemessen, eine quantitative Variable nur einmal gemessen

Nehmen wir an, wir haben wieder eine quantitative Variable, die zweimal gemessen wird, und eine quantitative Variable, die einmal gemessen wird. Nehmen wir zum Beispiel an, wir hatten ein Maß für das Basisinteresse an Statistiken und wollten feststellen, ob Personen mit einem höheren Basisinteresse von Zeit zu Zeit mehr dazu gelernt haben. Zuerst müssten wir das Interesse wie in konzentrieren :

d$interestc <- d$interest - mean(d$interest)

Angenommen, test1, test2 und interestc befinden sich alle im Datenrahmen d, dann könnte diese Frage sehr ähnlich wie in Fall 1a getestet werden:

mod <- lm(test2 - test1 ~ interestc, data = d)
summary(mod)
lm.sumSquares(mod)

Wiederum prüft der Abschnitt in diesem Modell, ob sich die Testergebnisse, gemittelt über das Interesse, von Zeitpunkt 1 zu Zeitpunkt 2 geändert haben. Diese Interpretation gilt jedoch nur, wenn das Interesse zentriert ist. Der Zinskoeffizient gibt an, ob der Effekt der Zeit vom Basiszins abhängt. Wir könnten den über die Zeit gemittelten Effekt von Interesse erhalten, indem wir Test1 und Test 2 wie oben zusammen mitteln und den Effekt von Interesse auf diese zusammengesetzte Variable testen.

Fall 2c : Eine quantitative Variable, die zweimal gemessen wurde, eine kategoriale Variable, die nur einmal gemessen wurde

Nehmen wir an, dass Ihre Variable zwischen Subjekten eine Kategorie war, die nur einmal gemessen wurde. Nehmen wir zum Beispiel an, dass Sie interessiert waren, ob Menschen verschiedener Rassen (Weiß - Asiatisch - Schwarz - Hispanisch) von Zeit zu Zeit unterschiedlich viel gelernt haben. Angenommen, Test1, Test2 und Rennen befinden sich in Datenrahmen d müssten Sie zunächst Code Race gegenüberstellen. Dies kann mit geplanten orthogonalen Kontrasten, Dummy-Codes oder Effektcodes erfolgen, abhängig von bestimmten Hypothesen / Fragen, die Sie testen möchten (ich empfehle, lm.setContrasts () zu besuchen, wenn Sie nach einer Hilfsfunktion suchen, um dies zu tun). . Unter der Annahme, dass die Race-Variable bereits kontrastcodiert ist, würden Sie lm () sehr ähnlich wie in den beiden oben genannten Fällen verwenden:

mod <- lm(test2 - test1 ~ race, data = d)
summary(mod)
lm.sumSquares(mod)

Unter der Annahme, dass die Rassenkontraste zentriert sind, ist der Schnittpunkt in diesem Modell erneut der "Haupteffekt" der Zeit. Die Koeffizienten für die Rassenkontraste sind die Wechselwirkungen zwischen diesen Kontrasten und der Zeit. Verwenden Sie den folgenden Code, um die Omnibus-Effekte von Race zu erhalten:

Anova(mod, type = 3)

Fall 3 : Eine quantitative Variable, die dreimal gemessen wurde (dh eine dreistufige Manipulation innerhalb der Probanden)

Angenommen, Sie haben dem Entwurf einen dritten Messpunkt aus dem ersten Fall hinzugefügt. Ihre Teilnehmer haben also dreimal statt zweimal einen Statistik-Test durchgeführt. Hier haben Sie einige Möglichkeiten, je nachdem, ob Sie einen Sammel-Test der Unterschiede zwischen den Zeitpunkten wünschen (manchmal auch nicht).

Angenommen, Ihre Haupthypothese lautet, dass die Testergebnisse von Zeitpunkt 1 bis Zeitpunkt 3 linear ansteigen. Angenommen, dass sich test1, test2 und test3 im Datenrahmen d befinden, könnte diese Hypothese getestet werden, indem zunächst das folgende Komposit erstellt wird:

d$lin <- d[, paste("test", sep = "", 1:3)] %*% c(-1, 0, 1)

Dann würden Sie testen, ob ein Intercept-Only-Modell, das lin als abhängige Variable verwendet, einen Intercept hat, der sich von 0 unterscheidet, wie in:

mod <- lm(lin ~ 1, data = d)
summary(mod)

Auf diese Weise können Sie testen, ob die Statistikwerte im Laufe der Zeit gestiegen sind. Sie können natürlich auch andere Arten von benutzerdefinierten Unterschiedswerten erstellen, abhängig von Ihren speziellen Hypothesen.

Wenn Sie sich für wichtige Omnibus-Tests interessieren, müssen Sie die Funktion Anova () aus dem Autopaket verwenden. Die spezifische Implementierung ist etwas verworren. Grundsätzlich legen Sie mit lm () fest, welche Variablen innerhalb von Subjekten und welche zwischen Subjekten liegen. Anschließend erstellen Sie den Bereich innerhalb der Subjekte des Modells (dh Sie legen fest, welche Werte von Test1, Test2 und Test3 zuerst, zweitens und drittens gemessen wurden) und übergeben dieses Modell an Anova (), indem Sie einen Datenrahmen mit dem Namen idata erstellen. Mit meinem hypothetischen Beispiel:

mod <- lm(cbind(test1, test2, test3) ~ 1, data = d) # No between-subjects portion of the model
idata <- data.frame(time = c("time1", "time2", "time3")) # Specify the within-subjects portion of the model
mod.A <- Anova(mod, idata = idata, idesign = ~time, type = 3) # Gives multivariate tests.  For univariate tests, add multivariate = FALSE
summary(mod.A)

Die idesign-Anweisung weist Anova an, die Zeitvariable (bestehend aus test1, test2 und test3) in das Modell aufzunehmen. Dieser Code gibt Ihnen einen Überblick über die Auswirkungen der Zeit auf die Testergebnisse.

Fall 4 : Eine quantitative Variable, die dreimal gemessen wurde, eine quantitative Variable zwischen den Probanden

Dieser Fall ist eine einfache Erweiterung von Fall 3. Wenn Sie sich wie oben lediglich um Tests mit einem Freiheitsgrad kümmern, können Sie einfach eine benutzerdefinierte Differenzbewertung mit Ihrer Variablen innerhalb der Probanden erstellen. Unter der Annahme, dass Test1, Test2, Test3 und Interesse alle im Datenrahmen d liegen, und unter der Annahme, dass wir an den linearen Auswirkungen der Zeit auf die Testergebnisse interessiert sind (und wie sich diese Auswirkungen der Zeit mit dem Basisinteresse ändern), würden Sie dies tun folgende:

d$lin <- d[, paste("test", sep = "", 1:3)] %*% c(-1, 0, 1)

Dann machen Sie folgendes (mit mittlerem Interesse):

mod <- lm(lin ~ interestc, data = d)
summary(mod)
lm.sumSquares(mod)

Wenn Sie Omnibus-Tests durchführen möchten, gehen Sie wie folgt vor:

mod <- lm(cbind(test1, test2, test3) ~ interest, data = d) # We now have a between-subjects portion of the model
idata <- data.frame(time = c("time1", "time2", "time3"))
mod.A <- Anova(mod, idata = idata, idesign = ~time * interest, type = 3) # The idesign statement assumes that we're interested in the interaction between time and interest
summary(mod.A)

Andere Fälle: Ich werde diese aus Gründen der Kürze weglassen, aber es handelt sich um einfache Erweiterungen dessen, was ich bereits beschrieben habe.

Bitte beachten Sie, dass die (univariaten) Omnibus-Zeittests, bei denen die Zeit mehr als 2 Ebenen hat, alle eine Sphärizität annehmen. Diese Annahme wird ziemlich unhaltbar, wenn Sie die Anzahl der Ebenen erhöhen. Wenn Sie eine ganze Reihe von Messpunkten in Ihrem Entwurf haben (z. B. 4+), empfehle ich dringend, dass Sie eine mehrstufige Modellierung verwenden und zu einem Paket wechseln, das auf diese Technik spezialisiert ist (z. B. nlme oder lme4) .

Hoffe das hilft!

Patrick S. Forscher
quelle
Lieber Patrick @ user1188407, vielen Dank, dass Sie eine solche Antwort gegeben haben. Leider passt mein Fall wahrscheinlich zu dem, was Sie in den letzten Sätzen geschrieben haben. Ich würde also ein R-Codebeispiel benötigen, um zu verstehen, wie ich mit meinen Daten umgehe. Wenn Sie sich den Aufbau meines Experiments ansehen, der in einem früheren Beitrag unter stackoverflow.com/questions/12182373/… beschrieben wurde , können Sie sehen, dass ich eine Variable habe, die 4 Mal gemessen wurde (dh die Geschwindigkeit, die unter 4 Bedingungen gemessen wurde)
L_T
und ich möchte herausfinden, ob es eine lineare Beziehung zu einer Variablen (velocity_response) gibt, die die wahrgenommene Geschwindigkeit unter den vier Bedingungen ausdrückt. Jeder Teilnehmer durchlief also 4 Bedingungen und bewertete dann die Wahrnehmung dieser Bedingungen. Ich möchte wissen, ob die Leistung mit der Wahrnehmung zusammenhängt ...
L_T
Wenn Sie eine mehrstufige Modellierungslösung verwenden möchten, können Sie auf viele verschiedene Online-Ressourcen zurückgreifen. Zunächst sollten Sie sich das Paket nlme und diese Vignette ansehen . Die Vignette ist etwas veraltet (2002). Ich fand sie nützlich, als ich mehrstufiges Modellieren lernte. Schließlich können Sie das Buch lesen, das von den Machern des nlme-Pakets veröffentlicht wurde.
Patrick S. Forscher
Lieber Patrick @ user1188407 danke. Ich habe die Mehrebenenmodelle studiert und bin zu dieser Formel gekommen, um meine Daten zu analysieren: lme (Velocity_response ~ Velocity * Subject, data = scrd, random = ~ 1 | Subject) Können Sie mir bitte bestätigen, dass diese Formel für die Analyse I korrekt ist Möchtest du meine Daten bearbeiten? Ich verstehe jedoch nicht, wie ich R ^ 2 und p-Werte erhalten oder wie ich die Grafik mit den Punkten und der Linie, die zur Regression passen, plotten kann. Kannst du mir bitte Helfen? Ich bin kein Statiker ...
L_T
Die Formel scheint mir richtig zu sein, basierend auf meinem Verständnis Ihrer Studie (und der Annahme, dass Sie Ihre Daten im persönlichen Periodenformat formatiert haben). Sie erhalten Ihre p-Werte, indem Sie die Ergebnisse Ihrer Analyse in einem Objekt speichern (wie in meinen Beispielen) und eine Zusammenfassung dieses Objekts abrufen. Aufgrund der Unterschiede zwischen Mehrebenenmodellen und traditioneller Regression (z. B. bei Effektgrößenmetriken - bei Mehrebenenmodellen gibt es keine Standardmetriken) empfehle ich jedoch dringend, dass Sie vor der Verwendung mehr über diese Technik lesen. Es scheint, dass die anderen Benutzer mehrere gute Optionen empfohlen haben.
Patrick S. Forscher