অ-রৈখিক মডেল সহ গ্রুপিং ভেরিয়েবলের প্রভাব কীভাবে পরীক্ষা করবেন?


15

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

এখানে চিত্র বর্ণনা লিখুন

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

###seasonalized von Bertalanffy growth model
soVBGF <- function(S.inf, k, age, age.0, age.s, c){
    S.inf * (1-exp(-k*((age-age.0)+(c*sin(2*pi*(age-age.s))/2*pi)-(c*sin(2*pi*(age.0-age.s))/2*pi))))
}

###Make artificial data
food <- c("corn", "corn", "wheat", "wheat")
lake <- c("king", "queen", "king", "queen")

#cornking, cornqueen, wheatking, wheatqueen
S.inf <- c(140, 140, 130, 130)
k <- c(0.5, 0.6, 0.8, 0.9)
age.0 <- c(-0.1, -0.05, -0.12, -0.052)
age.s <- c(0.5, 0.5, 0.5, 0.5)
cs <- c(0.05, 0.1, 0.05, 0.1)

PARS <- data.frame(food=food, lake=lake, S.inf=S.inf, k=k, age.0=age.0, age.s=age.s, c=cs)

#make data
set.seed(3)
db <- c()
PCH <- NaN*seq(4)
COL <- NaN*seq(4)
for(i in seq(4)){
    age <- runif(min=0.2, max=5, 100)
    age <- age[order(age)]
    size <- soVBGF(PARS$S.inf[i], PARS$k[i], age, PARS$age.0[i], PARS$age.s[i], PARS$c[i]) + rnorm(length(age), sd=3)
	PCH[i] <- c(1,2)[which(levels(PARS$food) == PARS$food[i])]
	COL[i] <- c(2,3)[which(levels(PARS$lake) == PARS$lake[i])]
	db <- rbind(db, data.frame(age=age, size=size, food=PARS$food[i], lake=PARS$lake[i], pch=PCH[i], col=COL[i]))
}

#visualize data
plot(db$size ~ db$age, col=db$col, pch=db$pch)
legend("bottomright", legend=paste(PARS$food, PARS$lake), col=COL, pch=PCH)


###fit growth model
library(nlme)

starting.values <- c(S.inf=140, k=0.5, c=0.1, age.0=0, age.s=0)

#fit to pooled data ("small model")
fit0 <- nls(size ~ soVBGF(S.inf, k, age, age.0, age.s, c), 
  data=db,
  start=starting.values
)
summary(fit0)

#fit to each lake separatly ("large model")
fit.king <- nls(size ~ soVBGF(S.inf, k, age, age.0, age.s, c), 
  data=db,
  start=starting.values,
  subset=db$lake=="king"
)
summary(fit.king)

fit.queen <- nls(size ~ soVBGF(S.inf, k, age, age.0, age.s, c), 
  data=db,
  start=starting.values,
  subset=db$lake=="queen"
)
summary(fit.queen)


#analysis of residual sum of squares (F-test)
resid.small <- resid(fit0)
resid.big <- c(resid(fit.king),resid(fit.queen))
df.small <- summary(fit0)$df
df.big <- summary(fit.king)$df+summary(fit.queen)$df

F.value <- ((sum(resid.small^2)-sum(resid.big^2))/(df.big[1]-df.small[1])) / (sum(resid.big^2)/(df.big[2]))
P.value <- pf(F.value , (df.big[1]-df.small[1]), df.big[2], lower.tail = FALSE)
F.value; P.value


###plot models
plot(db$size ~ db$age, col=db$col, pch=db$pch)
legend("bottomright", legend=paste(PARS$food, PARS$lake), col=COL, pch=PCH)
legend("topleft", legend=c("soVGBF pooled", "soVGBF king", "soVGBF queen"), col=c(1,2,3), lwd=2)

#plot "small" model (pooled data)
tmp <- data.frame(age=seq(min(db$age), max(db$age),,100))
pred <- predict(fit0, tmp)
lines(tmp$age, pred, col=1, lwd=2)

#plot "large" model (seperate fits)
tmp <- data.frame(age=seq(min(db$age), max(db$age),,100), lake="king")
pred <- predict(fit.king, tmp)
lines(tmp$age, pred, col=2, lwd=2)
tmp <- data.frame(age=seq(min(db$age), max(db$age),,100), lake="queen")
pred <- predict(fit.queen, tmp)
lines(tmp$age, pred, col=3, lwd=2)



