كيفية استخدام predict() مع نموذج الانحدار اللوجستي في r
بمجرد تركيب نموذج الانحدار اللوجستي في R، يمكننا استخدام وظيفة التنبؤ () للتنبؤ بقيمة الاستجابة لملاحظة جديدة لم يسبق للنموذج رؤيتها من قبل.
تستخدم هذه الوظيفة بناء الجملة التالي:
توقع (كائن، بيانات جديدة، نوع = “الاستجابة”)
ذهب:
- الكائن: اسم نموذج الانحدار اللوجستي
- newdata: اسم إطار البيانات الجديد لإجراء تنبؤات له
- النوع: نوع التنبؤ الذي يجب القيام به
يوضح المثال التالي كيفية استخدام هذه الوظيفة عمليًا.
مثال: استخدام Predict() مع نموذج الانحدار اللوجستي في R
في هذا المثال، سوف نستخدم مجموعة بيانات R المضمنة والتي تسمى mtcars :
#view first six rows of mtcars dataset
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3,460 20.22 1 0 3 1
سوف نلائم نموذج الانحدار اللوجستي التالي الذي نستخدم فيه المتغيرات disp و hp للتنبؤ بمتغير الاستجابة am (نوع ناقل الحركة في السيارة: 0 = أوتوماتيكي، 1 = يدوي):
#fit logistic regression model model <- glm(am ~ disp + hp, data=mtcars, family=binomial) #view model summary summary(model) Call: glm(formula = am ~ disp + hp, family = binomial, data = mtcars) Deviance Residuals: Min 1Q Median 3Q Max -1.9665 -0.3090 -0.0017 0.3934 1.3682 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) 1.40342 1.36757 1.026 0.3048 available -0.09518 0.04800 -1.983 0.0474 * hp 0.12170 0.06777 1.796 0.0725 . --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 43,230 on 31 degrees of freedom Residual deviance: 16,713 on 29 degrees of freedom AIC: 22,713 Number of Fisher Scoring iterations: 8
يمكننا بعد ذلك إنشاء إطار بيانات جديد يحتوي على معلومات حول ثماني سيارات لم يسبق للنموذج رؤيتها من قبل واستخدام وظيفة التنبؤ () للتنبؤ باحتمالية أن السيارة الجديدة ستحتوي على ناقل حركة أوتوماتيكي (am=0) أو ناقل حركة يدوي ( صباحا =1):
#define new data frame
newdata = data. frame (disp=c(200, 180, 160, 140, 120, 120, 100, 160),
hp=c(100, 90, 108, 90, 80, 90, 80, 90),
am=c(0, 0, 0, 1, 0, 1, 1, 1))
#view data frame
newdata
#use model to predict value of am for all new cars
newdata$am_prob <- predict(model, newdata, type=" response ")
#view updated data frame
newdata
disp hp am am_prob
1 200 100 0 0.004225640
2 180 90 0 0.008361069
3 160 108 0 0.335916069
4 140 90 1 0.275162866
5 120 80 0 0.429961894
6 120 90 1 0.718090728
7 100 80 1 0.835013994
8 160 90 1 0.053546152
وإليك كيفية تفسير النتيجة:
- احتمال أن السيارة 1 لديها ناقل حركة يدوي هو 0.004 .
- احتمال أن السيارة 2 لديها ناقل حركة يدوي هو 0.008 .
- احتمال أن السيارة رقم 3 بها ناقل حركة يدوي هو 0.336 .
وما إلى ذلك وهلم جرا.
يمكننا أيضًا استخدام الدالة table() لإنشاء مصفوفة ارتباك تعرض قيم am الفعلية مقابل القيم التي تنبأ بها النموذج:
#create vector that contains 0 or 1 depending on predicted value of am
am_pred = rep(0, dim(newdata)[1])
am_pred[newdata$am_prob > .5] = 1
#create confusion matrix
table(am_pred, newdata$am)
am_pred 0 1
0 4 2
1 0 2
أخيرًا، يمكننا استخدام الدالة Mean() لحساب النسبة المئوية للملاحظات في قاعدة البيانات الجديدة التي تنبأ النموذج بشكل صحيح بقيمة am :
#calculate percentage of observations the model correctly predicted response value for
mean(am_pred == newdata$am)
[1] 0.75
يمكننا أن نرى أن النموذج تنبأ بشكل صحيح بقيمة am لـ 75% من السيارات في قاعدة البيانات الجديدة.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في R:
كيفية إجراء الانحدار الخطي البسيط في R
كيفية إجراء الانحدار الخطي المتعدد في R
كيفية إجراء الانحدار متعدد الحدود في R
كيفية إنشاء فترة التنبؤ في R