İki veya daha fazla regresyon modelindeki eğimleri karşılaştırmak için hangi testi kullanabilirim?


29

İki değişkenin cevabını bir tahminciye cevap olarak test etmek istiyorum. İşte minimal bir çoğaltılabilir örnek.

library(nlme) 
## gls is used in the application; lm would suffice for this example
m.set <- gls(Sepal.Length ~ Petal.Width, data = iris, 
               subset = Species == "setosa")
m.vir <- gls(Sepal.Length ~ Petal.Width, data = iris, 
               subset = Species == "virginica")
m.ver <- gls(Sepal.Length ~ Petal.Width, data = iris, 
               subset = Species == "versicolor")

Eğim katsayılarının farklı olduğunu görebiliyorum:

m.set$coefficients
(Intercept) Petal.Width 
  4.7771775   0.9301727
m.vir$coefficients
(Intercept) Petal.Width 
  5.2694172   0.6508306 
m.ver$coefficients
(Intercept) Petal.Width 
   4.044640    1.426365 

Üç sorum var:

  1. Eğimler arasındaki farkı nasıl test edebilirim?
  2. Artık varyanslar arasındaki farkı nasıl test edebilirim?
  3. Bu karşılaştırmaları sunmanın basit ve etkili bir yolu nedir?

İki regresyon modelinde değişken katsayısını karşılaştırma yöntemi , eğimi ayırt etmek için modelin kukla değişkenle yeniden çalıştırılmasını öneren ilgili bir soru, bağımsız veri setlerinin kullanımına izin verecek seçenekler var mı?


İlk soru ile ilgili olarak istatistik.stackexchange.com/questions/55501/… 'e bakınız .
russellpierce

Yanıtlar:


22

Eğimler arasındaki farkı nasıl test edebilirim?

Türler için bir kukla ekleyin, ile etkileşmesine izin verin ve bu kukla'nın anlamlı olup olmadığını görün. Let L i çanak yaprağı uzunluğu ve P i pedalı genişlik ve olmak S 1 , S 2 , S 3 , üç türün yapay değişkenler. Model karşılaştırmakPbenLbenPbenS1,S2,S3

E(Lben)=β0+β1Pben

etkisi sağlar modeli ile her bir tür için farklı olması:Pben

E(Lben)=α0+α1S2+α2S3+α4Pben+α5PbenS2+α6PbenS3

logLik44

Karşılaştırma yapmak için basit ve etkili bir yol nedir?

Pben

Düzenleme: Vücuda başka bir soru eklendiğini fark ettim. Bu yüzden buna bir cevap ekliyorum:

Artık varyanslar arasındaki farkı nasıl test edebilirim?

Bunun için, veri setini sınıflandırmanız ve ayrı modellere uymanız gerekir, çünkü önerdiğim etkileşime dayalı model, artık varyansı her grupta aynı olacak şekilde kısıtlayacaktır. Ayrı modeller takarsanız, bu kısıtlama ortadan kalkar. Bu durumda, olasılık oranı testini yine de kullanabilirsiniz (şimdi daha büyük modelin olasılığı, üç ayrı modelden olasılıkları toplayarak hesaplanmaktadır). "Boş" model, neyle karşılaştırmak istediğinizi temel alır.

  • 2

  • 6


S1gls(Sepal.Length ~ species:Petal.Width, data = iris)

S1α0+α4Pbenspeciesgls(Sepal.Length ~ species*Petal.Width, data=iris)

@Macro Güzel cevap (+1)! Bu glsmodele uygun olup olmadığınızı merak ediyorum ama bu seçeneğe sahip weights=varIdent(form=~1|Species)( her bir soru için) her bir Tür için farklı rezidüel varyanslara izin veriyor musunuz?
COOLSerdash

15

