স্কোয়ারের তৃতীয় অঙ্কের টাইপ করুন


9

আমার কাছে একটি স্বতন্ত্র ভেরিয়েবল (পুরুষ ও মহিলা) এবং একটি ধারাবাহিক পরিবর্তনশীল সহ লিনিয়ার রিগ্রেশন মডেল রয়েছে ।একজনবি

আমি আর এর সাথে বিপরীতে কোডগুলি সেট আপ করেছি options(contrasts=c("contr.sum","contr.poly"))। এবং এখন আমার কাছে , , এবং তাদের মিথস্ক্রিয়া (A: B) ব্যবহারের জন্য বর্গক্ষেত্রের ধরণের ধরণের পরিমাণ রয়েছে ।একজনবিdrop1(model, .~., test="F")

আমি যেটির সাথে আটকে আছি তা হ'ল কীভাবে জন্য বর্গাকার পরিমাণগুলি গণনা করা হয় । আমারবি মনে হয় sum((predicted y of the full model - predicted y of the reduced model)^2)। হ্রাস করা মডেলটি দেখতে হবে y~A+A:B। তবে আমি যখন ব্যবহার করি তখন predict(y~A+A:B)আর পূর্বাভাসিত মানগুলি পূর্ণ মডেলের পূর্বাভাসিত মানগুলির সমান হয়। সুতরাং, স্কোমের যোগফল 0 হবে।

(বর্গের অঙ্কের জন্য , আমি একটি হ্রাস মডেল ব্যবহৃত হয়, যা হিসাবে একই ।)একজনy~B+A:By~A:B

এলোমেলোভাবে উত্পন্ন ডেটার জন্য উদাহরণ কোড এখানে:

A<-as.factor(rep(c("male","female"), each=5))
set.seed(1)
B<-runif(10)
set.seed(5)
y<-runif(10)

model<-lm(y~A+B+A:B)

options(contrasts = c("contr.sum","contr.poly"))

#type3 sums of squares
drop1(model, .~., test="F")
#or same result:
library(car)
Anova(lm(y~A+B+A:B),type="III")

#full model
predFull<-predict(model)

#Calculate sum of squares
#SS(A|B,AB)
predA<-predict(lm(y~B+A:B))
sum((predFull-predA)^2) 

#SS(B|A,AB) (???)
predB<-predict(lm(y~A+A:B))
sum((predFull-predB)^2) 
#Sums of squares should be 0.15075 (according to anova table)
#but calculated to be 2.5e-31

#SS(AB|A,B)
predAB<-predict(lm(y~A+B))
sum((predFull-predAB)^2)


#Anova Table (Type III tests)
#Response: y
#             Sum Sq Df F value Pr(>F)
#(Intercept) 0.16074  1  1.3598 0.2878
#A           0.00148  1  0.0125 0.9145
#B           0.15075  1  1.2753 0.3019
#A:B         0.01628  1  0.1377 0.7233
#Residuals   0.70926  6    

1
এটি একটি দুর্দান্ত প্রশ্ন এবং উত্তর কীভাবে দেখতে পারে সে সম্পর্কে আমার কিছু ধারণা রয়েছে। তবে পুনরুত্পাদনযোগ্য উদাহরণ ব্যতীত আমি আমার সময় বিনিয়োগ করছি না। ওপি, বিতরণ!
হেনরিক

1
টাইপ II ("ইউএস হাউস অফ রিপ্রেজেনটেটিভস") পরীক্ষার বিপরীতে কীভাবে আপনাকে টাইপ III ("মার্কিন সেনেট") পরীক্ষা করতে চায়? (পল গ্যালো, নোভার্টিসের কারণে উপমা)
ফ্র্যাঙ্ক হ্যারেল

কোড সাহায্য করে?
জো লুইস

উত্তর:


3

