লজিস্টিক কোয়ান্টাইল রিগ্রেশন - ফলাফলগুলি কীভাবে সেরাভাবে জানাতে হয়


12

পূর্ববর্তী পোস্টে আমি ভেবে দেখেছি কীভাবে EQ-5D স্কোরগুলি মোকাবেলা করতে হয় । সম্প্রতি আমি বটতাই এবং ম্যাককাউন দ্বারা প্রস্তাবিত লজিস্টিক কোয়ান্টাইল রিগ্রেশনকে হোঁচট খেয়েছি যা সীমান্তের ফলাফলগুলি মোকাবেলার জন্য একটি দুর্দান্ত উপায় উপস্থাপন করে। সূত্রটি সহজ:

আমিটি(Y)=(Y-YমিআমিএনYমিএকটিএক্স-Y)

লগ (0) এবং 0 দ্বারা বিভাজন এড়ানোর জন্য আপনি একটি ছোট মান, দ্বারা পরিসীমা প্রসারিত করুন । এটি এমন পরিবেশ দেয় যা স্কোরের সীমানাকে সম্মান করে।ε

সমস্যাটি হ'ল যে কোনও লগইট স্কেলে থাকবে এবং এটি নিয়মিত স্কেলে ফিরে না এলে তার কোনও মানে হয় না তবে এর অর্থ অ-রৈখিক হবে। গ্রাফিংয়ের উদ্দেশ্যে এটি গুরুত্বপূর্ণ নয় তবে আরও বেশি : এটি খুব অসুবিধে হবে।β ββββ

আমার প্রশ্ন:

সম্পূর্ণ স্প্যানটি না জানিয়ে আপনি কোনও লগইট- রিপোর্ট করার পরামর্শ দিচ্ছেন কীভাবে ?β


বাস্তবায়ন উদাহরণ

বাস্তবায়ন পরীক্ষার জন্য আমি এই বেসিক ফাংশনের উপর ভিত্তি করে একটি সিমুলেশন লিখেছি:

তোমার দর্শন লগ করাটিমি=β0+ +β1*এক্সটিগুলিটি3+ +β2*গুলিএক্স

যেখানে , এবং । যেহেতু স্কোরগুলিতে সিলিং রয়েছে আমি 4 এর উপরে যে কোনও ফলাফলের মান এবং -1 এর নীচে যে কোনও মানকে সর্বোচ্চ মান নির্ধারণ করেছি setβ 1 = 0.5 β 2 = 1β0=0β1=0.5β2=1

তথ্য অনুকরণ করুন

set.seed(10)
intercept <- 0
beta1 <- 0.5
beta2 <- 1
n = 1000
xtest <- rnorm(n,1,1)
gender <- factor(rbinom(n, 1, .4), labels=c("Male", "Female"))
random_noise  <- runif(n, -1,1)

# Add a ceiling and a floor to simulate a bound score
fake_ceiling <- 4
fake_floor <- -1

# Just to give the graphs the same look
my_ylim <- c(fake_floor - abs(fake_floor)*.25, 
             fake_ceiling + abs(fake_ceiling)*.25)
my_xlim <- c(-1.5, 3.5)

# Simulate the predictor
linpred <- intercept + beta1*xtest^3 + beta2*(gender == "Female") + random_noise
# Remove some extremes
linpred[linpred > fake_ceiling + abs(diff(range(linpred)))/2 |
    linpred < fake_floor - abs(diff(range(linpred)))/2 ] <- NA
#limit the interval and give a ceiling and a floor effect similar to scores
linpred[linpred > fake_ceiling] <- fake_ceiling
linpred[linpred < fake_floor] <- fake_floor

উপরের প্লট করতে:

library(ggplot2)
# Just to give all the graphs the same look
my_ylim <- c(fake_floor - abs(fake_floor)*.25, 
             fake_ceiling + abs(fake_ceiling)*.25)
my_xlim <- c(-1.5, 3.5)
qplot(y=linpred, x=xtest, col=gender, ylab="Outcome")

এই চিত্র দেয়:

সিমুলেশন থেকে স্ক্যাটারপ্ল্লট

নিবন্ধগুলি