Bu soruları R kodu ile cevaplamak için aşağıdakileri kullanın:
1. Eğimler arasındaki farkı nasıl test edebilirim?
Cevap: Petal.Width türüne göre ANOVA p değerini Tür cinsinden inceleyin, daha sonra aşağıdaki gibi eğimleri lsmeans :: lstrends kullanarak karşılaştırın.

library(lsmeans)
m.interaction <- lm(Sepal.Length ~ Petal.Width*Species, data = iris)
anova(m.interaction)
 Analysis of Variance Table

 Response: Sepal.Length
                      Df Sum Sq Mean Sq  F value Pr(>F)    
 Petal.Width           1 68.353  68.353 298.0784 <2e-16 ***
 Species               2  0.035   0.017   0.0754 0.9274    
 Petal.Width:Species   2  0.759   0.380   1.6552 0.1947    
 Residuals           144 33.021   0.229                    
 ---
 Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

# Obtain slopes
m.interaction$coefficients
m.lst <- lstrends(m.interaction, "Species", var="Petal.Width")
 Species    Petal.Width.trend        SE  df   lower.CL upper.CL
 setosa             0.9301727 0.6491360 144 -0.3528933 2.213239
 versicolor         1.4263647 0.3459350 144  0.7425981 2.110131
 virginica          0.6508306 0.2490791 144  0.1585071 1.143154

# Compare slopes
pairs(m.lst)
 contrast                 estimate        SE  df t.ratio p.value
 setosa - versicolor    -0.4961919 0.7355601 144  -0.675  0.7786
 setosa - virginica      0.2793421 0.6952826 144   0.402  0.9149
 versicolor - virginica  0.7755341 0.4262762 144   1.819  0.1669

2. Artık varyanslar arasındaki farkı nasıl test edebilirim?
Soruyu anlarsam, Pearson korelasyonlarını "Fisher r-to-z" olarak da bilinen bir Fisher dönüşümü ile karşılaştırabilirsiniz:

library(psych)
library(data.table)
iris <- as.data.table(iris)
# Calculate Pearson's R
m.correlations <- iris[, cor(Sepal.Length, Petal.Width), by = Species]
m.correlations
# Compare R values with Fisher's R to Z
paired.r(m.correlations[Species=="setosa", V1], m.correlations[Species=="versicolor", V1], 
         n = iris[Species %in% c("setosa", "versicolor"), .N])
paired.r(m.correlations[Species=="setosa", V1], m.correlations[Species=="virginica", V1], 
         n = iris[Species %in% c("setosa", "virginica"), .N])
paired.r(m.correlations[Species=="virginica", V1], m.correlations[Species=="versicolor", V1], 
         n = iris[Species %in% c("virginica", "versicolor"), .N])

3. Bu karşılaştırmaları sunmanın basit ve etkili bir yolu nedir?
"Her bir Tür için Sepal Uzunluk ile Petal Genişlik arasındaki ilişkiyi karşılaştırmak için doğrusal regresyon kullandık . Septo Boyunun Petal Genişlik ile I arasındaki genişlik ilişkisinde anlamlı bir etkileşim bulamadık . Setosa (B = 0.9), I. Versicolor (B) = 1.4), ya da I. Virginica (B = 0.6); F (2, 144) = 1.6, p = 0.19. Bir Fisher'in r-to-z karşılaştırması, I. Setosa (r = 0.28) için Pearson korelasyonunun olduğunu gösterdi . I. Versicolor'den anlamlı olarak daha düşük (p = 0.02) (r = 0.55) Benzer şekilde, I. Virginica (r = 0.28) için korelasyon, I Versicolor için gözlemlenenden anlamlı derecede daha zayıf (p = 0.02) idi.."

Sonunda, sonuçlarınızı daima görselleştirin!

