অর্ডিনাল লজিস্টিক রিগ্রেশনের জন্য শক্তি বিশ্লেষণ


12

আমি এমন একটি প্রোগ্রাম খুঁজছি (আর বা এসএএস বা স্বতন্ত্র ক্ষেত্রে, নিখরচায় বা স্বল্প খরচে) যা অर्डিনাল লজিস্টিক রিগ্রেশনের জন্য পাওয়ার বিশ্লেষণ করবে।

উত্তর:


27

আমি সিমুলেশন দ্বারা বেসিকের বাইরে পাওয়ার বিশ্লেষণ করতে পছন্দ করি। পূর্বনির্ধারিত প্যাকেজগুলির সাথে, আমি কখনই অনুমান করা হচ্ছে তা পুরোপুরি নিশ্চিত নই।

পাওয়ারের জন্য সিমুলেটিংটি আর ব্যবহার করে বেশ সোজা এগিয়ে (এবং সাশ্রয়ী মূল্যের) is

  1. আপনার ডেটা কেমন হওয়া উচিত এবং আপনি কীভাবে এটি বিশ্লেষণ করবেন তা আপনার সিদ্ধান্ত নিন
  2. কোনও ফাংশন বা এক্সপ্রেশনগুলির সেট লিখুন যা প্রদত্ত সম্পর্ক এবং নমুনা আকারের জন্য ডেটা অনুকরণ করবে এবং বিশ্লেষণ করবে (একটি ফাংশনটি পছন্দনীয় যে আপনি নমুনার আকার এবং পরামিতিগুলিকে বিভিন্ন মানকে চেষ্টা করা সহজ করার জন্য আর্গুমেন্টে তৈরি করতে পারেন)। ফাংশন বা কোডে পি-মান বা অন্যান্য পরীক্ষার পরিসংখ্যান ফিরিয়ে দেওয়া উচিত।
  3. replicateএকগুচ্ছ সময়ের উপরের কোডটি চালানোর জন্য ফাংশনটি ব্যবহার করুন (আমি সাধারণত এটি প্রায় 100 বছর সময় লাগে এবং সঠিক জেনারেলটি পেতে সঠিক অনুভূতি পেতে শুরু করি, তারপর এটি 1000 এবং কখনও কখনও 10,000 বা 100,000 পর্যন্ত পৌঁছে যায়) চূড়ান্ত মান যা আমি ব্যবহার করব)। নাল অনুমানকে আপনি যে সময়ের সাথে প্রত্যাখ্যান করেছেন তার অনুপাত হ'ল শক্তি।
  4. শর্তগুলির আরও একটি সেট জন্য উপরেরটি আবার করুন।

এখানে অর্ডিনাল রিগ্রেশন সহ একটি সাধারণ উদাহরণ রয়েছে:

library(rms)

tmpfun <- function(n, beta0, beta1, beta2) {
    x <- runif(n, 0, 10)
    eta1 <- beta0 + beta1*x
    eta2 <- eta1 + beta2
    p1 <- exp(eta1)/(1+exp(eta1))
    p2 <- exp(eta2)/(1+exp(eta2))
    tmp <- runif(n)
    y <- (tmp < p1) + (tmp < p2)
    fit <- lrm(y~x)
    fit$stats[5]
}

out <- replicate(1000, tmpfun(100, -1/2, 1/4, 1/4))
mean( out < 0.05 )

6
+1, এটি একটি খুব দৃust়, সর্বজনীন পদ্ধতির। আমি প্রায়শই এটি ব্যবহার করেছি। আমি অন্য বৈশিষ্ট্য সুপারিশ করতে চাই: আপনি সর্বাধিক জন্য তথ্য তৈরি করতে পারেন আপনি বিবেচনা করতে চায়, তবে ধারাবাহিকভাবে পর্যন্ত নিয়মিত সময় অন্তর তাদের N 1st ঝুলানো দ্বারা ঐ ডেটার অনুপাত জন্য মডেল মাপসই (যেমন, এন = 100 , 120, 140, 160, 180, এবং 200)। প্রতিটি উত্পন্ন ডেটাसेट থেকে একটি পি-মান সংরক্ষণ করার পরিবর্তে, আপনি পি-মানগুলির একটি সারি সংরক্ষণ করতে পারেন । প্রতিটি কলামে গড়ে ওঠা আপনাকে কীভাবে ডাব্লু / পরিবর্তন করতে পারে তার তাত্পর্যপূর্ণ এবং নোংরা অনুভূতি দেয় এবং আপনাকে উপযুক্ত মানটিতে দ্রুত সহায়তা করতে সহায়তা করে। এন এনNNN
গুং - মনিকা পুনরায়

