Rの反復測定による線形回帰


12

反復測定設計のために、R inで線形回帰を実行する方法を理解できませんでした。で前の質問(まだ未回答)には使用しないように私に示唆されたlmのではなく混合モデルを使用します。私lmは次のように使用しました:

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

(データセットの詳細については、上記のリンクをご覧ください)

ただし、インターネット上で、線形回帰分析の実行方法を示すRコードの例を見つけることができませんでした。

私が欲しいのは、一方でデータにフィットする線でデータをプロットし、他方でモデルの有意性の検定のための値とp値です。R2

いくつかの提案を提供できる人はいますか?Rのコード例はどれも非常に役立ちます。


編集
これまでに受け取った提案によると、2つの変数Velocity_response(アンケートから派生)とVelocity(パフォーマンスから派生)の間に線形関係があるかどうかを理解するために、データを分析するソリューションは次のようになります。

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

要約の結果はこれを与えます:

    > 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
> 

今、R ^ 2と対応するp値を取得できる場所がわかりませんが、2つの変数間に線形関係があるかどうかはわかりません。また、回帰。

誰もが私を啓発するためにとても親切にすることができますか?あなたの助けが本当に必要です...


「混合効果モデルとエコロジーの拡張とR」Zuur et al。線形混合効果モデルの優れた入門書であり、理論よりも方法論の適用に焦点を当てています。
ローランド

親愛なるローランド、私はその本が役立つと信じていますが、私はむしろオンラインで何かを探しています...提案するウェブページはありますか?
L_T

1
以前の投稿で述べたように、lm()には関連するプロットがあります。したがって、モデルがM1の場合、plot(M1)を使用できます。
ピーターフロム-モニカの復職

親愛なる@PeterFlomはい、しかしあなたはまた、繰り返し測定の設計にlmを使用しないように私に言った。したがって、私の質問は、データまたは別の関数の分析にlmを使用する必要があるかどうかです。なにか提案を?
L_T

1
先ほど言ったように、マルチレベルモデルを調べます。Rでは、nlmeパッケージを見ることができます。また、このサイトでトピックを検索してください。それについてはここにたくさん書かれています。
ピーターフロム-モニカの復職

回答:


17

実際に行うことは、分析の目標によって異なります。分析の目標が正確にはわからないが、いくつかの例を見ていき、そのうちの1つがあなたの状況に当てはまることを願う。

ケース1:2回測定された1つの定量変数

被験者試験を2回実施し、参加者に統計テストを2回行って、2番目の測定の平均スコアが最初の測定と異なるかどうかを調べたいとしましょう(学習が発生したかどうかを判断するため)。スコアtest1とtest2がデータフレームdに格納されている場合、次のようにlm()関数を使用してこれを完全に行うことができます。

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

切片の検定は、test1とtest2の差の検定です。test1とtest2の差にはデルタR ^ 2がないことに注意してください-代わりに、効果の大きさの尺度はコーエンのdのようなものでなければなりません。

ケース2a:2回測定された1つの量的変数、被験者間で完全に測定された1つの二分変数

私たちは同じ研究デザインを持っているとしましょうが、男性と女性で異なる学習率が発生したかどうかを知りたいです。そのため、2回測定される1つの量的変数(テストパフォーマンス)と、1回測定される1つの二分変数があります。test1、test2、genderがすべてデータフレームdに含まれていると仮定すると、次のようにlm()のみを使用してこのモデルをテストすることもできます。

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

性別が中央にあると仮定すると(つまり、男性= -.5および女性= +.5などのコード化)、このモデルの切片は、テスト1とテスト2の差のテストであり、男性と女性で平均化されます。性別の係数は、時間と性別の相互作用です。性別の影響を時間平均して取得するには、以下を行う必要があります。

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

ケース2b:2回測定された1つの量的変数、1回だけ測定された1つの量的変数

ここでも、2回測定された1つの量的変数と1回測定された1つの量的変数があるとします。そのため、たとえば、統計にベースラインの関心の尺度があり、ベースラインの関心のレベルが高い人が時間1から時間2により多く学習したかどうかを判断したいとしましょう。 :

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

test1、test2、およびinterestcがすべてデータフレームdにあると仮定すると、この質問はケース1aと非常によく似た方法でテストできます。

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

繰り返しますが、このモデルのインターセプトは、対象全体で平均して、テストスコアが時間1から時間2に変化したかどうかをテストします。ただし、この解釈は、対象が中央にある場合にのみ有効です。関心の係数は、時間の影響がベースラインの関心に依存するかどうかです。上記のようにtest1とtest 2を一緒に平均し、この複合変数に対する関心の影響をテストすることにより、時間の平均で関心の影響を取得できます。

ケース2c:2回測定された1つの量的変数、1回だけ測定された1つのカテゴリ変数

被験者間変数がカテゴリであり、一度だけ測定されたと仮定しましょう。したがって、たとえば、人種(白人vsアジア人vs黒人vsヒスパニック)の人々が時間1から時間2で学習量が異なるかどうかに興味があると仮定します。test1、test2、およびraceがデータフレームdにあると仮定します、最初にコードの競合を対比する必要があります。これは、テストする特定の仮説/質問に応じて、計画された直交コントラスト、ダミーコード、または効果コードを使用して実行できます(これを行うヘルパー関数を探している場合は、lm.setContrasts()を参照することをお勧めします) 。競合変数がすでにコントラストコード化されていると仮定すると、次のように、上記の2つの場合と非常によく似たlm()を使用します。

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

