جذر متوسط مربع الانحراف على اهمال GAM النتائج باستخدام R

StackOverflow https://stackoverflow.com/questions/3073365

سؤال

الخلفية

وهو قاعدة بيانات كيو يستخدم PL/R الاتصال R وظائف.R الدعوة إلى حساب سبيرمان ارتباط تبدو على النحو التالي:

cor( rank(x), rank(y) )

أيضا في ص ، السذاجة حساب المجهزة المعمم المضافة نموذج (GAM):

data.frame( x, fitted( gam( y ~ s(x) ) ) )

هنا x يمثل سنوات من عام 1900 إلى عام 2009 ، y هو متوسط القياس (على سبيل المثال ، الحد الأدنى من درجة الحرارة) لهذا العام.

المشكلة

تركيب خط الاتجاه (باستخدام حركة اتشيه الحرة) هي دقيقة بشكل معقول ، كما يمكنك أن ترى في الصورة التالية:

المشكلة هي أن الارتباطات (كما هو موضح في أسفل اليسار) لا تعكس بدقة كيف وثيقة المشروع.

ممكن حل

طريقة واحدة لتحسين دقة العلاقة هو استخدام جذر متوسط مربع الخطأ (RMSE) على حساب اهمال البيانات.

الأسئلة

Q. 1. كيف يمكنك تنفيذ RMSE حساب على اهمال البيانات للحصول على علاقة (بين 0 و 1) من أمانة عمان الكبرى تناسب القياسات في R اللغة ؟

Q. 2. هل هناك طريقة أفضل للعثور على دقة أمانة عمان الكبرى تناسب البيانات ، وإذا كان الأمر كذلك ، ما هي عليه (مثل جذر متوسط مربع الانحراف)?

محاولة حل 1

  1. استدعاء PL/R وظيفة باستخدام المرصودة المبالغ نموذج (GAM) المبالغ:
    correlation_rmse := climate.plr_corr_rmse( v_amount, v_model );
  2. تعريف plr_corr_rmse على النحو التالي (حيث o و m تمثل لاحظ غرار البيانات):
    CREATE OR REPLACE FUNCTION climate.plr_corr_rmse(
    o double precision[], m double precision[])
    RETURNS double precision AS
    $BODY$
    sqrt( mean( o - m ) ^ 2 )
    $BODY$
    LANGUAGE 'plr' VOLATILE STRICT
    COST 100;
    

على o - m هو الخطأ.أود أن بن كل من مجموعات البيانات عن طريق حساب mean كل 5 نقاط البيانات (سوف يكون هناك في أكثر من 110 نقاط البيانات).على سبيل المثال:

omean <- c( mean(o[1:5]), mean(o[6:10]), ... )
mmean <- c( mean(m[1:5]), mean(m[6:10]), ... )

ثم تصحيح RMSE حساب:

sqrt( mean( omean - mmean ) ^ 2 )

كيف يمكنك حساب c( mean(o[1:5]), mean(o[6:10]), ... ) بالنسبة التعسفي طول متجه في عدد مناسب من صناديق (5 ، على سبيل المثال ، قد لا تكون مثالية فقط 67 القياسات)?

لا أعتقد hist هو مناسبة هنا ، أليس كذلك ؟

الشروع الحل 2

التعليمة البرمجية التالية سوف يحل المشكلة ، ومع ذلك فإنه يسقط نقاط البيانات من نهاية القائمة (لجعل قائمة القسمة 5).الحل ليس مثاليا كما عدد "5" بدلا السحرية.

while( length(o) %% 5 != 0 ) {
  o <- o[-length(o)]
}

omean <- apply( matrix(o, 5), 2, mean )

ما هي الخيارات الأخرى المتاحة ؟

شكرا مقدما.

هل كانت مفيدة؟

المحلول

أنت تقول أن:

المشكلة هي أن الارتباطات (كما هو موضح في أسفل اليسار) لا تعكس بدقة كيف وثيقة المشروع.

هل يمكن أن نحسب الترابط بين المجهزة القيم و القيم المقاسة:

cor(y,fitted(gam(y ~ s(x))))

أنا لا أرى لماذا كنت ترغب بن البيانات الخاصة بك, ولكن يمكنك أن تفعل ذلك على النحو التالي:

mean.binned <- function(y,n = 5){
  apply(matrix(c(y,rep(NA,(n - (length(y) %% n)) %% n)),n),
        2,
        function(x)mean(x,na.rm = TRUE))
}

يبدو قليلا القبيح ، ولكن يجب التعامل مع ناقلات طوله متعددة من binning طول (أي5 في المثال الخاص بك).

يمكنك أيضا أن أقول أن:

طريقة واحدة لتحسين دقة الارتباط هو استخدام جذر متوسط مربع الخطأ (RMSE) على حساب اهمال البيانات.

أنا لا أفهم ماذا يعني لك هذا.الارتباط هو عامل في تحديد الخطأ التربيعي - على سبيل المثال ، انظر المعادلة 10 من ميرفي (1988, استعراض الطقس الشهرية, v.116, pp.2417-2424).ولكن يرجى توضيح ما تقصد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top