2
@ গুং: আপনার মন্তব্যটি বোধগম্য হবেন, আপনার কোডগুলি যুক্ত করতে কি আপত্তি হবে যাতে আরে কম অভিজ্ঞ লোকেরাও এতে উপকৃত হতে পারে? ধন্যবাদ

1
আমি এটি আবারও দেখছি এবং আমার কয়েকটি প্রশ্ন রয়েছে: 1) কেন 1:10 এ এক্স ইউনিফর্ম? 2) আপনি কীভাবে এটি 1 টিরও বেশি স্বাধীন ভেরিয়েবলকে সাধারণীকরণ করবেন?
পিটার ফ্লুম - মনিকা পুনরায়

1
@ পিটারফ্লম, এক্সকে কিছু একটা হতে হয়েছিল, তাই আমি 0 থেকে 10 এর মধ্যে সমান হওয়ার জন্য (নির্বিচারে) বেছে নিয়েছিলাম, এটি সাধারণ, গামা ইত্যাদিও হতে পারে something সর্বোপরি এমন কিছু চয়ন করা উচিত যা আমরা আসল প্রত্যাশার সাথে মিলে যায় এক্স ভেরিয়েবল দেখতে দেখতে। 1 টিরও বেশি পূর্বাভাসকারী ভেরিয়েবল ব্যবহার করতে, সেগুলি স্বাধীনভাবে উত্পন্ন করুন (বা একটি মাল্টিভারিয়েট সাধারণ, কোপুলা ইত্যাদির মাধ্যমে) তারপরে এটিকে কেবল এট 1 টুকরোতে অন্তর্ভুক্ত করুন, যেমন eta1 <- beta0 + beta1*x1 + beta2*x2 + beta3*x3
গ্রেগ স্নো

1
@ এএবসি, প্রতিলিপি না করা কেবল আপনাকে একক সিদ্ধান্ত দেবে, কতবার পরীক্ষা প্রত্যাখ্যান করে (পাওয়ারের সংজ্ঞা) তা নির্ধারণ করতে আপনার প্রতিরূপ প্রয়োজন। replicateফাংশনে নেই এবং সংশোধন করে না। ফাংশনটি একটি পুনরাবৃত্তির জন্য পি-মান (ফিটে $ পরিসংখ্যান [5]) প্রদান করে, প্রতিলিপিটি ফাংশনটি 1000 বার চালায় (বা আপনি যে সংখ্যা নির্ধারণ করুন) এবং 1,000 পি-মানগুলি প্রদান করে, meanফাংশনটি তার অনুপাতের পরে অনুপাত করে পরীক্ষাগুলি যে এ প্রত্যাখ্যান করবে । α=0.05
গ্রেগ স্নো

3

আমি স্নোয়ের উত্তরে আরও একটি জিনিস যুক্ত করব (এবং এটি সিমুলেশনের মাধ্যমে কোনও পাওয়ার বিশ্লেষণে প্রযোজ্য) - আপনি 1 বা 2 লেজযুক্ত পরীক্ষার সন্ধান করছেন কিনা তা মনোযোগ দিন pay জি * পাওয়ারের মতো জনপ্রিয় প্রোগ্রামগুলি 1-লেজযুক্ত পরীক্ষায় ডিফল্ট এবং আপনি যদি সিমুলেশনগুলি তাদের সাথে মেলে কিনা তা দেখার চেষ্টা করছেন (আপনি কীভাবে এটি করতে শিখছেন তখন সর্বদা একটি ভাল ধারণা), আপনি প্রথমে এটি পরীক্ষা করতে চান।