###Can this be done in one step using a grouping variable?
#with "lake" as grouping variable
starting.values <- c(S.inf=140, k=0.5, c=0.1, age.0=0, age.s=0)
fit1 <- nlme(model = size ~ soVBGF(S.inf, k, age, age.0, age.s, c), 
  data=db,
  fixed = S.inf + k + c + age.0 + age.s ~ 1,
  group = ~ lake,
  start=starting.values
)
summary(fit1)

#similar residuals to the seperatly fitted models
sum(resid(fit.king)^2+resid(fit.queen)^2)
sum(resid(fit1)^2)

#but different degrees of freedom? (10 vs. 21?)
summary(fit.king)$df+summary(fit.queen)$df
AIC(fit1, fit0)


###I would also like to nest my grouping factors. This doesn't work...
#with "lake" and "food" as grouping variables
starting.values <- c(S.inf=140, k=0.5, c=0.1, age.0=0, age.s=0)
fit2 <- nlme(model = size ~ soVBGF(S.inf, k, age, age.0, age.s, c), 
  data=db,
  fixed = S.inf + k + c + age.0 + age.s ~ 1,
  group = ~ lake/food,
  start=starting.values
)

তথ্যসূত্র: চেন, ওয়াই।, জ্যাকসন, ডিএ এবং হার্ভে, এইচ এইচ, 1992. ফিশ বর্ধনের তথ্যকে মডেলিংয়ে ভন বার্টালানফি এবং বহুপদী ফাংশনগুলির একটি তুলনা। 49, 6: 1228-1235।

উত্তর:


6

এক্স1,,এক্সপিওয়াই

ওয়াই=(এক্স1,,এক্সপি)+ +ε

ε~এন(0,σ2)বিমিবিএল1এল0

আনস্ট্রিফিকেশন মডেল স্পষ্টতই স্তরিত মডেলের একটি সাব মডেল, সুতরাং বৃহত্তর মডেলটি যুক্ত জটিলতার জন্য মূল্যবান কিনা তা দেখার সম্ভাবনা অনুপাত পরীক্ষা উপযুক্ত - পরীক্ষার পরিসংখ্যানটি হ'ল

λ=2(এল1-এল0)

λχ2মিপি-পি=পি(মি-1)পিχ2


আপনি কি মি পৃথক মডেল ফিট করার পরামর্শ দিচ্ছেন, প্রতিটি এল 1 = এসইএম (এলএল_আই, আমি 1 থেকে এম) থেকে লগের সম্ভাবনাটি যোগ করুন এবং তারপরে সম্ভাবনাটি নিয়ে এগিয়ে যাবেন? এছাড়াও, এল-কে কি প্রশ্নে শ্রেণিবদ্ধ ভবিষ্যদ্বাণীযুক্ত মডেল অন্তর্ভুক্ত করা হয়েছে (উদাহরণস্বরূপ এম -1 ডামি ভেরিয়েবল সহ)?
বি_মিনার

L0BB

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

আমি মনে করি না আপনি মডেলগুলির তুলনায় বেশ কয়েকটি মডেল ফিট করতে সক্ষম হবেন। এছাড়াও, হ্যাঁ, সম্ভাবনা অনুপাত পরীক্ষা নেস্টেড কারণগুলির জন্য পরীক্ষার জন্য ব্যবহার করা যেতে পারে।
ম্যাক্রো

2

আমি খুঁজে পেয়েছি যে কেবল এনএলএস () এর সাথে শ্রেণীবদ্ধ ভেরিয়েবলগুলি কোড করা সম্ভব, কেবল আপনার সমীকরণে সত্য / মিথ্যা ভেক্টরকে গুণ করে। উদাহরণ:

# null model (no difference between groups; all have the same coefficients)
nls.null <- nls(formula = percent_on_cells ~ vmax*(Time/(Time+km)),
            data = mehg,
            start = list(vmax = 0.6, km = 10))

# alternative model (each group has different coefficients)
nls.alt <- nls(formula = percent_on_cells ~ 
              as.numeric(DOC==0)*(vmax1)*(Time/(Time+(km1))) 
            + as.numeric(DOC==1)*(vmax2)*(Time/(Time+(km2)))
            + as.numeric(DOC==10)*(vmax3)*(Time/(Time+(km3)))
            + as.numeric(DOC==100)*(vmax4)*(Time/(Time+(km4))),
            data = mehg, 
            start = list(vmax1=0.63, km1=3.6, 
                         vmax2=0.64, km2=3.6, 
                         vmax3=0.50, km3=3.2,
                         vmax4= 0.40, km4=9.7))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.