Rit*_*ack 0 validation r statistics-bootstrap
我正在尝试使用引导包中的函数 cv.glm() 来验证线性模型。首先我运行模型,它工作正常:
> linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
Run Code Online (Sandbox Code Playgroud)
然后,我想做验证:
cv.glm(red_wine_data,linear_model_red)
Run Code Online (Sandbox Code Playgroud)
它给我带来了错误:
Error in model.frame.default(formula = red_wine_data$quality ~ ., data = list( :
variable lengths differ (found for 'fixed acidity')
Run Code Online (Sandbox Code Playgroud)
我根本没有任何丢失的数据,我检查过。而且我所有的变量都是相同的长度:
sapply(red_wine_data,function(x) length(x))
fixed acidity volatile acidity
1599 1599
citric acid residual sugar
1599 1599
chlorides free sulfur dioxide
1599 1599
total sulfur dioxide density
1599 1599
pH sulphates
1599 1599
alcohol quality
1599 1599
volatile acidity*citric acid volatile acidity*sulphates
1599 1599
volatile acidity*alcohol citric acid*sulphates
1599 1599
citric acid*alcohol sulphates*alcohol
1599 1599
Run Code Online (Sandbox Code Playgroud)
请帮忙!
不要$在公式中使用运算符:
linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
Run Code Online (Sandbox Code Playgroud)
相反,请执行以下操作:
linear_model_red<-glm(quality~.,data=red_wine_data)
Run Code Online (Sandbox Code Playgroud)
原因是通过使用$,您告诉 R 您的模型应该使用固定的数字向量作为您的响应。在这种情况下,这quality是red_wine_data数据框中的列。
当您拟合初始模型时,这没关系,因为所有其他变量也来自该数据框。但是,当您调用cv.glm进行交叉验证时,R仍会尝试使用相同的固定向量作为您的响应。这不再有效,因为交叉验证的重点是使用数据的子集来拟合模型,然后在不同的子集上对其进行测试。通过删除$(以及red_wine_data它左边的),你告诉 Rquality在data参数指定的数据集中查找变量——这cv.glm将设置为它所做的事情的一部分。这意味着响应将与模型中的其他变量相匹配。