স্নোকে চালানোর জন্য 1-লেজযুক্ত পরীক্ষা করার জন্য, আমি ফাংশন ইনপুটগুলিতে "লেজ" নামে একটি প্যারামিটার যুক্ত করব এবং নিজেই ফাংশনে এই জাতীয় কিছু যুক্ত করব:

 #two-tail test
  if (tail==2) fit$stats[5]

  #one-tail test
  if (tail==1){
    if (fit$coefficients[5]>0) {
          fit$stats[5]/2
    } else 1

1-লেজযুক্ত সংস্করণটি মূলত সহগটি ইতিবাচক কিনা তা পরীক্ষা করে এবং তারপরে পি-মানটি অর্ধেক করে দেয়।


2

স্নো এর দুর্দান্ত উদাহরণ ছাড়াও, আমি বিশ্বাস করি যে আপনি বিদ্যমান ডেটাসেট থেকে পুনরায় মডেল করে একটি পাওয়ার সিমুলেশনও করতে পারেন যা আপনার প্রভাব রয়েছে। কোনও বুটস্ট্র্যাপ নয়, যেহেতু আপনি একই এন -এর প্রতিস্থাপনের সাথে নমুনা-বানাচ্ছেন না , তবে একই ধারণা।

সুতরাং এখানে একটি উদাহরণ রয়েছে: আমি একটি সামান্য স্ব-পরীক্ষা চালিয়েছিলাম যা একটি ইতিবাচক দৃষ্টিকোণ-অনুমানে পরিণত হয়েছিল তবে এটি সামান্য ছিল বলে, সাধারণ লজিস্টিক রিগ্রেশনটিতে পরিসংখ্যানগতভাবে-তাত্পর্যপূর্ণ ছিল না। সেই বিন্দু-অনুমানের সাথে, আমার কত বড় একটি এন দরকার হবে? বিভিন্ন সম্ভাব্য এন এর জন্য , আমি বহুবার একটি ডেটাসেট তৈরি করেছি এবং সাধারণ লজিস্টিক রিগ্রেশন চালিয়েছি এবং দেখেছি পি- মূল্য কত ছোট :

library(boot)
library(rms)
npt <- read.csv("http://www.gwern.net/docs/nootropics/2013-gwern-noopept.csv")
newNoopeptPower <- function(dt, indices) {
    d <- dt[sample(nrow(dt), n, replace=TRUE), ] # new dataset, possibly larger than the original
    lmodel <- lrm(MP ~ Noopept + Magtein, data = d)
    return(anova(lmodel)[7])
}
alpha <- 0.05
for (n in seq(from = 300, to = 600, by = 30)) {
   bs <- boot(data=npt, statistic=newNoopeptPower, R=10000, parallel="multicore", ncpus=4)
   print(c(n, sum(bs$t<=alpha)/length(bs$t)))
}

আউটপুট সহ (আমার জন্য):

[1] 300.0000   0.1823
[1] 330.0000   0.1925
[1] 360.0000   0.2083
[1] 390.0000   0.2143
[1] 420.0000   0.2318
[1] 450.0000   0.2462
[1] 480.000   0.258
[1] 510.0000   0.2825
[1] 540.0000   0.2855
[1] 570.0000   0.3184
[1] 600.0000   0.3175

এই ক্ষেত্রে, n = 600 এ শক্তি ছিল 32%। খুব উত্সাহজনক নয়।

(যদি আমার সিমুলেশন পদ্ধতির ভুল হয় তবে দয়া করে কেউ আমাকে বলুন clin ক্লিনিকাল ট্রায়ালগুলির পরিকল্পনার জন্য পাওয়ার সিমুলেশন নিয়ে আমি কয়েকটি মেডিকেল পেপারগুলি বন্ধ করছি, তবে আমি আমার সঠিক প্রয়োগ সম্পর্কে মোটেও নিশ্চিত নই।)


0

প্রথম সিমুলেশন উল্লেখ করে (স্নো দ্বারা প্রস্তাবিত; /stats//a/22410/231675 ):

আমি এখনও নিশ্চিত নই যে আরও বেশি (বিশেষত তিনটি) স্বতন্ত্র ভেরিয়েবলগুলির সাথে সিমুলেশনটি কেমন হওয়া উচিত। আমি বুঝতে পেরেছি যে আমার 'এটিকে সবগুলি এটা 1 টুকরোতে অন্তর্ভুক্ত করা উচিত, যেমন এটা 1 <- বিটা 0 + বিটা 1 * এক্স 1 + বিটা 2 * এক্স 2 + বিটা 3 * এক্স 3' '(উপরে উল্লিখিত হিসাবে)। তবে আমি জানিনা কীভাবে ফাংশনে বাকী প্যারামিটারগুলি সামঞ্জস্য করতে হয়। কেউ আমাকে এই সাহায্য করতে পারে?


1
আমি মনে করি আপনি যদি এই প্রশ্নের পিছনে একটি লিঙ্ক সহ একটি নতুন প্রশ্ন জিজ্ঞাসা করেন তবে আপনি আরও ভাল প্রতিক্রিয়া পাবেন।
mdewey
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.