gpt4 book ai didi

r - 当您缺少数据时,如何在模型中使用 `predict()` 而不会出错?

转载 作者:行者123 更新时间:2023-12-04 14:35:00 25 4
gpt4 key购买 nike

我有一个非常简单的逻辑回归模型,它完全基于 Race 中的两个分类预测变量。和 Sex .首先,由于我有一些缺失值,以确保所有缺失的数据都以 NA 的形式出现。 ,我使用以下方法导入数据框:

> mydata <- read.csv("~/Desktop/R/mydata.csv", sep=",", strip.white = TRUE,
+ na.strings= c("999", "NA", " ", ""))

下面是预测变量的摘要,看看有多少 NA有:
> # Define variables 
>
> Y <- cbind(Support)
> X <- cbind(Race, Sex)
>
> summary(X)
Race Sex
Min. :1.000000 Min. :1.000000
1st Qu.:1.000000 1st Qu.:1.000000
Median :2.000000 Median :1.000000
Mean :1.608696 Mean :1.318245
3rd Qu.:2.000000 3rd Qu.:2.000000
Max. :3.000000 Max. :3.000000
NA's :420 NA's :42

由于缺少值,该模型似乎可以正常工作:
> # Logit model coefficients 
>
> logit <- glm(Y ~ X, family=binomial (link = "logit"))
>
> summary(logit)

Call:
glm(formula = Y ~ X, family = binomial(link = "logit"))

Deviance Residuals:
Min 1Q Median 3Q Max
-2.0826825 -1.0911146 0.6473451 1.0190080 1.7457212

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.3457629 0.2884629 4.66529 3.0818e-06 ***
XRace -1.0716191 0.1339177 -8.00207 1.2235e-15 ***
XSex 0.5910812 0.1420270 4.16175 3.1581e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 1434.5361 on 1057 degrees of freedom
Residual deviance: 1347.5684 on 1055 degrees of freedom
(420 observations deleted due to missingness)
AIC: 1353.5684

Number of Fisher Scoring iterations: 4

问题一:当我没有 NA s,这段代码似乎运行良好。但是每当缺少值时,我都会收到一条错误消息。有没有办法仍然看到我有多少正确预测的值,无论是否丢失数据?
> table(true = Y, pred = round(fitted(logit))) 
Error in table(true = Y, pred = round(fitted(logit))) :
all arguments must have the same length

编辑:添加后 na.action = na.exclude对于模型定义,该表现在可以完美运行:
        pred 

true 0 1

0 259 178

1 208 413

无论丢失的数据如何,仍然有效的方法是在我使用此代码时将预测加载到原始数据框中。它在数据帧的末尾正确添加了一个“pred”列,每行的概率(如果预测变量之一不存在,则简单地添加 NA):
> predictions = cbind(mydata, pred = predict(logit, newdata = mydata, type = "response"))
> write.csv(predictions, "~/Desktop/R/predictions.csv", row.names = F)

问题2:然而,当我尝试预测一个新的数据框时——即使它具有相同的感兴趣的变量——似乎缺失值的某些东西也会导致错误消息。有没有代码可以解决这个问题,还是我做错了什么?
> newpredictions = cbind(newdata, pred = predict(logit, newdata = newdata, type = "response"))
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 1475, 1478
In addition: Warning message:
'newdata' had 1475 rows but variables found have 1478 rows

如上所示, mydata 中的行数是 1,478 并且 newdata 中的行数是 1,475。

谢谢您的帮助!

最佳答案

如果您有缺失数据,NA s, R 将在建模函数执行时删除这些 formula -> model.frame -> model.matrix()等等,因为所有这些函数的默认值是 na.action = na.omit .换句话说,带有 NA 的行在执行实际计算之前删除 s。此删除传播到从模型对象访问的拟合值、残差等

意识到这是一个问题,R 还有其他 na.action功能,包括 na.exclude() .因此,如果你添加

na.action = na.exclude

调用 glm() , fitted() , resid()等将返回与放置数据中的行一样多的拟合值。

您似乎确实在以一种特殊的方式进行建模。你为什么要创建 XY ,大概来自您的 mydata目的?这将是 最好做
mod <- glm(Support ~ Race + Sex, data = mydata family = binomial,
na.action = na.exclude)

现在在哪里而不是匿名 XY我们有一些有意义的变量,您不必创建重复的数据。

关于r - 当您缺少数据时,如何在模型中使用 `predict()` 而不会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23207360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com