plotly_interaction <- function(data, x, y, category, colors = col2rgb(viridis(nlevels(as.factor(data[[category]])))), ...) {
  # Create Plotly scatter plot of x vs y, with separate lines for each level of the categorical variable. 
  # In other words, create an interaction scatter plot.
  # The "colors" must be supplied in a RGB triplet, as produced by col2rgb().

  require(plotly)
  require(viridis)
  require(broom)

  groups <- unique(data[[category]])

  p <- plot_ly(...)

  for (i in 1:length(groups)) {
    groupData = data[which(data[[category]]==groups[[i]]), ]
    p <- add_lines(p, data = groupData,
                   y = fitted(lm(data = groupData, groupData[[y]] ~ groupData[[x]])),
                   x = groupData[[x]],
                   line = list(color = paste('rgb', '(', paste(colors[, i], collapse = ", "), ')')),
                   name = groups[[i]],
                   showlegend = FALSE)
    p <- add_ribbons(p, data = augment(lm(data = groupData, groupData[[y]] ~ groupData[[x]])),
                     y = groupData[[y]],
                     x = groupData[[x]],
                     ymin = ~.fitted - 1.96 * .se.fit,
                     ymax = ~.fitted + 1.96 * .se.fit,
                     line = list(color = paste('rgba','(', paste(colors[, i], collapse = ", "), ', 0.05)')), 
                     fillcolor = paste('rgba', '(', paste(colors[, i], collapse = ", "), ', 0.1)'),
                     showlegend = FALSE)
    p <- add_markers(p, data = groupData, 
                     x = groupData[[x]], 
                     y = groupData[[y]],
                     symbol = groupData[[category]],
                     marker = list(color=paste('rgb','(', paste(colors[, i], collapse = ", "))))
  }
  p <- layout(p, xaxis = list(title = x), yaxis = list(title = y))
  return(p)
}

plotly_interaction(iris, "Sepal.Length", "Petal.Width", "Species")

irisPlot


8

Önceki öneriye katılıyorum. Her veri seti için kukla değişkenli çoklu regresyon modeline uymalısınız. Bu, işlemlerin farklı olup olmadığını test etmenize olanak sağlar. Ayrıca eğimlerin farklı olup olmadığını bilmek istiyorsanız , o zaman aptallarla söz konusu değişken arasındaki etkileşimleri de eklemeniz gerekir. Verilerin bağımsız olması gerçeği ile ilgili bir sorun yoktur. Bunlar eğer Not hem bağımsız ve farklı türlerden (örneğin), o zaman onlar mükemmel şaşırtılsa olarak, bulmak farkı nedeniyle farklı türler veya farklı veri kümelerine olup olmadığını söylemek mümkün olmaz. Ancak test yok / yeni bir örnek almadan ve çalışmanızı tekrar çalıştırmadan sizi bu problemle karşı karşıya bırakacak hapisten arınmış kart.


Neredeyse aynı anda oldukça benzer cevaplar yayınlamışız gibi görünüyor. +1
Makro

@Macro, evet, ama seninki daha iyi (daha önce +1); ilk (tam olmayan) sorularımı okuduğumda özlediğim 3 soruyu da ele aldınız. Buradaki katkım, kafa karıştırıcı olandır.
gung - Reinstate Monica

evet bu iyi bir nokta. Sanırım bu sorguyu yapıyor olsaydınız, veri setlerinin aynı şeyi ölçtüğü varsayımı altında faaliyet göstermeniz gerekebilirdi ... tek fark, türlerin farklı olmasıydı.
Makro

3
Düşünme biçimimden ikiniz de, benim yaptığım şey olan kazanç elde etmelisiniz.
Michael R. Chernick,

1
Kukla değişken önerisi, hata farkının modeller arasında önemli ölçüde farklı olmaması şartıyla iyi bir fikirdir. Aksi takdirde, Satterthwaite-Welch t-testi (yayınlanan makaleleri okurken olduğu gibi, yalnızca özet istatistikler biliniyorsa elde edilebilir olma özelliğine sahip olmanın tek avantajı vardır) uygulayabilirsiniz veya birleştirilmiş modele uyması için ağırlıklı en küçük kareleri kullanabilirsiniz.
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.