আমি আর 2.15.1 এবং এসএএস 9.2 এর মধ্যে রেজিস্ট্রারগুলির অনুমানের মধ্যে পার্থক্য পেয়েছি, তবে আর 3.0.0 সংস্করণে আপডেট করার পরে ফলাফলগুলি একই ছিল। সুতরাং, প্রথমে আমি আপনাকে সর্বশেষ সংস্করণে আর আপডেট করতে চাইছি।

আপনি ভুল পদ্ধতির ব্যবহার করছেন কারণ আপনি দুটি পৃথক মডেলের বিপরীতে বর্গের যোগফল গণনা করছেন যা দুটি ভিন্ন ডিজাইনের ম্যাট্রিককে বোঝায়। পূর্বাভাসিত মানগুলি গণনা করতে lm () দ্বারা ব্যবহৃত রেজিস্ট্রারগুলিতে এটি সম্পূর্ণ ভিন্ন অনুমানের দিকে নিয়ে যায় (আপনি দুটি মডেলের মধ্যে পৃথক মান সহ রেজিস্ট্রার ব্যবহার করছেন)। এসএস 3 একটি অনুমানের পরীক্ষার ভিত্তিতে গণনা করা হয়, ধরে নেওয়া হয় যে সমস্ত কন্ডিশনার রেজিস্ট্রার শূন্যের সমান, যখন কন্ডিশনড রেগ্রেসর সমান 1 মডেল. মনে রাখবেন যে এসএস 3 গুলি সম্পূর্ণ যুক্ত হয় না। এর অর্থ হ'ল আপনি যদি আনুমানিক এসএস 3 যোগ করেন তবে আপনি এসএস (এসএসএম) মডেলটি পাবেন না।

এখানে আমি গণিতের একটি আর বাস্তবায়নের পরামর্শ দিচ্ছি যা এসএস 3 এবং রেজিস্ট্রারগুলি অনুমান করার জন্য ব্যবহৃত জিএলএস অ্যালগরিদম প্রয়োগ করে।

এই কোড দ্বারা উত্পন্ন মানগুলি আপনার কোডটিতে যে ফলাফল দিয়েছে তার জন্য SAS 9.2 ব্যবহার করে ঠিক একই উত্পন্ন হয়েছে, যখন এসএস 3 (বি | এ, এবি) 0.15075 এর পরিবর্তে 0.167486 is এই কারণে আমি আবার আপনার আর সংস্করণটি সর্বশেষ উপলব্ধটিতে আপডেট করার পরামর্শ দিচ্ছি।

আশাকরি এটা সাহায্য করবে :)

A<-as.factor(rep(c("male","female"), each=5))
set.seed(1)
B<-runif(10)
set.seed(5)
y<-runif(10)


# Create a dummy vector of 0s and 1s
dummy <- as.numeric(A=="male")

# Create the design matrix
R <- cbind(rep(1, length(y)), dummy, B, dummy*B)

# Estimate the regressors
bhat <- solve(t(R) %*% R) %*% t(R) %*% y
yhat <- R %*% bhat
ehat <- y - yhat

# Sum of Squares Total
# SST <- t(y)%*%y - length(y)*mean(y)**2
# Sum of Squares Error
# SSE <- t(ehat) %*% ehat
# Sum of Squares Model
# SSM <- SST - SSE

# used for ginv()
library(MASS)

# Returns the Sum of Squares of the hypotesis test contained in the C matrix
SSH_estimate <- function(C)
{
    teta <- C%*%bhat
    M <- C %*% ginv(t(R)%*%R) %*% t(C)
    SSH <- t(teta) %*% ginv(M) %*% teta
    SSH
}

# SS(A|B,AB)
# 0.001481682
SSH_estimate(matrix(c(0, 1, 0, 0), nrow=1, ncol=4))
# SS(B|A,AB)
# 0.167486
SSH_estimate(matrix(c(0, 0, 1, 0), nrow=1, ncol=4))
# SS(AB|A,B)
# 0.01627824
SSH_estimate(matrix(c(0, 0, 0, 1), nrow=1, ncol=4))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.