এক্স এবং ওয়াইয়ের অনিশ্চয়তার ক্ষেত্রে সর্বাধিক সম্ভাবনার অনুকূলতা ইয়র্ক (2004) দ্বারা সম্বোধন করা হয়েছে addressed এখানে তার ফাংশন জন্য আর কোড।
রিক ওয়েহর, ২০১১ রচিত "ইয়র্কফিট", রাচেল চ্যাং অনুবাদ করেছেন আরতে অনুবাদ করেছেন
একিউ অনুসরণ করে ত্রুটি এবং ফিটের প্রাক্কলনগুলির ভালতা সহ ভেরিয়েবল, পারস্পরিক সম্পর্কযুক্ত ত্রুটি সহ ডেটাতে সেরা স্ট্রেইট লাইন ফিটের জন্য সর্বজনীন রুটিন (১৩) ইয়র্ক 2004 এর আমেরিকান জার্নাল অফ ফিজিক্স, যা ইয়র্ক 1969, আর্থ এবং প্ল্যানেটারি সায়েন্সেস লেটারসের পরিবর্তে নির্মিত হয়েছিল
ইয়র্কফিট <- ফাংশন (এক্স, ওয়াই, এক্সস্টডি, ইএসটিডি, রি = 0, বি0 = 0, প্রিন্টকয়েফস = 0, মেকলাইন = 0, এপিএস = 1 ই -7)
এক্স, ওয়াই, এক্সস্টডি, ওয়াইএসডি: এক্স পয়েন্ট, ওয়াই পয়েন্ট এবং তাদের মানক বিচ্যুতিযুক্ত তরঙ্গ
সতর্কতা: এক্সএসটিডি এবং ওয়াইএসটি শূন্য হতে পারে না কারণ এটি এক্সডাব্লু বা ওয়াইডাব্লুএকে এনএএন করবে। পরিবর্তে খুব ছোট মান ব্যবহার করুন।
রি: এক্স এবং ওয়াই ত্রুটির জন্য পারস্পরিক সম্পর্ক সহগ - দৈর্ঘ্য 1 বা এক্স এবং ওয়াইয়ের দৈর্ঘ্য
বি0: opeালের জন্য মোটামুটি প্রাথমিক অনুমান (ত্রুটি ছাড়াই মানসম্পন্ন ন্যূনতম-স্কোয়ারগুলি থেকে পাওয়া যায়)
printCoefs: কমান্ড উইন্ডোতে ফলাফল প্রদর্শন করতে 1 এর সমান সেট করুন
MakeLine: ফিট লাইনের জন্য Y তরঙ্গ উত্পন্ন করতে সমান 1 সেট করুন
ইন্টারসেপ্ট এবং plusালু প্লাস তাদের অনিশ্চয়তা সহ একটি ম্যাট্রিক্স প্রদান করে
যদি বি 0 এর জন্য কোনও প্রাথমিক অনুমান সরবরাহ না করা হয় তবে কেবলমাত্র ওএলএস ব্যবহার করুন (b0 == 0) {b0 = lm (Y ~ X) $ সহগুণ [2]}
tol = abs(b0)*eps #the fit will stop iterating when the slope converges to within this value
a, b: চূড়ান্ত বিরতি এবং opeাল a.err, b.err: বিরতি এবং opeালের আনুমানিক অনিশ্চয়তা
# WAVE DEFINITIONS #
Xw = 1/(Xstd^2) #X weights
Yw = 1/(Ystd^2) #Y weights
# ITERATIVE CALCULATION OF SLOPE AND INTERCEPT #
b = b0
b.diff = tol + 1
while(b.diff>tol)
{
b.old = b
alpha.i = sqrt(Xw*Yw)
Wi = (Xw*Yw)/((b^2)*Yw + Xw - 2*b*Ri*alpha.i)
WiX = Wi*X
WiY = Wi*Y
sumWiX = sum(WiX, na.rm = TRUE)
sumWiY = sum(WiY, na.rm = TRUE)
sumWi = sum(Wi, na.rm = TRUE)
Xbar = sumWiX/sumWi
Ybar = sumWiY/sumWi
Ui = X - Xbar
Vi = Y - Ybar
Bi = Wi*((Ui/Yw) + (b*Vi/Xw) - (b*Ui+Vi)*Ri/alpha.i)
wTOPint = Bi*Wi*Vi
wBOTint = Bi*Wi*Ui
sumTOP = sum(wTOPint, na.rm=TRUE)
sumBOT = sum(wBOTint, na.rm=TRUE)
b = sumTOP/sumBOT
b.diff = abs(b-b.old)
}
a = Ybar - b*Xbar
wYorkFitCoefs = c(a,b)
# ERROR CALCULATION #
Xadj = Xbar + Bi
WiXadj = Wi*Xadj
sumWiXadj = sum(WiXadj, na.rm=TRUE)
Xadjbar = sumWiXadj/sumWi
Uadj = Xadj - Xadjbar
wErrorTerm = Wi*Uadj*Uadj
errorSum = sum(wErrorTerm, na.rm=TRUE)
b.err = sqrt(1/errorSum)
a.err = sqrt((1/sumWi) + (Xadjbar^2)*(b.err^2))
wYorkFitErrors = c(a.err,b.err)
# GOODNESS OF FIT CALCULATION #
lgth = length(X)
wSint = Wi*(Y - b*X - a)^2
sumSint = sum(wSint, na.rm=TRUE)
wYorkGOF = c(sumSint/(lgth-2),sqrt(2/(lgth-2))) #GOF (should equal 1 if assumptions are valid), #standard error in GOF
# OPTIONAL OUTPUTS #
if(printCoefs==1)
{
print(paste("intercept = ", a, " +/- ", a.err, sep=""))
print(paste("slope = ", b, " +/- ", b.err, sep=""))
}
if(makeLine==1)
{
wYorkFitLine = a + b*X
}
ans=rbind(c(a,a.err),c(b, b.err)); dimnames(ans)=list(c("Int","Slope"),c("Value","Sigma"))
return(ans)
}
lm