হেটেরোসেসটেস্টিক ডেটা নিয়ে কাজ করার সময় অনেকগুলি বিকল্প রয়েছে। দুর্ভাগ্যক্রমে, তাদের কোনওটিই সর্বদা কাজ করার গ্যারান্টিযুক্ত নয়। এখানে কয়েকটি বিকল্পের সাথে আমি পরিচিত যা এখানে রয়েছে:
- রূপান্তরের
- ওয়েলচ আনোভা
- ওজন সর্বনিম্ন স্কোয়ার
- দৃ reg়তা
- ভিন্নতার সাথে সামঞ্জস্যপূর্ণ মান ত্রুটি
- বুটস্ট্র্যাপ
- কৃষকল-ওয়ালিস পরীক্ষা
- অর্ডিনাল লজিস্টিক রিগ্রেশন
আপডেট: R
যখন আপনি বৈকল্পিকতা / ভিন্নতার বৈকল্পিকতা রৈখিক মডেল ফিট করার কিছু উপায়ে (যেমন একটি আনোভা বা একটি রিগ্রেশন) এখানে দেখান।
আসুন আপনার ডেটা একবার দেখে শুরু করা যাক। সুবিধার জন্য, আমি এগুলিকে দুটি ডাটা ফ্রেমে লোড করেছি my.data
(যাকে উপরের মতো গ্রুপের প্রতিটি কলাম দিয়ে কাঠামোযুক্ত করা হয়েছে) এবং stacked.data
(যার দুটি কলাম রয়েছে: values
সংখ্যা ind
সহ এবং গ্রুপ সূচক সহ)।
আমরা আনুষ্ঠানিকভাবে জন্য পরীক্ষা করতে পারেন লেভেনের পরীক্ষা দিয়ে ভিন্নতার :
library(car)
leveneTest(values~ind, stacked.data)
# Levene's Test for Homogeneity of Variance (center = median)
# Df F value Pr(>F)
# group 2 8.1269 0.001153 **
# 38
নিশ্চিতভাবেই, আপনার ভিন্নতা আছে। গ্রুপগুলির বিভিন্নতা কী তা আমরা পরীক্ষা করব। থাম্বের একটি নিয়ম হ'ল লিনিয়ার মডেলগুলি যতক্ষণ না সর্বোচ্চ বৈকল্পিকতা 4 এর বেশি না হয় ততক্ষণ বৈচিত্রের ভিন্ন ভিন্নতার পক্ষে যথেষ্ট শক্তিশালী4× ন্যূনতম ভ্যারিয়েন্স তার চেয়ে অনেক বেশী, তাই আমরা যে অনুপাত হিসাবে ভাল খুঁজে পাবেন:
apply(my.data, 2, function(x){ var(x, na.rm=T) })
# A B C
# 0.01734578 0.33182844 0.06673060
var(my.data$B, na.rm=T) / var(my.data$A, na.rm=T)
# [1] 19.13021
আপনার রূপগুলি বৃহত্তর সাথে উল্লেখযোগ্যভাবে পৃথক, B
19 এর চেয়ে19× সবচেয়ে ছোট A
,। এটি হিটারোসেসডাসটিসিটির সমস্যাযুক্ত স্তর।
parallel.universe.data
2.7B
.7C
parallel.universe.data = with(my.data, data.frame(A=A, B=B+2.7, C=C+.7))
apply(parallel.universe.data, 2, function(x){ var(x, na.rm=T) })
# A B C
# 0.01734578 0.33182844 0.06673060
apply(log(parallel.universe.data), 2, function(x){ var(x, na.rm=T) })
# A B C
# 0.12750634 0.02631383 0.05240742
apply(sqrt(parallel.universe.data), 2, function(x){ var(x, na.rm=T) })
# A B C
# 0.01120956 0.02325107 0.01461479
var(sqrt(parallel.universe.data$B), na.rm=T) /
var(sqrt(parallel.universe.data$A), na.rm=T)
# [1] 2.074217
স্কয়ার রুটের ট্রান্সফর্মেশন ব্যবহার করে সেই ডেটাগুলি বেশ ভালভাবে স্থিতিশীল হয়। আপনি এখানে সমান্তরাল মহাবিশ্বের তথ্যের উন্নতি দেখতে পাবেন:
λλ = .5। = 0
boxcox(values~ind, data=stacked.data, na.action=na.omit)
boxcox(values~ind, data=stacked.pu.data, na.action=na.omit)
এফdf = 19.445
df = 38
oneway.test(values~ind, data=stacked.data, na.action=na.omit, var.equal=FALSE)
# One-way analysis of means (not assuming equal variances)
#
# data: values and ind
# F = 4.1769, num df = 2.000, denom df = 19.445, p-value = 0.03097
আরও সাধারণ পদ্ধতির মধ্যে হ'ল ওয়েটড ন্যূনতম স্কোয়ারগুলি ব্যবহার করা । যেহেতু কিছু গোষ্ঠী ( B
) আরও ছড়িয়ে পড়েছে, তাই এই গোষ্ঠীর ডেটা অন্যান্য গ্রুপের ডেটার চেয়ে গড়ের অবস্থান সম্পর্কে কম তথ্য সরবরাহ করে। আমরা প্রতিটি ডেটা পয়েন্টের সাথে একটি ওজন সরবরাহ করে মডেলটিকে এটি অন্তর্ভুক্ত করতে পারি। একটি সাধারণ সিস্টেম হ'ল গ্রুপ বৈকল্পিকের পারস্পরিক মূল্য ওজন হিসাবে ব্যবহার করা:
wl = 1 / apply(my.data, 2, function(x){ var(x, na.rm=T) })
stacked.data$w = with(stacked.data, ifelse(ind=="A", wl[1],
ifelse(ind=="B", wl[2], wl[3])))
w.mod = lm(values~ind, stacked.data, na.action=na.omit, weights=w)
anova(w.mod)
# Response: values
# Df Sum Sq Mean Sq F value Pr(>F)
# ind 2 8.64 4.3201 4.3201 0.02039 *
# Residuals 38 38.00 1.0000
এফপি4.5089
0.01749
z- রটি50100এন
1 / apply(my.data, 2, function(x){ var(x, na.rm=T) })
# A B C
# 57.650907 3.013606 14.985628
1 / apply(my.data, 2, function(x){ IQR(x, na.rm=T) })
# A B C
# 9.661836 1.291990 4.878049
rw = 1 / apply(my.data, 2, function(x){ IQR(x, na.rm=T) })
stacked.data$rw = with(stacked.data, ifelse(ind=="A", rw[1],
ifelse(ind=="B", rw[2], rw[3])))
library(robustbase)
w.r.mod = lmrob(values~ind, stacked.data, na.action=na.omit, weights=rw)
anova(w.r.mod, lmrob(values~1,stacked.data,na.action=na.omit,weights=rw), test="Wald")
# Robust Wald Test Table
#
# Model 1: values ~ ind
# Model 2: values ~ 1
# Largest model fitted by lmrob(), i.e. SM
#
# pseudoDf Test.Stat Df Pr(>chisq)
# 1 38
# 2 40 6.6016 2 0.03685 *
এখানে ওজন তত চরম নয়। পূর্বাভাস গ্রুপ মানে সামান্য ভিন্ন ( A
: WLS 0.36673
, শক্তসমর্থ 0.35722
; B
: WLS 0.77646
, শক্তসমর্থ 0.70433
; C
WLS: 0.50554
, শক্তসমর্থ 0.51845
, মাধ্যম সহ)B
এবং C
কম চরম মান দ্বারা টানা হচ্ছে।
ইকোনোমেট্রিক্সে হুবার-হোয়াইট ("স্যান্ডউইচ") স্ট্যান্ডার্ড ত্রুটি খুব জনপ্রিয়। ওয়েলশ সংশোধনের মতো, এর জন্য আপনাকে বৈচিত্রগুলি-প্রাক-পূর্বগুলি জানতে হবে না এবং আপনার ডেটা এবং / অথবা কোনও মডেলের উপর নির্ভর করে যা সঠিক হতে পারে না তার থেকে ওজন অনুমান করার প্রয়োজন নেই। অন্যদিকে, কীভাবে এটি আনোভাতে যুক্ত করা যায় তা আমি জানি না, যার অর্থ আপনি কেবলমাত্র স্বতন্ত্র ডামি কোডগুলির পরীক্ষার জন্য এগুলি পান, যা আমাকে এই ক্ষেত্রে কম সহায়ক বলে মনে করে তবে আমি সেগুলি যেভাবেই প্রদর্শন করব:
library(sandwich)
mod = lm(values~ind, stacked.data, na.action=na.omit)
sqrt(diag(vcovHC(mod)))
# (Intercept) indB indC
# 0.03519921 0.16997457 0.08246131
2*(1-pt(coef(mod) / sqrt(diag(vcovHC(mod))), df=38))
# (Intercept) indB indC
# 1.078249e-12 2.087484e-02 1.005212e-01
vcovHC
টিটিটি আপনার স্বাধীনতার অবশিষ্টাংশের সাথে বিতরণ)।
R
car
white.adjust
পি
Anova(mod, white.adjust=TRUE)
# Analysis of Deviance Table (Type II tests)
#
# Response: values
# Df F Pr(>F)
# ind 2 3.9946 0.02663 *
# Residuals 38
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
এফএফপি
mod = lm(values~ind, stacked.data, na.action=na.omit)
F.stat = anova(mod)[1,4]
# create null version of the data
nullA = my.data$A - mean(my.data$A)
nullB = my.data$B - mean(my.data$B, na.rm=T)
nullC = my.data$C - mean(my.data$C, na.rm=T)
set.seed(1)
F.vect = vector(length=10000)
for(i in 1:10000){
A = sample(na.omit(nullA), 15, replace=T)
B = sample(na.omit(nullB), 13, replace=T)
C = sample(na.omit(nullC), 13, replace=T)
boot.dat = stack(list(A=A, B=B, C=C))
boot.mod = lm(values~ind, boot.dat)
F.vect[i] = anova(boot.mod)[1,4]
}
1-mean(F.stat>F.vect)
# [1] 0.0485
এন
kruskal.test(values~ind, stacked.data, na.action=na.omit)
# Kruskal-Wallis rank sum test
#
# data: values by ind
# Kruskal-Wallis chi-squared = 5.7705, df = 2, p-value = 0.05584
যদিও ক্রুসকল-ওয়ালিস পরীক্ষাটি টাইপ আই ত্রুটির বিরুদ্ধে অবশ্যই সুরক্ষার পক্ষে সর্বোত্তম সুরক্ষা, এটি কেবলমাত্র একটি একক শ্রেণিবদ্ধ পরিবর্তনশীল (যেমন কোনও ধ্রুবক ভবিষ্যদ্বাণীকারী বা ফ্যাকটোরিয়াল ডিজাইন) ব্যবহার করা যায় না এবং এতে আলোচিত সমস্ত কৌশলগুলির মধ্যে সর্বনিম্ন শক্তি রয়েছে। আর একটি নন-প্যারাম্যাট্রিক পদ্ধতির হ'ল অর্ডিনাল লজিস্টিক রিগ্রেশন ব্যবহার করা । এটি অনেক লোকের কাছেই অদ্ভুত বলে মনে হয় তবে আপনার কেবলমাত্র অনুমান করা দরকার যে আপনার প্রতিক্রিয়া ডেটাতে বৈধ অর্ডিনাল তথ্য রয়েছে যা তারা অবশ্যই করেন বা না হয় উপরের অন্যান্য কৌশলগুলিও অবৈধ:
library(rms)
olr.mod = orm(values~ind, stacked.data)
olr.mod
# Model Likelihood Discrimination Rank Discrim.
# Ratio Test Indexes Indexes
# Obs 41 LR chi2 6.63 R2 0.149 rho 0.365
# Unique Y 41 d.f. 2 g 0.829
# Median Y 0.432 Pr(> chi2) 0.0363 gr 2.292
# max |deriv| 2e-04 Score chi2 6.48 |Pr(Y>=median)-0.5| 0.179
# Pr(> chi2) 0.0391
chi2
Discrimination Indexes
পি0.0363