আমি জেনারালাইজড লিনিয়ার মডেল (জিএলএম) বনাম লিনিয়ার মডেল (এলএম) ব্যবহার করার পিছনে দর্শনটি বোঝার চেষ্টা করছি। আমি নীচে সেট করে একটি উদাহরণ ডেটা তৈরি করেছি যেখানে:
উদাহরণটির মধ্যে ত্রুটি নেই এর এর ফাংশন হিসাবে , তাই আমি ধরে নেব যে লগ-ট্রান্সফর্মড y এর লিনিয়ার মডেলটি সেরা হবে। নীচের উদাহরণে, প্রকৃতপক্ষে এটি ক্ষেত্রে (আমার মনে হয়) - যেহেতু লগ-রূপান্তরিত ডেটাতে এলএম এর এআইসি সবচেয়ে কম lowest লগ-লিঙ্ক ফাংশন সহ গামা বিতরণ জিএলএমের এআইসির স্কোয়ারগুলি কম পরিমাণে (এসএস) থাকে, তবে স্বাধীনতার অতিরিক্ত ডিগ্রি কিছুটা বেশি এআইসির ফলে আসে। আমি অবাক হয়েছিলাম যে গাউসীয় বিতরণ এআইসি এত বেশি (যদিও এসএস মডেলগুলির মধ্যে সবচেয়ে কম)।y
আমি কখন জিএলএম মডেলগুলির সাথে যোগাযোগ করা উচিত সে সম্পর্কে কিছু পরামর্শ নেওয়ার প্রত্যাশা করছি - অর্থাৎ আমার এলএম মডেলের ফিট রিসিডুয়ালগুলিতে এমন কিছু আছে যা আমাকে বলতে হবে যে অন্য বিতরণটি আরও উপযুক্ত? এছাড়াও, একটি উপযুক্ত বিতরণ পরিবার নির্বাচন করার ক্ষেত্রে কীভাবে এগিয়ে যাওয়া উচিত।
আপনার সাহায্যের জন্য অগ্রিম ধন্যবাদ.
[সম্পাদনা]: আমি এখন সারাংশের পরিসংখ্যানগুলি সমন্বয় করেছি যাতে লগ-ট্রান্সফর্মড লিনিয়ার মডেলের এসএস লগ-লিংক ফাংশনের সাথে জিএলএম মডেলের সাথে তুলনীয় হয়। পরিসংখ্যানগুলির একটি গ্রাফ এখন দেখানো হয়েছে।
উদাহরণ
set.seed(1111)
n <- 1000
y <- rnorm(n, mean=0, sd=1)
y <- exp(y)
hist(y, n=20)
hist(log(y), n=20)
x <- log(y) - rnorm(n, mean=0, sd=1)
hist(x, n=20)
df <- data.frame(y=y, x=x)
df2 <- data.frame(x=seq(from=min(df$x), to=max(df$x),,100))
#models
mod.name <- "LM"
assign(mod.name, lm(y ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2) ~ df2$x, col=2)
mod.name <- "LOG.LM"
assign(mod.name, lm(log(y) ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(exp(predict(get(mod.name), newdata=df2)) ~ df2$x, col=2)
mod.name <- "LOG.GAUSS.GLM"
assign(mod.name, glm(y ~ x, df, family=gaussian(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)
mod.name <- "LOG.GAMMA.GLM"
assign(mod.name, glm(y ~ x, df, family=Gamma(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)
#Results
model.names <- list("LM", "LOG.LM", "LOG.GAUSS.GLM", "LOG.GAMMA.GLM")
plot(y ~ x, df, log="y", pch=".", cex=3, col=8)
lines(predict(LM, newdata=df2) ~ df2$x, col=1, lwd=2)
lines(exp(predict(LOG.LM, newdata=df2)) ~ df2$x, col=2, lwd=2)
lines(predict(LOG.GAUSS.GLM, newdata=df2, type="response") ~ df2$x, col=3, lwd=2)
lines(predict(LOG.GAMMA.GLM, newdata=df2, type="response") ~ df2$x, col=4, lwd=2)
legend("topleft", legend=model.names, col=1:4, lwd=2, bty="n")
res.AIC <- as.matrix(
data.frame(
LM=AIC(LM),
LOG.LM=AIC(LOG.LM),
LOG.GAUSS.GLM=AIC(LOG.GAUSS.GLM),
LOG.GAMMA.GLM=AIC(LOG.GAMMA.GLM)
)
)
res.SS <- as.matrix(
data.frame(
LM=sum((predict(LM)-y)^2),
LOG.LM=sum((exp(predict(LOG.LM))-y)^2),
LOG.GAUSS.GLM=sum((predict(LOG.GAUSS.GLM, type="response")-y)^2),
LOG.GAMMA.GLM=sum((predict(LOG.GAMMA.GLM, type="response")-y)^2)
)
)
res.RMS <- as.matrix(
data.frame(
LM=sqrt(mean((predict(LM)-y)^2)),
LOG.LM=sqrt(mean((exp(predict(LOG.LM))-y)^2)),
LOG.GAUSS.GLM=sqrt(mean((predict(LOG.GAUSS.GLM, type="response")-y)^2)),
LOG.GAMMA.GLM=sqrt(mean((predict(LOG.GAMMA.GLM, type="response")-y)^2))
)
)
png("stats.png", height=7, width=10, units="in", res=300)
#x11(height=7, width=10)
par(mar=c(10,5,2,1), mfcol=c(1,3), cex=1, ps=12)
barplot(res.AIC, main="AIC", las=2)
barplot(res.SS, main="SS", las=2)
barplot(res.RMS, main="RMS", las=2)
dev.off()