এই বিভাগে আমি নিয়মিত লিনিয়ার রিগ্রেশন, কোয়ান্টাইল রিগ্রেশন (মিডিয়ান ব্যবহার করে) এবং লজিস্টিক কোয়ান্টাইল রিগ্রেশন তৈরি করি। সমস্ত অনুমান বুটকভ () ফাংশন ব্যবহার করে বুটস্ট্র্যাপযুক্ত মানগুলির উপর ভিত্তি করে।

library(rms)

# Regular linear regression
fit_lm <- Glm(linpred~rcs(xtest, 5)+gender, x=T, y=T)
boot_fit_lm <- bootcov(fit_lm, B=500)
p <- Predict(boot_fit_lm, xtest=seq(-2.5, 3.5, by=.001), gender=c("Male", "Female"))
lm_plot <- plot.Predict(p, 
             se=T, 
             col.fill=c("#9999FF", "#BBBBFF"), 
             xlim=my_xlim, ylim=my_ylim)

# Quantile regression regular
fit_rq <- Rq(formula(fit_lm), x=T, y=T)
boot_rq <- bootcov(fit_rq, B=500)
# A little disturbing warning:
# In rq.fit.br(x, y, tau = tau, ...) : Solution may be nonunique

p <- Predict(boot_rq, xtest=seq(-2.5, 3.5, by=.001), gender=c("Male", "Female"))
rq_plot <- plot.Predict(p, 
             se=T, 
             col.fill=c("#9999FF", "#BBBBFF"), 
             xlim=my_xlim, ylim=my_ylim)

# The logit transformations
logit_fn <- function(y, y_min, y_max, epsilon)
    log((y-(y_min-epsilon))/(y_max+epsilon-y))


antilogit_fn <- function(antiy, y_min, y_max, epsilon)
    (exp(antiy)*(y_max+epsilon)+y_min-epsilon)/
        (1+exp(antiy))


epsilon <- .0001
y_min <- min(linpred, na.rm=T)
y_max <- max(linpred, na.rm=T)
logit_linpred <- logit_fn(linpred, 
                          y_min=y_min,
                          y_max=y_max,
                          epsilon=epsilon)

fit_rq_logit <- update(fit_rq, logit_linpred ~ .)
boot_rq_logit <- bootcov(fit_rq_logit, B=500)


p <- Predict(boot_rq_logit, xtest=seq(-2.5, 3.5, by=.001), gender=c("Male", "Female"))

# Change back to org. scale
transformed_p <- p
transformed_p$yhat <- antilogit_fn(p$yhat,
                                    y_min=y_min,
                                    y_max=y_max,
                                    epsilon=epsilon)
transformed_p$lower <- antilogit_fn(p$lower, 
                                     y_min=y_min,
                                     y_max=y_max,
                                     epsilon=epsilon)
transformed_p$upper <- antilogit_fn(p$upper, 
                                     y_min=y_min,
                                     y_max=y_max,
                                     epsilon=epsilon)

logit_rq_plot <- plot.Predict(transformed_p, 
             se=T, 
             col.fill=c("#9999FF", "#BBBBFF"), 
             xlim=my_xlim, ylim=my_ylim)

প্লট

বেস ফাংশনটির সাথে তুলনা করতে আমি এই কোডটি যুক্ত করেছি:

library(lattice)
# Calculate the true lines
x <- seq(min(xtest), max(xtest), by=.1)
y <- beta1*x^3+intercept
y_female <- y + beta2
y[y > fake_ceiling] <- fake_ceiling
y[y < fake_floor] <- fake_floor
y_female[y_female > fake_ceiling] <- fake_ceiling
y_female[y_female < fake_floor] <- fake_floor

tr_df <- data.frame(x=x, y=y, y_female=y_female)
true_line_plot <- xyplot(y  + y_female ~ x, 
                         data=tr_df,
                         type="l", 
                         xlim=my_xlim, 
                         ylim=my_ylim, 
                         ylab="Outcome", 
                         auto.key = list(
                           text = c("Male"," Female"),
                           columns=2))


# Just for making pretty graphs with the comparison plot
compareplot <- function(regr_plot, regr_title, true_plot){
  print(regr_plot, position=c(0,0.5,1,1), more=T)
  trellis.focus("toplevel")
  panel.text(0.3, .8, regr_title, cex = 1.2, font = 2)
  trellis.unfocus()
  print(true_plot, position=c(0,0,1,.5), more=F)
  trellis.focus("toplevel")
  panel.text(0.3, .65, "True line", cex = 1.2, font = 2)
  trellis.unfocus()
}