レースのコントラストが中心にあると仮定すると、このモデルのインターセプトは再び、時間の「主効果」です。人種の対比の係数は、これらの対比と時間の相互作用です。人種のオムニバス効果を取得するには、次のコードを使用します。

Anova(mod, type = 3)

ケース3:3回測定された1つの量的変数(つまり、3レベルの被験者内操作)

ケース1から3番目の測定ポイントを設計に追加したと仮定します。そのため、参加者は2回ではなく3回統計テストを受けました。ここでは、時点間の違いのオムニバステストが必要かどうかに応じて、いくつかの選択肢があります(必要ない場合もあります)。

たとえば、主な仮説として、テストスコアが時間1から時間3まで直線的に増加するとします。test1、test2、test3がデータフレームdにあると仮定すると、最初に次のコンポジットを作成してこの仮説をテストできます:

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

次に、次のように、従属変数としてlinを使用するインターセプトのみのモデルに0以外のインターセプトがあるかどうかをテストします。

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

これにより、統計スコアが時間の経過とともに増加しているかどうかをテストできます。もちろん、特定の仮説に応じて、他のタイプのカスタム差分スコアを作成できます。

重要なオムニバステストに関心がある場合は、carパッケージのAnova()関数を使用する必要があります。特定の実装は少し複雑です。基本的に、lm()を使用して、どの変数が被験者内でどの変数が被験者間であるかを指定します。次に、モデルの被験者内部分を作成し(つまり、test1、test2、test3のどれが最初、2番目、3番目に測定されたかを指定します)、idataというデータフレームを作成してそのモデルをAnova()に渡します。私の仮説例を使用して:

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)

idesignステートメントは、Anovaに時間変数(test1、test2、test3で構成される)をモデルに含めるように指示します。このコードは、テストスコアに対する時間の影響のオムニバステストを提供します。

ケース4:3回測定された1つの量的変数、1つの被験者間量的変数

このケースは、ケース3の単純な拡張です。上記のように、単に1自由度のテストに関心がある場合は、被験者内変数を使用してカスタム差分スコアを作成できます。したがって、test1、test2、test3、およびinterestがすべてデータフレームdにあり、テストスコアに対する時間の線形効果(およびベースラインの関心によって時間の影響がどのように変化するか)に関心があると仮定すると、以下:

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

次に、以下を実行します(平均中心の関心を持つ)。

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

オムニバステストが必要な場合は、次の手順を実行します。

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)

その他の場合: 簡潔にするためにこれらを省略しますが、これらはすでに説明したものの単純な拡張です。

時間が2レベル以上の時間の(単変量)オムニバステストはすべて球形であることに注意してください。レベルの数を増やすと、この仮定はまったく受け入れられなくなります。デザインにかなりの数の測定ポイントがある場合(4+など)、マルチレベルモデリングのようなものを使用し、この手法に特化したパッケージ(nlmelme4など)に移行することを強くお勧めします。

お役に立てれば!


親愛なるパトリック@ user1188407、そのような答えを提供してくれて本当にありがとう。残念ながら、私のケースはおそらくあなたが最後の文章で書いたものに当てはまります...ですから、私のデータをどのように扱うかを理解するにはRコードの例が必要です。実際、前の投稿で説明した私の実験のデザインを見ると、stackoverflow.com
questions / 12182373 /…

そして、4つの条件で知覚される速度を表す変数(velocity_response)との線形関係があるかどうかを確認したいと思います。そのため、各参加者は4つの条件を受け、それらの条件の認識を評価しました。パフォーマンスが知覚に関連しているかどうかを知りたい...
L_T

マルチレベルモデリングソリューションを使用する場合は、さまざまなオンラインリソースを活用できます。まず、nlmeパッケージこのvignetteを見てください。ビネットは少し古くなっています(2002年)。マルチレベルモデリングについて学んでいたときに役立ちました。最後に、nlmeパッケージのメーカーが発行した本をご覧ください。
パトリックS.フォーシャー

親愛なるパトリック@ user1188407ありがとう。マルチレベルモデルを検討し、データを分析するためにこの式に到達しました:lme(Velocity_response〜Velocity * Subject、data = scrd、random =〜1 | Subject)この式が分析に正しいことを確認してくださいデータで実行したいですか?ただし、R ^ 2とp値をどのように取得できるのか、また回帰と一致するポイントとラインでグラフィックをプロットする方法はわかりません。手伝っていただけませんか?私は... staticianないです
L_T

あなたの研究に対する私の理解に基づいて、この式は正しいように思えます(そして、あなたが個人の期間形式でデータをフォーマットしたと仮定します)。分析の結果をオブジェクトに保存し(私の例で行うように)、そのオブジェクトの要約を取得することにより、p値を取得します。ただし、マルチレベルモデルと従来の回帰(例:効果サイズメトリック-マルチレベルモデルには標準メトリックがない)の違いのため、使用する前にこの手法について詳しく読むことを強くお勧めします。他のユーザーがいくつかの良いオプションを推奨しているようです。
パトリックS.フォーシャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.