R: преобразовать summary () $ coef в numeri c vector - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь использовать стандартную кривую (линию регрессии) для анализа моих данных. Стандартная кривая выглядит примерно так:

 myData <- data.frame(x=rep(c(10,1,0.1,0.01),each=3),
                          y=(c(26, 25, 24.5,2.65,2.4,2.5,
                               0.25,0.245,0.265, 0.025,0.027,0.024)))

Когда я использую функцию lm() для получения линии регрессии, а затем coef для получения коэффициентов, это работает нормально. Однако, когда я пытаюсь преобразовать вывод в вектор numeri c, который я могу повторно использовать в моем последующем коде, значения меняются с текущих на 1 и 2. Что я сделал не так? Спасибо за любую помощь!

xy <- lm(y~x, data=myData) #Intercept(y) = 0.000653277183897452; x = 2.51659647986179 
datOut <- summary(xy)$coef
PPL <- cbind(VariableName=rownames(datOut), datOut)

ppl<-as.data.frame(PPL)
#Results look great

ppl$Estimate<-as.numeric(ppl$Estimate)
#Estimate column content changes to 1 and 2

Ответы [ 2 ]

1 голос
/ 07 августа 2020

ppl$Estimate изначально является фактором. Если вы конвертируете его напрямую в numeri c, он предоставит уровень коэффициента (отсюда 1, 2 ...). Сначала вы должны преобразовать его в символ:

ppl$Estimate<-as.numeric(as.character(ppl$Estimate))

Или, как упоминается в 27 ϕ 9, используйте stringsAsFactors = FALSE при инициализации фрейма данных.

0 голосов
/ 07 августа 2020

Никогда и никогда не используйте cbind, за которым следует as.data.frame. cbind изменяет типы данных, потому что создает матрицу, а матрица может содержать только один тип данных. Просто используйте data.frame, и вам не нужно будет потом «исправлять» типы данных:

set.seed(42)
xy <- lm(y~x, data=data.frame(x = rnorm(10), y = rnorm(10))) 
datOut <- summary(xy)$coef

ppl <- data.frame(VariableName=rownames(datOut), datOut)
str(ppl)
#'data.frame':  2 obs. of  5 variables:
#$ VariableName: chr  "(Intercept)" "x"
#$ Estimate    : num  0.237 -0.732
#$ Std..Error  : num  0.616 0.64
#$ t.value     : num  0.385 -1.144
#$ Pr...t..    : num  0.71 0.286
...