compareplot(lm_plot, "Linear regression", true_line_plot)
compareplot(rq_plot, "Quantile regression", true_line_plot)
compareplot(logit_rq_plot, "Logit - Quantile regression", true_line_plot)

সীমিত ফলাফলের জন্য লিনিয়ার রিগ্রেশন

সীমিত ফলাফলের জন্য কোয়ান্টাইল রিগ্রেশন

সীমাবদ্ধ ফলাফলের জন্য লজিস্টিক কোয়ান্টাইল রিগ্রেশন

বিপরীতে আউটপুট

এখন আমি বৈপরীত্যটি পেতে চেষ্টা করেছি এবং এটি প্রায় "সঠিক" তবে এটি প্রত্যাশার সাথে ছড়িয়ে পড়ে:

> contrast(boot_rq_logit, list(gender=levels(gender), 
+                              xtest=c(-1:1)), 
+          FUN=function(x)antilogit_fn(x, epsilon))
   gender xtest Contrast   S.E.       Lower      Upper       Z      Pr(>|z|)
   Male   -1    -2.5001505 0.33677523 -3.1602179 -1.84008320  -7.42 0.0000  
   Female -1    -1.3020162 0.29623080 -1.8826179 -0.72141450  -4.40 0.0000  
   Male    0    -1.3384751 0.09748767 -1.5295474 -1.14740279 -13.73 0.0000  
*  Female  0    -0.1403408 0.09887240 -0.3341271  0.05344555  -1.42 0.1558  
   Male    1    -1.3308691 0.10810012 -1.5427414 -1.11899674 -12.31 0.0000  
*  Female  1    -0.1327348 0.07605115 -0.2817923  0.01632277  -1.75 0.0809  

Redundant contrasts are denoted by *

Confidence intervals are 0.95 individual intervals

উত্তর:


3

প্রথম জিনিস আপনি কি করতে পারেন, উদাহরণস্বরূপ, ব্যাখ্যা করা হয়, আনুমানিক প্রভাব হিসাবে সমাংশক আপনি এ খুঁজছেন করছি logit উপর। এসএক্সβ2^গুলিএক্স

মেপুঃ{β2^} , একইভাবে "ক্লাসিক" লজিস্টিক রিগ্রেশন-এর মতো, পুরুষদের মধ্যে স্ত্রীদের মধ্যে (বা অন্য কোনও কোয়ান্টাইল) ফলাফলের বৈকল্পিক অনুপাত। "ক্লাসিক" লজিস্টিক রিগ্রেশনের সাথে পার্থক্যটি কীভাবে প্রতিকূলতা গণনা করা হয়: সম্ভাবনার পরিবর্তে আপনার (সীমাবদ্ধ) ফলাফল ব্যবহার করা।

তদাতিরিক্ত, আপনি সর্বদা একটি কোভারিয়েট অনুসারে পূর্বাভাসযুক্ত কোয়ান্টাইলগুলি দেখতে পারেন। অবশ্যই আপনাকে আপনার মডেলটিতে অন্যান্য সমবায়িকদের মানগুলি (শর্তে) ঠিক করতে হবে (যেমন আপনি আপনার উদাহরণে করেছিলেন)।

লগ(Y-YমিআমিএনYমিএকটিএক্স-Y)

(এটি আসলে কোনও উত্তর হওয়ার উদ্দেশ্য নয়, কারণ এই গবেষণাপত্রে যা লিখিত হয়েছে তার এটি কেবল একটি (দরিদ্র) পুনরায় রেকর্ডিং , যা আপনি নিজেরাই উদ্ধৃত করেছেন However তবে, মন্তব্য করতে খুব দীর্ঘ সময় লেগেছে এবং যার অ্যাক্সেস নেই অন-লাইন জার্নালগুলিতে যেভাবেই আগ্রহী হতে পারে)।


এক্সপি(β)

খুব সুন্দর কাজ এবং গ্রাফিক্স। এই ধরণের প্রতিক্রিয়ার ভেরিয়েবলের জন্য আমি আনুপাতিক প্রতিকূলগুলি অর্ডিনাল লজিস্টিক মডেলের দিকে আরও ঝুঁকতে চাই।
ফ্রাঙ্ক হ্যারেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.